RDP و RDS چیست؟

 

 

 

RDP/RDS چیست؟

پروتکل اتصال ریموت به دسکتاپ (یا به اختصار RDP) یک پروتکل اختصاصی است که توسط مایکروسافت توسعه داده شده و برای نشان دادن اتصال به یک کامپیوتر متصل به شبکه به صورت گرافیکی کاربرد دارد. RDP اساساً یک پروتکل برای کار با یک سیستم دیگر به صورت کامل درجای دیگر است. همانطور که باید بدانید این پروتکل از نوعی است که تعداد زیادی راه برای کنترل امنیت، احراز هویت، کنترل توانایی های امنیتی و کنترل نوع رمزنگاری ارتباط را داراست.

در گذشته TSE (Terminal Services) و حالا RDS (Remote Desktop Services) یک نقش بومی  یا نیتیو در Windows Server 2008, 2012/2012R2, 2016 و 2019 می‌بود و مجموعه‌ای از سرویس‌هاست که به یک یا چند کاربر اجازه می‌دهد از طریق پروتکل RDP به برنامه‌های (RemoteApp Programs), Windows Desktop (Remote Desktop Sessions) یا دسکتاپ مجازی (VDI) دسترسی همزمان داشته باشند. این اتصال و دسترسی با استفاده از شبکه داخلی درون یک مجموعه یا اینترنت صورت می‌گیرد.

اجزای RDS

RDS شامل شش سرویس است:

Remote Desktop Session Host (RDSH): به شما اجازه می دهد چندین دسکتاپ را با اتصال همزمان از راه دور  مدیریت کنید.

Remote Desktop Virtualization Host (RDVH): سرور RDVH با “Microsoft Hyper-V” ادغام می شود تا دسکتاپ‌های مجازی یا ویرچوآل ماشین‌ها را بر اساس تقاضا توزیع نماید. نقش RDVH نشان دهنده زیرساخت Microsoft VDI می‌باشد.

Remote Desktop License Server (RDLS): این نقش نصب و توزیع کلیه  RDS CAL را مدیریت می کند.(برای هر کاربر و هر دستگاه)

Remote Desktop Connection Broker (RDCB): برای مدیریت لود بالانس و سشن‌های اتصال مجدد RDS بکار می‌رود.

Remote Desktop Gateway (RDG): RDG به عنوان یک فایروال RDP برای تمامی کاربران از راه دور دسکتاپ عمل می‌کند. RDG فقط از  HTTPS / 443 استفاده می کند و برای ایمن سازی، RDP را روی HTTPS انتقال می‌دهد.

Remote Desktop Web Access (RDWA): این یک پورتال دسترسی به وب RDS است که به شما امکان انتشار منابع(ریسورس‌های) داخلی RDS و توزیع‌ها را از طریق یک پورتال وب را به شما می‌دهد.

 

معماری RDS

در یک نگاه معماری استاندارد RDS ویندوز سرور از نسخه 2008 تا 2019 با اجزای ذکر شده در بالا به صورت تصویر زیر اجرایی میگردند:

 

RDP Components

آیا RDP یک پروتکل امن است؟

پیکربندی پیش فرض RDP هنگام فعال بودن، آن را در برابر چند حمله متفاوت آسیب پذیر می‌کند. با این حال، برخی از پیشرفت های امنیتی در نسخه جدید RDS برای Windows Server ارائه شده است.

به طور پیش فرض ، چندین حمله امکان پذیر است:

  • Denial of Service (DoS) یا همان داس
  • Man-in-The-Middle (MiTM)
  • Brute-Force بروت فورس

ریسک‌های امنیتی پروتکل RDS

هنگام سروکله زدن با پروتکل RDP، به طور پیش فرض چندین آسیب پذیری و خطر امنیتی وجود دارد که باید آنها را بشناسید و آنها را در نظر بگیرید:

  • نمایش RDS بر روی اینترنت
  • Man-in-the Middle (MiTM)
  • حمله رمزگذاری
  • حمله داس Denial of Service (DOS)
  • تخلیه هش‌های رمزعبور
  • پیکربندی اشتباه RDS
  • باج افزار
  • حمله بروت فورس
  • استفاده از RDSH فضای اشتراک گذاشته‌ شده‌‌‌‌‌‌‌‌‌‌‌‌‌ی RDS
  • استفاده از KEY LOGGERها

 

نمایش RDS بر روی اینترنت

