آموزش کشف ساختار دایرکتوری با LDAP Enumeration
سلام، قراره توی این مقاله به Enumeration پروتکل LDAP بپردازم و یکسری تکنیکها، ابزارها و سناریوهای واقعی رو با هم بررسی کنیم — — — — — — — — — — — — — — — — — — — —
پروتکل LDAP چیه و چگونه کار میکنه؟
LDAP (Lightweight Directory Access Protocol)
پروتکلی برای دسترسی و مدیریت اطلاعات دایرکتوری سرویس هستش که معمولاً روی
port 389 TCP (یا 636 برای LDAPS )
کار میکنه و برای احراز هویت و اعمال پالیسیها در سیستمهای سازمانی استفاده میشه.
برای مثال؛ دایرکتوری سرویسها مثل Microsoft Active Directory یا در لینوکس OpenLDAP هستن که از LDAP برای ذخیره و بازیابی اطلاعات (یوزرها، گروهها، کامپیوترها، پالیسیها و ...) استفاده میکنن.
وقتی کاربری میخواد به دایرکتوری دسترسی داشته باشه، یک جلسه (DSA session) باز میشه و کوئریهای LDAP فرستاده میشه تا اطلاعات لازم خوانده یا تغییر کنه.
حالا ما بهعنوان یه کاربر نرمال (جوین دامین) چه اطلاعاتی میتونیم از Domain Controller استخراج کنیم؟
سوال: ما بهعنوان یه کاربر معمولی که جوین دامین هستیم و دسترسی نصب/اجرا با دسترسی بالا یا تغییر تنظیمات رو نداریم، چه اطلاعاتی میتونیم از دومین کنترلر بدست بیاریم؟
آیا میشه فهمید چه یوزرها و گروهها هستن، چه زمانی لاگین کردن، چند بار پسورد اشتباه زدن، کی پسوردشون عوض شده و خیلی اطلاعات دیگه رو از طریق LDAP از دومین کنترلر استخراج کرد؟
پاسخ: بله — میشه.
دلیلش اینه که بسیاری از این عملیات (خواندن اطلاعات دایرکتوری) با یک لاگین ساده و کوئریهای معمولی قابل انجامه و از دید سرور رفتاری «نرمال» محسوب میشه پس بهراحتی میشه اطلاعات زیادی استخراج کرد.
ابزارها
ابزارهایی مانند:
ldapsearch -- LDAP Explorer -- JXplorer
AD Explorer
(ابزاری از مجموع Sysinternals ، پورتیبل نیاز به نصب نداره)
این ابزارها با وارد کردن IP DC و یوزر/پسورد نرمال جوینشده، کوئری LDAP میزنن و اطلاعات زیادی از DC استخراج میکنه.
(«نمونه تصویر که گزاشتم»)
اگر exe و msi بسته باشه چطور؟
حتی اگه در سازمان اجرای فایلهای exe و نصب از msi محدود شده باشه باز هم میشه از طریق CMD و PowerShell همین فرایندها رو انجام داد. فریمورکهایی مثل Nishang و BloodHound از طریق کامندهای پاورشل استخراج اطلاعات از LDAP و AD رو ساده میکنن.
در نتیجه: بستن اجرای EXE/MSI بهتنهایی کافی نیست.اتکر میتونه از ابزارهای خط فرمان یا اسکریپتها استفاده کنه.
راهکار برای جلوگیری و شناسایی این حمله
جلوگیری از LDAP Enumeration کمی سخته چون فرایندی که صورت میگیره اغلب کاملاً نرماله — یعنی یک لاگین موفق ساده اتفاق میفته و رفتار کلاینتها هم مشابه اینه. حتی با اپلیکیشن وایتلیستینگ هم ابزارها قابل بایپس شدن هستن. بستن exe و msi هم مشکلزاست چون نرمافزاها از کار میفتن؛ و در نهایت اتکر میتونه از طریق cmd و PowerShell عمل کنه.
با این حال میتونیم با ترکیب چند راهکار، کار اتکر رو سختتر کنیم
بهترین راهکار :
امن سازی LDAP و دسترسیها
از LDAPS یا StartTLS استفاده کنین (رمزگذاری ارتباط)
فرابند Anonymous binds رو غیرفعال کنید و
حداقل دسترسی (least privilege) رو رعایت کنین حسابهایی که فقط باید خواندن محدودی داشته باشن رو محدود کنین
از گروهها و ACLهای مناسب برای دایرکتوری استفاده کنین تا اطلاعات غیرضروری در دسترس همه نباشه
پالیسیها و احراز هویت قویتر
استفاده از گذرواژههای قویMFA برای حسابهای حساس و کنترل گذرواژههای سرویسها
مانیتورینگ و لاگگیری های که باید انجام بدیم Endpoints + DC
لاگهای PowerShell و Process Creation روی اندپوینتها رو فعال کنین
(CommandLine در Sysmon/EDR)
لاگهای لاگین روی DC و لاگهای کوئری LDAP (در صورت امکان) رو جمعآوری کنین
روی اندپوینتها هم لاگگیری انجام بدین چون اجرای ابزار یا اسکریپتها اونجا ثبت میشه سمت dc ما کامندی نمیبینیم همینجا تحلیل CommandLine میتونه ما رو به استخراج LDAP کمک کنه
https://t.me/ViperNull