در این مقاله به بررسی تست نفوذ پروتکل RDP ریموت دسکتاپ در چهار سناریو میپردازیم. از طریق آن، ما سعی میکنیم توضیح دهیم که چگونه یک مهاجم میتواند امنیت را در سناریوهای متفاوت نقض کند و ادمین چه گامهایی را باید هنگام فعال کردن سرویسهای RDP برای دفاع در برابر حمله بردارد. همچنین مراحل تست نفوذ پروتکل RDP را بررسی میکنیم.
معرفی تست نفوذ پروتکل RDP
RDP یا Remote Desktp Protocol یک پروتکل اختصاصی است که توسط مایکروسافت ایجادشده است. این پروتکل یک رابط گرافیکی برای اتصال به سیستم دیگر از طریق اتصال شبکه در اختیار کاربر قرار میدهد. بهطور پیشفرض، سرور RDP به پورت TCP 3389 گوش میدهد. در یک شبکه، بهترین روش غیرفعال کردن سرویسهایی است که استفاده نمیشوند، زیرا میتوانند علت بالقوه برای ایجاد خطر باشند. سرویس ریموت دسکتاپ نیز از این امر مستثنا نیست.
اگر سرویس در سیستم غیرفعال است، میتوان با استفاده از مراحل زیر آن را فعال کرد. در داخل کنترل پنل سیستم، یک بخش System and Security وجود دارد. در داخل این بخش، یک بخش system وجود دارد. پس از ورود به این بخش، در منوی سمت چپ، گزینه Remote Settings مطابق تصویر زیر وجود دارد. همچنین میتوان تأیید کرد که سیستمی که ما روی آن کار میکنیم نسخه Enterprise Windows 10 است.
با کلیک بر روی گزینه Remote Setting میبینیم که پنجره کوچکی باز میشود. این پنجره از چندین برگه تشکیلشده است. اما در داخل Remote Tab میبینیم که بخشی با عنوان Remote Desktop وجود دارد. از این بخش میتوان برای فعال یا غیرفعال کردن سرویس ریموت دسکتاپ استفاده کرد. در حال حاضر، همانطور که در تصویر زیر نشان دادهشده است، سرویس را فعال میکنیم.
ازآنجاییکه ما سرویس ریموت دسکتاپ را در ویندوز خود فعال کردهایم، میتوان با انجامNmap Port Scan، سرویس در حال اجرای دستگاه را تأیید کرد. بهطور پیشفرض، پورتی که سرویس ریموت دسکتاپ روی آن اجرا میشود، پورت ۳۳۸۹ است.
میتوان مشاهده کرد که دستگاه ویندوز با آدرس IP 192.168.1.41 با موفقیت سرویس ریموت دسکتاپ را دریافت کرده است. همچنین میتواند نام سیستم دستگاه را استخراج کند، که نام آن MSEDGEWIN10 است.
ازآنجاییکه ما سرویس ریموت دسکتاپ را در ویندوز خود فعال کردهایم، میتوان با انجامNmap Port Scan، سرویس در حال اجرای دستگاه را تأیید کرد. بهطور پیشفرض، پورتی که سرویس ریموت دسکتاپ روی آن اجرا میشود، پورت ۳۳۸۹ است.
میتوان مشاهده کرد که دستگاه ویندوز با آدرس IP 192.168.1.41 با موفقیت سرویس ریموت دسکتاپ را دریافت کرده است. همچنین میتواند نام سیستم دستگاه را استخراج کند، که نام آن MSEDGEWIN10 است.
ورود با بروت فورس برای تست نفوذ پروتکل RDP
در فرآیند انجام تست نفوذ در سرویس ریموت دسکتاپ، پس از اسکنNmap، زمان انجام حمله بروت فورس است. لیست طولانی از ابزارهایی وجود دارد که میتوان از آنها برای انجام حمله بروت فورس استفاده کرد. یکی از مطمئنترین ابزارهایی که میتواند کار را انجام دهد Hydra است. اگرچه بروت فورس نامیده میشود، اما بیشتر شبیه یک حمله دیکشنری است.
ما باید دو دیکشنری بسازیم که یکی با فهرستی از نامهای کاربری احتمالی و دیگری با فهرستی از رمزهای عبور احتمالی باشد. دیکشنریها user.txt و pass.txt نام دارند. با آماده کردن این موارد، تنها چیزی که باقی میماند این است که دیکشنریها و آدرس IP ماشین موردنظر را در اختیار Hydra قرار دهید تا یک حمله بروت فورس در ورود به RDP انجام دهد. میبینیم که مجموعهای از اعتبارنامهها(credential) بازیابی شد. با استفاده از این مجموعه اعتبارنامه میتوان یک RDP session را آغاز کرد.
حمله بروت فورس که اخیراً انجام دادیم قابل جلوگیری است. چون باوجود Account Policy ممکن است جلوی Hydra یا هر ابزار دیگری از تکرار ورود credential ها جلوگیری میکند. این اساساً یک Lockout Policy است. برای تغییر اینpolicy، باید پنجره Local Security Policy را بازکنیم. این را میتوان با تایپ “secpol.msc” انجام داد. پنجرهای مشابه تصویر زیر باز میشود.
برای رسیدن به policy خاص، باید به Account Policies در تنظیمات امنیتی بروید. در داخلAccount Policies، یک Account Lockout Policy وجود دارد. این شامل ۳ policy است که هرکدام روی جنبهای از Account Lockout میکنند. اولی مدتزمان قفل را کنترل میکند. اینزمانی است که برای ورود مجدد پس از قفل شدن باید سپری شود. سپس Lockout Threshold راداریم. این تعداد تلاشهای نامعتبر را کنترل میکند. لطفاً این موارد را طبق نیاز خود تغییر دهید. این باید از حمله بروت فورس جلوگیری کند.
پس از آزمایش حمله بروت فورس با استفاده ازHydra، میتوان مشاهده کرد که امکان استخراج credential مانند قبل وجود ندارد. اگرچه هنوز ریسک وجود دارد که برای جلوگیری از آن میتوان با اجبار کاربران به تغییر مکرر رمزهای عبور و اعمال Policy های خوب برای رمز عبور از آن جلوگیری کرد.
ازآنجاییکه lockout policy را فعال کردهایم، نمیتوانیم حتی با رمز عبور صحیح وارد دستگاه شویم تا زمانی که policy را تغییر کند همانطور که در تصویر زیر نشان دادهشده است یک پیام Lockout نمایش داده میشود.
post exploitation با metasploit
Metasploit Framework هنوز یکی از قابلاعتمادترین روشها برای انجام post-exploitation است. در طول تست نفوذRDP، اگر ماشینی وجود داشته باشد که RDP را غیرفعال کرده باشد، میتوان RDP را در آن دستگاه از طریق meterpreter فعال کرد. در تصویر زیر meterpreter دستگاهی راداریم که RDP را غیرفعال کرده است.
ما از دستور getgui در meterpreter برای ایجاد کاربری بانام ignite با رمز عبور ۱۲۳ استفاده میکنیم. پس از تکمیل، میتوانیم از طریق RDP بهعنوان کاربر ignite وارد دستگاه شویم.
این دستور meterpreter getgui بود. از ماژول post/windows/manage/enable_rdp برای اضافه کردن یک کاربر جدید با امتیازات RDP استفاده میکند. حالا سعی کنیم بهطور مستقیم از ماژول استفاده کنیم. meterpreter session را در بکگراند میگذاریم و سپس ماژول enable_rdp را باز میکنیم.
ما نام کاربری و رمز عبور را برای کاربر ایجادشده و شناسه session ارائه میدهیم. کاربر دیگری به نام Pavan با رمز عبور ۱۲۳ بر روی دستگاه ایجاد میکند که سپس میتواند برای دسترسی به دستگاه از طریق RDP استفاده شود.
تدوام (Persistence)
session که با استفاده از ماژول enable_rdp ایجاد شد و کاربر به آن دسترسی دارد، یک session با سطح دسترسی پایین خواهد بود. میتواند برای به دست آوردن دسترسی ادمین از اکسپلویت sticky_keys استفاده کرد. پس از انتخاب اکسپلویت، باید یک session identifier ارائه کنیم. در تصویر مشاهده میشود که اکسپلویت با موفقیت ایجادشده است.
ازآنجاییکه Sticky Keys را میتوان با ۵ بار فشار دادن کلید Shift شروع کرد، با استفاده از RDP به دستگاه موردنظر متصل میشویم و سپس این کار را ادامه میدهیم. همانطور که در تصویر زیر نشان دادهشده است، یک پنجره خط فرمان با دسترسی بالا باز میشود.
دامپ کردن اعتبار (Credential Dumping)
از Mimikatz میتوان برای انجام این نوع حمله استفاده کرد. ازآنجاییکه مهاجم توانست session دستگاه را به دست آورد، از Mimikatz استفاده کرد و تابع mstsc را در ماژول ts اجرا میکند.
Mstsc فرآیندی است که در هنگام استفاده از سرویس دسکتاپ از راه دور اجرا میشود. سپس ارتباط پروتکل RDP را رهگیری میکند تا credential ذخیرهشده را استخراج کند. در تصویر زیر مشاهده میشود که Mimikatz میتواند اعتبار کاربری raj را استخراج کند.
session hijacking
Session Hijacking نوعی حمله است که در آن مهاجم میتواند به یک session فعال دسترسی پیدا کند که مستقیماً در دسترس مهاجم نیست. برای نشان دادن این نوع مهاجم باید یک سناریو ایجاد کنیم. در اینجا ما یک ویندوز با سرویس ریموت دسکتاپ فعال و در حال اجرا با دو کاربر فعال raj و aarti داریم.
یکی از مهمترین فاکتورهای انجام Session Hijacking Attack این است که session دیگری که قصد هک کردن آن راداریم باید یک session فعال باشد. در اینجا، کاربر raj و کاربر aarti هر دو کاربران فعال با session های فعال در دستگاه هدف هستند.
ما با استفاده از credential که توانستیم با استفاده از Mimikatz استخراجکنیم، وارد کاربر raj میشویم.
اکنون پس از ورود بهعنوان کاربر raj باید Mimikatz را دوباره اجرا کنیم. ما باید تمام session های فعال را لیست کنیم. ما از دستور sessions از ماژول ts استفاده میکنیم. در اینجا میبینیم که یک Session 3 برای کاربر aarti وجود دارد که فعال است.
ما از دستور elevate از ماژول token برای جعل توکن برای NT Authority\SYSTEM استفاده میکنیم و امکان اتصال به جلسات دیگر را فراهم میکنیم. دیدیم که کاربر aarti دارای session 3 است. باید با استفاده از دستور remote ماژول ts به آن session خاص متصل شویم.
همانطور که در تصویر میبینیم که ما توانستیم session ریموت دسکتاپ را برای کاربر aarti را از دسترسی کاربر raj دریافت کنیم. این فرآیندی است که Session Hijacking برای سرویسهای ریموت دسکتاپ دور امکانپذیر است.
کاهش خطر حمله session hijacking در تست نفوذ پروتکل RDP
مثل تمام سرویسهای ویندوز، ریموت دسکتاپ لاگهای مختلفی ایجاد میکند که حاوی اطلاعاتی درباره کاربرانی است که وارد سیستم شدهاند، یا زمانی که آنها بانام دستگاه و یا IP وارد سیستم شدهاند.
انواع مختلفی از مورد سرویس ریموت دسکتاپ وجود دارد. این شامل لاگها احراز هویت، ورود به سیستم، خروج و غیره است. در حین اتصال به کلاینت، احراز هویت میتواند موفقیتآمیز یا شکست بخورد. با هر دو این موارد، ما رویدادهای مختلفی برای شناسایی داریم. لاگهای احراز هویت در داخل بخش security قرار دارند.
- EventID 4624: Authentication process was successful
- EventID 4625: Authentication process was failure
سپس رویدادهای Logon و Logoff راداریم. logon پس از احراز هویت موفقیتآمیز رخ میدهد. Logoff زمانی که اتصال کاربر قطعشده باشد را ردیابی میکند. این لاگهای خاص در موارد زیر قرار خواهند گرفت:
Applications and Services Logs > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational.
Event ID 21: Remote Desktop Logon
Event ID 23: Remote Desktop Logoff
درنهایت، ما Session Connection Logs راداریم. این دسته بیشترین رویدادها را دارد زیرا دلایل مختلفی برای قطع ارتباط وجود دارد و باید بر اساس EventID خاص برای کاربر مشخص باشد. این لاگها در موارد زیر قرار دارند:
Applications and Services Logs > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational.
EventID 24: Remote Desktop Session is disconnected
EventID 25: Remote Desktop Session is reconnection
میبینیم که در تصویر دادهشده کاربر aarti دوباره وصل شده است. اینیک لاگ ورود است از زمانی که ما Session Hijacking را انجام دادیم. این بدان معناست که اگر یک مهاجم چنین فعالیتی را انجام دهد، بهتر است به دنبال این نوع گزارشها باشید.
برای کاهش احتمال حمله در تست نفوذ پروتکل RDP میتوان یک محدودیت زمانی خاص برای disconnected session همچنین idle remote desktop که رم را درگیر نگه میدارد تعیین کرد. این پالیسی از قسمت زیر در دسترس است:
Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Session Time Limits
این پالیسی احتمال session hijacking را کاهش میدهد.
حمله MS12-020 Free DoS در تست نفوذ پروتکل RDP
حمله DoS یا Denial-of-Service در رابطه با سرویسهای ریموت دسکتاپ بسیار شبیه به حمله DoS معمولی است. یکی از مواردی که قبل از شروع حمله باید به آن توجه کرد این است که حملات DoS از طریق ریموت دسکتاپ بهطورکلی امکانپذیر نیست. در این نمایش از یک ویندوز ۷ استفاده خواهیم کرد.
قبل از اکسپلویت، Metasploit یک ابزار کمکی دارد که میتوان از آن برای اسکن دستگاه برای این آسیبپذیری خاص استفاده کرد. همانطور که از تصویر زیر میتوان مشاهده کرد که ماشینی که ما هدف قرار دادهایم در برابر حمله DoS آسیبپذیر است.
این حمله به روش زیر عمل میکند. در مرحله اول، دستگاه موردنظر را با استفاده از آدرس IP شناسایی میکند. سپس سعی میکند از طریق سرویس RDP به دستگاه متصل شود. هنگامیکه ماشین هدف پاسخ میدهد که آماده اتصال است، اکسپلویت بستههایی با اندازه بزرگ به دستگاه ارسال میکند. اندازه بستهها افزایشی است تا زمانی که پاسخگو نباشد. میتوانیم ببینیم که با یک بسته ۲۱۰ بایتی شروع میشود.
تا زمانی که ماشین هدف نتواند آن بستهها را مدیریت کند، به ارسال بستهها ادامه میدهد. از تصویر زیر میتوان مشاهده کرد که آن دستگاه هدف کرش کرده و منجر به blue screen شده است.
اکسپلویت کردن با BlueKeep
BlueKeep یک آسیبپذیری امنیتی بود که در اجرای پروتکل RDP کشف شد که میتواند به مهاجم اجازه اجرای کد از راه دور را بدهد. این باگ در اواسط سال ۲۰۱۹ گزارش شد. Windows Server 2008 و Windows 7 اهداف اصلی این آسیبپذیریها بودند. برای درک این حمله، باید بدانیم که RDP از کانالهای مجازی استفاده میکند که قبل از احراز هویت پیکربندیشدهاند. اگر سروری کانال مجازی «MS_T120» را با کانال ثابتی غیر از ۳۱ bind کند، خرابی در heap رخ میدهد که امکان اجرای کد دلخواه را در سیستم فراهم میکند.
ازآنجاییکه این حمله بر اساس خرابی heap است، این احتمال وجود دارد که اگر پیکربندی اکسپلویت نادرست باشد، منجر به خرابی رم شود. Metasploit حاوی یک اسکنر کمکی برای BlueKeep است. برای این حمله به آدرس IP ماشین موردنظر نیاز داریم. این حمله را بر روی یک ویندوز ۷ با دسکتاپ از راه دور فعال اجرا میکنیم. میبینیم که نشان میدهد که هدف آسیبپذیر است.
پس از انتخاب اکسپلویت، آدرس RDP IP دستگاه را با وارد میکنیم. برای ویندوز ۷ از target ۵ استفاده میکنیم که میتواند بر اساس سیستمعامل متفاوت باشد. میبینیم که به هدف متصل میشود و ابتدا بررسی میکند که آیا آسیبپذیر است یا خیر. سپس به ایجاد خرابی heap که قبلاً در مورد آن صحبت کردیم ادامه میدهد و منجر به یک meterepreter shell بر روی دستگاه هدف میشود.
تغییر پورت RDP
یکی از مراحلی که در تست نفوذ پروتکل RDP میتوان انجام داد، تغییر شماره پورتی است که ریموت دسکتاپ روی آن کار میکند. اگرچه به نظر میرسد که اینیک مکانیسم دفاعی خاصی نیست، اما اگر بهدرستی انجام شود، مهاجم ممکن است حتی به دنبال این مورد نباشد. همه میدانند پورت RDP 3389 است، اما وقتی تغییر میکند، ممکن است مهاجم حتی نتواند وجود RDP را تشخیص دهد. برای این کار باید تغییراتی در رجیستری ایجاد کنیم. ویرایشگر رجیستری را بازکنید و به مسیر زیر بروید:
در نمایش خود پورت را از ۳۳۸۹ به ۳۳۱۴ تغییر دادیم. همانطور که در تصویر زیر نشان دادهشده است، میتوانیم از دستور rdesktop از لینوکس برای اتصال به ویندوز استفاده کنیم.
حمله MITM با SETH در تست نفوذ پروتکل RDP
در این مرحله از تست نفوذ پروتکل RDP، ابزار SETH را از github دانلود و موارد پیشنیاز نصب را مطابق شکل زیر انجام میدهیم.
پس از نصب، برای نصب حمله، به آدرسlocal IP ، آدرس target IPو اینترفیس شبکهای که مورداستفاده قرار میگیرد نیاز داریم. در این مورد eth0 است. در اینجا میبینیم که حمله mount شده و برای قربانی آمادهشده است.
در این مرحله از تست نفوذ پروتکل RDP از دید قربانی، با باز کردن پنجره rdp و انتخاب کاربر موردنظر برای اتصال به آن از کاربر RDP نام کاربری و رمز کاربر موردنظر را درخواست میکند.
در اینجا میبینیم که به نظر میرسد تضاد در مورد نام سرور و مرجع صدور گواهی مورد اعتماد وجود دارد. این معمولاً کاملاً شبیه پنجرهای است که درخواست ذخیره گواهی را میدهد. به دلیل تشابه قربانی متوجه خطا نشده و روی دکمه Yes کلیک میکند.
بهمحض برقراری ارتباط، میتوانیم به Kali Linux که در آن حمله را اجرا کردهایم، برگردیم. میبینیم که میتواند هش NTLM و همچنین رمز عبوری را که قربانی وارد کرده بود، مشاهده کنیم.
مقالهی تست نفوذ پروتکل RDP از منبع hackingarticles ترجمهشده است:
امیدوارم از مقالهی تست نفوذ پروتکل RDP استفاده لازم را برده باشید. درصورتیکه علاقهمند به مباحث تست نفوذ شبکه هستید میتوانید در دوره SANS Pack Level 1 آکادمی تک وان ۲۴ شرکت کنید.