هیچ ضرورتی وجود ندارد که سرویس Remote Desktop را در در معرض اینترنت و اتصال از طریق اینترنت قرار دهید، اتصال از طریق اینترنت و خارج از شبکه داخلی باعث می‌شود کاربران خطرناک و افرادی که قصد حمله به RDS شما را دارند از این فرصت استفاده کنند و بیشتر نیز سعی می‌نمایند اکانت administrator را هدف قرار دهند. در این میان اگر هکرها موفق شوند رمز عبور با موفقیت حدس بزنند و پیدا کنند، دسترسی حاصل می‌تواند پیامدهای قابل توجهی برای سازمان شما داشته باشد و حملات بیشتر علیه زیرساخت های قابل اعتماد شما یا متصل به شما را تسهیل کند.

حمله Man-in-the Middle (MiTM)

اگرچه سرویس Remote Desktop رمزگذاری داده را بین کاربر و سرور به طور پیش فرض فراهم می‌کند ، اما تأیید هویت سرور Terminal / RDSH را تأیید نمی‌کند. این عدم تأیید هویت به هکر اجازه می دهد، با به کارگیری سایر روش‌های حمله و نفوذ، کلیه ارتباطات ارسالی بین کاربر و Terminal Server را رهگیری کند. احتمال این نوع حمله به توانایی هکر در کنترل ارتباطات بین سرویس گیرنده(کاربر) و Terminal Server بستگی دارد. به طور معمول، هکر نیاز به حملات دیگری مانند جعل ARP (پروتکل حل آدرس) یا جعل اطلاعات DNS (Domain Name System) دارد که اطلاعات را قبل از ارسال به سرور اصلی به سرور خود هدایت کند.

 

حمله رمزگذاری

به طور پیش فرض، سرویس Remote Desktop از تنظیمات رمزگذاری متوسط سازگار با کلاینت استفاده می‌کند. این سطح از رمزگذاری، اطلاعات ارسالی بین کاربر و سرور را با حداکثر قدرت کلید پشتیبانی شده توسط کاربر رمزگذاری می کند. به طور کلی در چنین محیطی تعدادی از کاربرها از نسخه‌های اولیه کلاینت استفاده می‌کنند که خود ریسک‌را افزایش می‌دهد. تنظیم رمزگذاری متوسط ممکن است باعث شود در مدت محدودی رمز شکسته شود و اطلاعات افشا شود.

 

حمله داس Denial of Service (DOS)

ترمینال‌هایی که از تأیید هویت سطح شبکه (NLA) پشتیبانی می کنند اما پیکربندی نشده اند بسیار خطرناک هستند. زیرا NLA قبل از اینکه سرور سشنی را برای آن کاربر ایجاد کند، رایانه کاربر را مجبور می کند تا اعتبار کاربر را برای تأیید اعتبار ارائه دهد. ایجاد سشن از منابع سرور استفاده می‌ند و برای همین NLA نیز یکسری دیوار دفاعی برای جلوگیری از اتصال کاربران ناخواسته یا هکرها دارد حال هکرها با استفاده از حمله DoS تعداد زیادی کانکشن به سرور ایجاد می‌کنند و همین امر و درگیری سرور برای شناختن کاربر صحیح از هکر منابع خود را صرف می‌کند واین کار موجب جلوگیری از اتصال کاربران صحیح به سرور می‌شود.

 

تخلیه هش‌های رمزعبور

باید اطمینان حاصل کنید ک هیچ یک از کاربران ریموت دسکتاپ شما “Local Administrators” نیستند زیرا اگر چندین Local Admin داشته باشید این مدیران می‌توانند با استفاده از ابزارهای dump hash password رمز دیگر adminها را بر روی شبکه متوجه شوند. برای جلوگیری از هرگونه خطر مربوط به استفاده از ابزار dump hash password مانند Mimikatz ، باید از AppLockerاستفاده شود.

 

پیکربندی اشتباه RDS

همه سرور‌های RDS باید با استفاده از ابزارهای امنیتی امن گردند و قابلیت دسترسی برای پیکربندی غلط نداشته باشند تا خطر پیکربندی نادرست توسط افرادی که اجازه دسترسی ندارند نداشته باشند.

 

باج افزار

