آشنایی با حملات LDAP Injection


5/5 - (1 امتیاز)

معرفی حملات LDAP Injection:

LDAP Injection یک حمله است که جهت Exploit برنامه های مبتنی بر وب استفاده می شود که عبارات LDAP را بر اساس ورودی کاربر می سازند. هنگامی که یک برنامه نتواند ورودی کاربر را به درستی اعتبار سنجی کند، امکان تغییر عبارات LDAP با استفاده از یک Local Proxy وجود دارد که می تواند منجر به اجرای دستورات دلخواه مانند افزایش مجوز دسترسی به Quary های غیرمجاز و تغییر محتوا در LDAP Tree شود. گفتنی است که همان تکنیک های Exploit موجود در حملات SQL Injection را می توان به طور مشابه در حملات LDAP Injection اعمال کرد.

حملات LDAP Injection به دو دلیل رخ میدهد:

  1. نبودن Interface های LDAP Quary ایمن و پارامتری شده.
  2. استفاده گسترده از LDAP برای احراز هویت کاربران در سیستم ها.

به طور کلی دو نوع دفاع در مقابل حملات LDAP Injection وجود دارد

  • با استفاده از تابع رمزگذاری LDAP مناسب از همه متغیر ها Escape کنید (Primary Defense)
  • از یک Framework (مانند LINQtoLDAP که به طور خودکار Escape می کند) استفاده کنید (Additional Defense)

Primary Defense:

Distinguished Name Escaping:

روش اصلی ذخیره اسامی LDAP بر اساس DN (Distinguished Name) است که شما می توانید به آن مانند یک Unique Identifier فکر کنید که گاهی اوقات برای دسترسی به Resource ها مانند Username استفاده می شوند.

یک DN معمولا به صورت یکی از موارد زیر است:

cn=Richard Feynman, ou=Physics Department, dc=Caltech, dc=edu

uid=inewton, ou=Mathematics Department, dc=Cambridge, dc=com

کاراکترهای خاصی وجود دارند که در یک DN کاراکتر های ویژه در نظر گرفته می شوند.

برخی از کاراکترهای «ویژه» که در DN ها مجاز هستند و نیازی به Escape ندارند عبارتند از:

* ( ) . & – _ [ ] ` ~ | @ $ % ^ ? : { } ! ‘

Search Filter Escaping:

هر DN دقیقاً به 1 ورودی اشاره می کند که می توان آن را مانند یک ردیف در یک RDBMS در نظر گرفت. برای هر ورودی، 1 یا چند ویژگی مشابه ستون های RDBMS وجود خواهد داشت. اگر شما علاقه مند به جستجو از طریق LDAP برای کاربرانی که ویژگی های خاصی دارند هستید، می توانید این کار را با فیلترهای جستجو انجام دهید.

در یک فیلتر جستجو، می‌ توانید از منطق Boolean استاندارد برای دریافت لیستی از کاربرانی که با یک محدودیت دلخواه مطابقت دارند، استفاده کنید.

(&(ou=Physics)(|
(manager=cn=Freeman Dyson,ou=Physics,dc=Caltech,dc=edu)
(manager=cn=Albert Einstein,ou=Physics,dc=Princeton,dc=edu)
))

هنگام ساخت Quary های LDAP در کد برنامه، باید از هرگونه داده غیرقابل اعتمادی که به هر LDAP Quary اضافه می شود Escape کنید.

دو شکل Escape از LDAP وجود دارد:

  1. رمزگذاری برای جستجوی LDAP
  2. رمزگذاری برای LDAP DN

Escape مناسب بستگی به این دارد که آیا ورودی فیلتر جستجو را اعتبار سنجی می‌ کنید یا از یک DN به عنوان Credential مانند نام کاربری برای دسترسی به برخی Resource ها استفاده می‌ کنید.

برخی از کاراکترهای «ویژه» که در فیلترهای جستجو مجاز هستند و باید از آنها حذف شوند عبارتند از:

* ( ) \ NUL

برای اطلاعات بیشتر در مورد Search Filter Escaping به RFC4515 مراجعه کنید.

Additional Defense:

جالب است بدانید OWASP توضیه کرده است که تمام این دفاع‌ های اضافی را به منظور ارائه دفاع عمیق اتخاذ کنید. این دفاع های اضافی عبارتند از:

  • Least Privilege
  • Allow-List Input Validation

Least Privilege:

باید امتیازات اختصاص داده شده به LDAP Binding Account در محیط خود را به حداقل برسانید.

Enabling Bind Authentication:

اگر پروتکل LDAP با احراز هویت Bind پیکربندی شده باشد، مهاجمان نمی توانند حملات تزریق LDAP را انجام دهند زیرا تأیید و بررسی های مجوزی که در برابر اعتبارنامه های معتبر ارسال شده توسط کاربر انجام می شود. یک مهاجم همچنان می‌ تواند از طریق یک اتصال ناشناس Bind Authentication را Bypass کند.

Allow-List Input Validation:

اعتبار سنجی ورودی می تواند برای شناسایی ورودی های غیرمجاز قبل از ارسال به LDAP Quary استفاده شود.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.