تصور کنید فقط با وارد کردن یک نام کاربری تقلبی در فرم لاگین، مهاجم بتواند به اطلاعات حساس کاربران، ایمیلها و حتی زیرساخت امنیتی یک سازمان دسترسی پیدا کند. عجیب است، اما دقیقاً همین سناریو در حملات تزریق LDAP رخ میدهد. در ادامه این مقاله، خواهیم دید که تزریق LDAP چگونه کار میکند، چه سناریوهایی دارد، چرا با تزریق SQL اشتباه گرفته میشود و از همه مهمتر: چطور میتوان جلوی آن را گرفت.
تزریق LDAP چیست؟
تزریق LDAP (Lightweight Directory Access Protocol) نوعی سوء استفاده امنیتی است که برای به خطر انداختن فرآیند احراز هویت مورد استفاده توسط برخی وب سایت ها استفاده می شود. وب سایت هایی که عبارات LDAP را از داده های کاربر می سازند در برابر این نوع حمله آسیب پذیر هستند.
سازمانها اغلب از LDAP برای فعال کردن ورود به سیستم و احراز هویت کاربران در داخل محل و برنامههای مبتنی بر وب استفاده میکنند. دایرکتوری های LDAP اشیایی را ذخیره می کنند که شامل اطلاعات مربوط به این کاربران و دارایی های سازمان است. به عنوان مثال، یک دایرکتوری LDAP ممکن است حاوی لیست هایی از نام های کاربری، رمز عبور و آدرس های ایمیل مختلف کاربران در سازمان باشد. اگر از دایرکتوری LDAP برای احراز هویت وب سایت استفاده شود، مهاجم می تواند کدهای مخرب را در قسمت ورودی کاربر وارد کند، به دایرکتوری دسترسی غیرمجاز پیدا کند و نام کاربری و رمز عبور را مشاهده یا تغییر دهد.
به گفته کارشناسان امنیتی، دلیل اصلی که حملات تزریق LDAP و اکسپلویت های مشابه کار می کنند، این است که اغلب در طول فرآیند توسعه برنامه امنیت کافی وجود ندارد. برای محافظت از یکپارچگی وبسایتهایی که از فرمها استفاده میکنند، کارشناسان توصیه میکنند که یک فرآیند پاکسازی برای کنترل انواع و تعداد کاراکترهایی که میتوانند توسط جعبههای ورودی پذیرفته شوند و همچنین استفاده از احراز هویت چند عاملی برای برنامههای کاربردی وب در معرض دید عموم، پیادهسازی شود.
تزریق LDAP چگونه کار می کند؟
یک حمله تزریق LDAP از حفرههای امنیتی ناشی از دادههای ورودی کاربر غیرقانونی سوء استفاده میکند. به عبارت دیگر، تزریقهای LDAP کوئری (Query) های نادرستی ایجاد میکنند تا دسترسی این را داشته باشند تا به طور بالقوه دادهها را در یک فهرست تغییر دهند. کوئری های LDAP شامل کاراکترهای خاصی مانند ستاره، براکت، علامت و نقل قول هستند. این کاراکترها معنای کوئری های LDAP را کنترل می کنند و نوع و تعداد اشیاء بازگردانده شده توسط یک کوئری را دیکته می کنند.
مهاجمان می توانند کوئری و رفتار مورد نظر آن را با تغییر این کاراکترهای کنترلی در کوئری تغییر دهند. به عنوان مثال، در یک جستجوی ورود که از LDAP استفاده می کند، یک مهاجم می تواند نام کاربری به اضافه چندین متاکاراکتر را وارد کند که پروتکل را دستکاری می کند تا فیلد رمز عبور را نادیده بگیرد.
با استفاده از تزریق LDAP، مهاجم میتواند برای دسترسی به اطلاعات غیرمجاز وارد دایرکتوری شود یا عبارات LDAP و محتوای داخل درخت LDAP را اصلاح کند. آنها همچنین می توانند از برنامه های کاربردی وب که بر اساس ورودی کاربر عبارات LDAP ایجاد می کنند، سوء استفاده کنند. ابزارهایی که از LDAP استفاده می کنند عبارتند از Red Hat Directory Server و Microsoft Active Directory.
چه نوع حملات تزریق LDAP وجود دارد؟
انواع مختلفی از حملات تزریق LDAP وجود دارد، از جمله موارد زیر :
در یک صفحه ورود به طور کلی دو فیلد کادر متنی برای نام کاربری و رمز عبور وجود دارد. LDAP معمولاً جفت نام کاربری و رمز عبور را با استفاده از فیلترهای LDAP تأیید می کند. برای دور زدن بخش اعتبارسنجی رمز عبور از فرآیند، مهاجم میتواند یک متاکاراکتر را وارد کند.
یک مهاجم از ورودی های کاربر غیرمجاز برای دسترسی غیرمجاز به اطلاعاتی که برای کاربران ممتاز سیستم محفوظ است، استفاده می کند.
مهاجم از این واقعیت استفاده می کند که برخی از اشیاء در سیستم LDAP توسط هر کاربری قابل جستجو هستند. مهاجم یک شی خاص را جستجو میکند و در شرایط عادی، فهرست همه نتایج در دسترس عموم را برمیگرداند. با درج کد مخرب، مهاجم می تواند این کوئری را دستکاری کند تا همه اشیاء از آن نوع، اعم از خصوصی و عمومی را بازگرداند.
تزریقهای LDAP کور روی باینری کار میکنند. آنها یک پاسخ درست یا نادرست را از سرور دریافت میکنند و مهاجم را قادر میسازد تا اطلاعاتی در مورد محتوای فهرست به دست آورد. این حملات آهستهتر اجرا میشوند، اما سادهتر هستند، زیرا فقط بر پاسخ درست یا نادرست متکی هستند.
مهاجمان می توانند بررسی کنند که آیا منبع خاصی وجود دارد یا در دسترس است - برای مثال یک شی کاربر یا یک چاپگر. یک هکر ماهر می تواند از این تکنیک برای بازگرداندن مقادیر پیچیده تر با استفاده از مکانیزمی به نام Booleanization استفاده کند. به عنوان مثال، یک هکر می تواند هر مقدار در یک رشته را به عنوان یک سوال درست یا نادرست جستجو کند، تا زمانی که کل رشته آشکار شود.
چگونه از حملات تزریق LDAP جلوگیری کنیم؟
از حملات تزریق LDAP می توان برای دسترسی به داده های حساس، تغییر داده های LDAP یا حتی کنترل سیستمی که از LDAP استفاده می کند استفاده کرد. بنابراین، انجام اقداماتی برای محافظت از سیستم در برابر این حملات مهم است. درست مانند هر حمله مبتنی بر تزریق، بهترین گزینه برای جلوگیری از حملات تزریق LDAP، پاکسازی ورودی نامعتبر و استفاده از اعتبارسنجی ورودی مناسب است. توسعه دهندگان برنامه باید تمام اطلاعات موجود در لایه برنامه را به درستی رمزگذاری و پاکسازی کنند. برخی از اقداماتی که این امکان را فراهم می کند شامل موارد زیر است :
- اعتبار سنجی ورودی (فهرست مجاز) : فهرست مجاز فقط شامل پذیرش ورودی است که خوب شناخته شده است. برای مثال، تنظیم طول یا محدوده عددی مورد انتظار برای یک فیلد ورودی مشخص.
- فرار از همه متغیرها : به رایانه میگوید که عملکردهای خاص متاکاراکترها را نادیده بگیرد که هکرها میتوانند از آنها برای دستکاری فیلدهای ورودی LDAP استفاده کنند. برخی از چارچوب های کوئری هنگام ساخت کوئری ها به طور خودکار فرار می کنند.
- فیلدهای نمایه سازی که حاوی اطلاعات حساس هستند : باعث افزایش تعداد فیلترهایی می شود که مهاجم باید برای دسترسی به اطلاعات حساس آن را دور بزند یا دستکاری کند.
- ابزارهای تحلیل کد منبع استاتیک : به توسعه دهندگان این امکان را می دهد که یک برنامه LDAP را قبل از اجرا اشکال زدایی کنند.
- چک کردن های پویا : به توسعه دهندگان این امکان را می دهد که برنامه را در حین اجرا آزمایش و اشکال زدایی کنند.
توسعه دهندگان همچنین می توانند امتیازات اختصاص داده شده به حساب های LDAP را به حداقل برسانند، بنابراین اگر آنها به خطر بیفتند، تأثیر حداقلی بر سیستم کلی خواهند داشت. مدیران همچنین باید سرورهای LDAP و مجوزهای کاربر را بهویژه برای برنامههای موبایل و وب به درستی پیکربندی کنند.
تفاوت بین تزریق SQL و تزریق LDAP چیست؟
شباهت های زیادی بین تزریق LDAP و تزریق SQL وجود دارد. هر دوی آنها حملات تزریق کد هستند، جایی که کاربر مخرب قطعه ای از کد خود را در جریان داده موجود وارد می کند تا سعی کند اقدامات امنیتی را دور بزند. تزریق کد را می توان بر روی انواع پروتکل های مختلف، از جمله زبان نشانه گذاری فرامتن (HTML)، زبان کوئری ساخت یافته (SQL) و LDAP انجام داد. همه این حملات تزریقی از سناریوهایی استفاده می کنند که در آن یک برنامه کاربردی به درستی ورودی کاربر را پاکسازی نمی کند.
تزریق LDAP تقریباً به روش تزریق SQL عمل می کند، نوعی سوء استفاده امنیتی که در آن مهاجم کد SQL را به فرم وب اضافه می کند. هر دو نوع حمله در درجه اول به دلیل اعتبار سنجی ورودی ناقص یا ضعیف اتفاق میافتند که ورودی نادرست را رد نمیکند یا نویسههای کنترل مخرب LDAP را قبل از گنجاندن ورودی نامعتبر کاربر در یک کوئری حذف نمیکند.
تفاوت بین تزریق LDAP و SQL در پروتکل یا زبانی است که آنها از آن بهره برداری می کنند و در نتیجه سینتکس (Sintax) داده های حمله. LDAP یک پروتکل برای دسترسی به اطلاعات در دایرکتوری ها است، در حالی که SQL یک زبان کوئری برای پایگاه های داده است. بنابراین، حملات، محل عای متفاوت ذخیره سازی اطلاعات مختلف را هدف قرار می دهند. تزریق LDAP دایرکتوری ها را هدف قرار می دهد، در حالی که تزریق SQL پایگاه های داده را هدف قرار می دهد. دایرکتوری های LDAP برای ذخیره داده هایی که عمدتا خوانده می شوند ولی نوشته نمی شوند، بهتر هستند. پایگاه دادههای SQL برای برخورد با دادههایی که مکررا خوانده و نوشته میشوند بهتر هستند.
جمع بندی:
در پایان، حملات تزریق LDAP یادآور این نکته حیاتیاند که امنیت نرمافزار تنها به قابلیتها و عملکرد آن محدود نمیشود، بلکه در گرو توجه دقیق به جزئیات فنی مانند اعتبارسنجی ورودیهاست. هرگونه سهلانگاری در این بخش میتواند به دسترسی غیرمجاز، افشای اطلاعات و اختلال در عملکرد سیستمهای حیاتی منجر شود. بهکارگیری اصول برنامهنویسی ایمن، محدودسازی دسترسیها و نظارت مداوم بر رفتار سیستم، گامهایی ضروری برای محافظت از سازمان در برابر این نوع تهدیدهاست.