باج افزارها دارند فراگیر تر می‌شوند و سعی می‌شود که در این نوع حملات RDP ها مورد حمله واقع شوند زیرا این پروتکل با ابزارهای موجود به استفاده کننده آن اجازه می‌دهد که کنترل کامل یک سیستم را بعهده گیرد و این امر می‌تواند بسیار خطرناک باشد. برای مقابله با این خطر بهتر است که تمامی سرور‌های RDSH قفل شوند تا دسترسی افراد بدون مجوز به آنها جلوگیری شود.

حمله بروت فورس

اگر از پسوردهای ضعیف استفاده می‌نمایید امکان آسیب پذیری شما در مقابل حملات بروت فورس بسیار بالاست. برای جلوگیری از این نوع حمله بهترین راه حل اطمینان از رمز عبور قدرتمند برای تمامی افرادی است که به RDS شما متصل می‌گردند. یکی دیگر از نکات مفید کم کردن تعداد افرادی است که به RDSHشما دسترسی دارند، هیچگاه از تنظیمات « illimited » با تعداد نامعلومی کاربر برای اتصال به سرور استفاده نکنید.

 

فضای اشتراک گذاشته‌ شده‌‌‌‌‌‌‌‌‌‌‌‌‌ی RDS

هنگامی که زیرساخت جدید RDS را مستقر می کنید ، مجموعه RDS جدید به طور خودکار ایجاد می شود. اکثر دپارتمان‌های IT  مجموعه RDS را با تنظیمات پیش فرض نگه ایجاد می‌کنند و آن را طوری پیکربندی می‌کنند که به همه کاربران ریموت دسکتاپ اجازه می‌دهند به یک بخش مشترک متصل شوند.  مجموعه RDS اغلب برای میزبانی از همه نوع برنامه‌ها یک شرکت (منابع انسانی ، امور مالی ، IT … ) استفاده می شود و هیچ استثنا و تغییری از لحاظ محدودیت دسترسی برنامه‌ها وجود ندارد در واقع همه برنامه‌ها در یک محیط “مشترک” / سرورهای میزبان RD اجرا می‌گردند. و این امر باعث ایجاد  حمله و نفوذ می‌شود. برای حل این موضوع بهتر است هر برنامه یا هر محیطی بر یک مجموعه RDS جداگانه اجرا شود.

 

حمله با استفاده از Keyloggerها به RDP

کی‌لاگر یک نرم افزار جاسوسی است که هر کلیدی که بر روی کیبور فشار داده شود را ثبت و ارسال می‌کند برای جلوگیری از آلوده شدن و ثبت کلیدها توسط کی‌لاگر نیاز است تا در AppLocker سیاستی اتخاذ شود تا برنامه‌های خاصی قابلیت اجرا بر روی سشن‌های RDداشته باشند.

تمهیدات امنیتی مهم برای RDP:

  • فعال کردن HA (High Availability) برای تمامی سرویس‌های RDS: فعال کردن برای RDSH/RDCB/RDWA/RDG/RDLS و SQL server
  • ایجاد یک مجموعه جدید RDS برای هر کاربر و هر برنامه
  • نصب RDG (Remote Desktop Gateway) برای همه کاربران خارج از مجموعه
  • فعال کردن MFA (یا 2FA)
  • فعال کردن NLA (Network Level Authentication) برای تمام مجموعه‌های RDS
  • رمزگذاری سطح بالا برای کلیه ارتباطات RDP (رمزگذاری 128 بیتی)
  • استفاده از احراز هویت TLS برای همه RDSH ها
  • AppLocker را در تمام سرورهای میزبان RD سشن‌ها تعریف و اعمال کنید
  • ایجاد پسورد قوی برای همه استفاده کنندگان
  • تغییر پورت پیش فرض RDP
  • عدم دسترسی حضوری به سرورهای RD
  • محدود کردن تعداد کاربران
  • تمام لاگ‌های RDباید ذخیره گردد و به صورت مداوم آنالیز شود

 

فعال کردن HA (High Availability) برای RDP

کلیه سرویس ها و اجزای RD باید در دسترس باشند:

RD Session Host Server: حداقل دو سرور RDSH باید بخشی از یک مجموعه اختصاصی RDS  باشند

RD Connection Broker: حداقل دو سرور RDCB باید مستقر و پیکربندی شوند، حالت HA (SQL Server مورد نیاز است)

RD Web Access: حداقل دو سرور RD Web Access باید در کنار Load balancer مستقر و پیکربندی شوند

RD Gateway: حداقل دو سرور RD Gateway باید در حالت HA و کنار Load Balancer مستقر و پیکربندی شوند

