در اواخر اردیبهشت ماه سال جاری، شرکت مایکروسافت خبر از وصله شدن آسیبپذیری روی سرویس RDP ارایه کرد که میتواند منجر به اجرای دستور از راه دور یا RCE شود. این آسیبپذیری با نام CVE-2019-0708 در پایان سال گذشتهی میلادی و برای نسخههای Windows 2008 R2 ،Windows 2008 و Windows 2003 از نسخههای سرور ویندوز و نسخههای Windows 7 ،Windows Vista و Windows XP از نسخههای کلاینت ویندوز گزارش شد. چون سرویس RDP استفادهی بسیاری در اینترنت دارد، آسیبپذیری با سطح critical severity، بسیار خطرناک به نظر میرسد.
از آنجا که تجربهی آسیبپذیریهایی مانند EternalBlue روی سرویس SMB مایکروسافت باعث به وجود آمدن Wormها و Ransomware های مختلف مانند WannaCry شده بود، اکسپلویت آسیبپذیری سرویس RDP با نام BlueKeep برای CVE-2019-0708 تا ماه پیش بهشکل عمومی انتشار نیافته بود و تنها روش تبدیل این آسیبپذیری به منع سرویس، در دسترس برخی افراد بود. اما در ماه گذشته برخی از اکسپلویت پکها شروع به انتشار اکسپلویتهای اجرای دستور از راه دور برای این آسیبپذیری کردند. در نتیجه احتمال شیوع wormها و ransomwareهایی با استفاده از این آسیبپذیری بسیار بیشتر شده است. این آسیبپذیری قبل از تصدیق اصالت کاربر رخ میدهد که امکان بهکارگیری این آسیبپذیری برای انتشار worm را ایجاد میکند. برای برطرف کردن این آسیبپذیری روی سرویس RDP باید سیستمعامل ویندوز خود را بهروزرسانی کنید و از بهروز شدن این وصله طبق جدول مایکروسافت و بهطور خاص KB4499175 مطمین شوید؛ وگرنه، بهراحتی در ماههای آینده مورد نفوذ قرار خواهید گرفت. برای بررسی اینکه سرویس شما آسیبپذیر است یا نه میتوانید از این ابزار استفاده کنید.
توضیح فنی
پروتکل RDP امکان ایجاد ارتباط بین کلاینت و سرور را فراهم میکند. در شکل زیر میتوانید ایجاد ارتباط مربوط به پروتکل RDP مایکروسافت را مشاهده کنید.
این ارتباط برای تبادل داده با استفاده از کانالهای دو طرفهی مجازی بین آنها شکل میگیرد. در نسخهی ویندوز 2000، 32 کانال مجازی ایستا (Static Virtual Channels(SVCs)) در RDP 5.1 ایجاد شد ولی بهدلیل محدودیت این تعداد کانالها، کانالهای مجازی پویا ((Dynamic Virtual Channels (DVCs) که درون کانالهای مجازی ایستا بودند، شکل گرفت. کانالهای مجازی ایستا در ابتدای نشست ایجاد شده و تا انتهای آن باقی میمانند ولی در مقابل کانالهای مجازی پویا براساس نیاز ایجاد و خاتمه پیدا میکنند.
وصلهی ارایه شده برای CVE-2019-0708، توابع IcaBindVirtualChannels_ و IcaRebindVirtualChannels_ در درایور مربوط به سرویس RDP با نام termdd.sys را که مرتبط با کانالهای مجازی ایستا هستند، تغییر داده است که نشاندهندهی وجود آسیبپذیری در این قسمت است. این آسیبپذیری بهدلیل پیشفرض غلط سرویس RDP برای متصل کردن کانال مجازی ایستای MS_T120 بهعنوان کانال مرجع به شمارهی 31 است. این کانال برای استفادهی داخلی سرویس RDP با اجزای سیستمعامل تعبیه شده بود. اما در هنگام آغاز ارتباط، کلاینت میتواند کانال مجازی دیگری را با نام MS_T120 با شمارهای غیر از 31 معرفی کند که منجر به آسیبپذیری دستهی heap corruption و Use After Free میشود. این آسیبپذیری که از دستهی آسیبپذیری Use After Free است، اگر پس از بستهشدن کانال مجازی فرآیند Cleanup انجام نشود -که پیام دارای سایز اشتباه نباشد- میتواند منجر به اجرای دستور از راه دور شود.