RD Licensing Server: حداقل دو سرور لایسنس RD در حالت HA باید مستقر و پیکربندی شوند

 

ایجاد یک مجموعه جدید RDS برای هر کاربر و هر برنامه

ابتدا باید تمام برنامه های منتشر شده خود را لیست کنید (RemoteApps) سپس، باید یک لیست دسته‌بندی از برنامه های خود ایجاد کنید. هر گروه برنامه باید از طریق یک مجموعه اختصاصی RDS Session (سرورهای اختصاصی RDSH) منتشر و توزیع شود. RD Web Access & RD Gateway را می توان برای همه کاربران ریموت دسکتاپ به اشتراک گذاشت (حالت اشتراکی برای سرویس های وب RD مجاز است).

 

نصب RDG (Remote Desktop Gateway) برای RDP

توصیه می شود برای همه کاربران ریموت دسکتاپ یک RD Gateway مستقر کنید و یک CAP قوی (خط مشی های دسترسی اتصال) و RAP (خط مشی های دسترسی به منابع) را برای بهبود سطح امنیت محیط RDS تعریف کنید. RD Gateway برای کار کردن به یک گواهینامه SSL معتبر نیاز دارد، گواهی SSL که به RD Gateway تحویل داده می شود باید توسط CA معتبر/معتمد (مرجع صدور گواهینامه) ارائه شده باشد.

 

فعال کردن MFA (یا 2FA)

توصیه می شود MFA (احراز هویت چند عاملی) را برای همه کاربران ریموت دسکتاپ فعال کنید که از خارج به منابع داخلی RDS شما متصل می‌شوند. سرویس MFA برای کارکرد به یک  RD Gateway نیاز دارد. کاربران ریموت دسکاپ برای تکمیل فرآیند MFA باید حداقل یک دستگاه فیزیکی (تلفن هوشمند و …) داشته باشند.

 

فعال کردن NLA (Network Level Authentication)

تأیید اعتبار سطح شبکه (یا NLA) از ارائه دهنده CredSSP برای ارائه اعتبارنامه کاربر به سرور، قبل از اینکه سرور یک سشن ایجاد کند استفاده می‌کند. این امر با جلوگیری از هرگونه خطر امنیتی مربوط به حمله DOS، سطح امنیتی محیط RDS را بهبود می‌بخشد. توصیه می شود NLA را در همه مجموعه‌های RDS خود فعال کنید.

 

رمزگذاری سطح بالا برای کلیه ارتباطات RDP (رمزگذاری 128 بیتی)

به طور پیش فرض، سرویس Remote Desktop از تنظیمات رمزگذاری متوسط سازگار با کلاینت استفاده می‌کند. این سطح از رمزگذاری، اطلاعات ارسالی بین کاربر و سرور را با حداکثر قدرت کلید پشتیبانی شده توسط کاربر رمزگذاری می کند. به طور کلی در چنین محیطی تعدادی از کاربرها از نسخه‌های اولیه کلاینت استفاده می‌کنند که خود ریسک‌را افزایش می‌دهد. بنابراین توصیه می‌شود از سطح رمزنگاری “High”برای رمزنگاری استفاده نمایید.

 

استفاده از احراز هویت TLS برای همه RDSH ها

تمامی سرورهای ایجاد کننده سشن RD باید توسط TLS برای RDS احرازهویت شوند، این کار برای جلوگیری از به سرقت رفتن هویت کاربران از راه دور  اجباری است. گواهینامه های SSL که برای تأیید اعتبار سرورهای RDSH استفاده می شوند باید توسط CA معتبر (مرجع صدور گواهینامه) یا PKI داخلی شما تایید و تحویل گردند.

اعمال AppLocker

شما باید RD Session Host خود را که میزبان جلسات و برنامه های منتشر شده است را قفل کنید. یک سیاست یا پالیسی قوی AppLocker باید برای همه سرورهای میزبان RD شما تعریف و اعمال شود. ابتدا باید برنامه های خود را بررسی کرده و تمام اطلاعات مورد نیاز مانند “Apps Thumbprint” را برای تعریف و استفاده از AppLocker  خود جمع آوری و ارسال کنید. در آخر توصیه می‌کنیم که یک لیست سفید از اپلیکیشن‌هایی که می‌توانند اجرا شوند ایجاد کنید.

 

ایجاد پسورد قوی برای همه استفاده کنندگان

ایجاد یک رمز قوی و یا یک سیاست رمز برای ایجاد آن توسط کاربران ریموت بسیار مهم و تاثیرگذار است. با استفاده از AD Group Policy Object ، می توانید سیاست گذرواژه خود را ایجاد ، پیکربندی و اعمال کنید (به عنوان مثال: RDS-USERS).

تغییر پورت پیش فرض RDP

به طور پیش فرض ، پروتکل RDP با پورت 3389 کار می‌کند. و این پورت توسط چندین نرم افزار مخرب/باج افزار هدف قرار می‌گیرد. هکرها نیز در مرحله Footprinting این پورت پیش فرض را هدف قرار می دهند پس توصیه ما تغییر این پورت به پورتی مانند 33381 می‌باشد. برای این تغییر می‌توانید از این اسکریپت استفاده کنید.

 

امن کردن دستگاه کاربران متصل به RDP

اگر خط مشی امنیتی شما محدود کردن کلیه تغییر مسیر منابع محلی (درایو محلی، چاپگرها، کلیپ بورد و… ) می‌باشد، باید تمام گزینه های تغییر مسیر منابع محلی را بر روی سرورهای RD Session Hosts خود (از طریق GPO) را انجام دهید و همین سیاست را نیز برای دستگاه‌های متصل از راه دور کاربران در پیش بگیرید. کلید رجیستری ذکر شده در بخش “ضمیمه” را می توان از طریق GPO پیکربندی کرد تا تمام تغییر مسیر منابع محلی RDC را غیرفعال کند> MSTSC.exe

 

محدود کردن تعداد کاربران

اگر لیست کاملی از همه کاربران ریموت دسکتاپ (داخلی و خارجی) را دارید، توصیه می شود حداکثر تعداد سشن‌های ریموت دسکتاپ مجاز را روی RD Gateway تنظیم کنید.

 

تمام لاگ‌های RDباید ذخیره و آنالیز گردند

تمام عملیات انجام شده در محیط RDS شما باید ثبت شوند: اتصالات ، اتصال مجدد ، تغییر/اصلاح ها تجزیه و تحلیل شوند تا ارتباطات مشکوک یا رفتارهای غیرعادی اگر وجود دارد کشف و رهگیری شود. در کمترین حالت حداقل باید سیاست WEF (Windows Event Forwarding) تعریف و پیکربندی شود.

 

تست نفوذ محیط RDS

پس از استقرار RDS، باید آزمایشات نفوذ را در محیط RDS خود انجام دهید، این HLV به شما امکان می دهد قبل از ادغام آن در محیط پروداکشن، سطح امنیتی بستر RDS خود را تأیید کنید. برای تأیید وضعیت امنیتی RDS باید چندین آزمایش زیر انجام شود:

  • امنیت تمام اجزای RDS شامل: RDG, RD Web Access
  • روند احراز هویت
  • حمله رمزگذاری
  • احراز هویت TLS
  • حمله MiMT
  • حمله D/DoS
  • انزوای شبکه
  • خط مشی محدودیت برنامه ها
  • مجموعه RDS Multi-tenancy

 

ضمیمه:  (محدود کردن تغییر مسیر منابع محلی(MSTSC.exe))

برای غیرفعال کردن تغییر مسیر کلیپ بورد، کلید رجیستری زیر باید در دستگاه های ریموت دسکتاپ/لپ تاپ های کاربر ایجاد شود:

Key Path : HKLM\SOFTWARE\Microsoft\Terminal Server Client
Registry Key Name : DisableClipboardRedirection
Key Type : REG_DWORD
Data Value : 1

 

برای غیرفعال کردن تغییر مسیر Local Drive، باید کلید رجیستری زیر در دستگاه های ریموت دسکتاپ/لپ تاپ های کاربر ایجاد شود:

 

Key Path : HKLM\SOFTWARE\Microsoft\Terminal Server Client
Registry Key Name : DisableDriveRedirection
Key Type : REG_DWORD
Data Value : 1

برای غیرفعال کردن تغییر مسیر پرینترها، اید کلید رجیستری زیر در دستگاه های ریموت دسکتاپ/لپ تاپ های کاربر ایجاد شود:

Key Path : HKLM\SOFTWARE\Microsoft\Terminal Server Client
Registry Key Name : DisablePrinterRedirection
Key Type : REG_DWORD
Data Value : 1

 

قفل کردن سرورهای RDSH

 

RDP 2

 

RDP 3

RDP 4