اخبار داخلی آرمان داده پویان

مقالات

حمله تزریق LDAP

حمله تزریق LDAP

شرکت آرمان داده پویان ارائه دهنده انواع خدمات امنیتی از جمله تست نفوذ، مشاوره امنیت اطلاعات، سنجش آسیب‌ پذیری برنامه‌های همراه و مهندسی نرم افزار در قسمت مقالات آموزشی هر هفته به معرفی یکی از انواع حملات امنیتی می‌پردازد. در دو قسمت منتشر شده قبلی به معرفی حمله تزریق دستورات سیستم عامل پرداختیم. در این قسمت حمله تزریق LDAP را معرفی خواهیم کرد. در ادامه به صورت هفتگی انواع حملات تزریق اعم از تزریق SQL و Xpath از جمله موضوعاتی هستند که در هفته‌های آتی در بخش مقالات آموزشی آرمان داده پویان قرار خواهند گرفت.

تزریق LDAP چیست

ابتدا توضیحی مختصر در ارتباط با LDAP می‌دهیم. LDAP که مخفف Lightweight Directory Access Protocol می‌باشد در واقع مجموعه‌ای از روش‌ها  برای استفاده از اطلاعاتی که در درخت دایرکتوری اطلاعات یا همان DIT وجود دارد، می‌باشد.

حمله تزری LDAP یکی از روش‌های موثر برای بهره‌برداری از برنامه‌های کاربردی می‌باشد. اگر برنامه کاربردی ورودی‌های کاربر را به درستی ارزیابی نکند، کاربر قادر خواهد بود با استفاده از این ورودی‌ها دستورات LDAP مورد نظرش را بسازد. پس از همینجا می‌توان به اهمیت تست نفوذ برنامه‌های کاربردی پی برد. حال اگر بخواهیم توضیح دقیق‌تری بدهیم اگر مهاجم بتواند متا کاراکترهای LDAP را به query تزریق کند قدرت این را خواهد داشت که با منطق برنامه کاربردی در راستای پیشبرد مقاصدش بازی نماید. زمانی که برنامه کاربردی ارزیابی درستی از ورودی‌های کاربر ندارد مهاجم قادر به تغییر عبارات LDAP خواهد بود، در نتیجه آن می‌تواند کارهای متعددی از جمله دسترسی به داده‌های حساسی که به عنوان کاربر مجوز دسترسی به آن‌ها را ندارد، تغییر منطق برنامه کاربردی به سمت انجام کارهای مورد نظرش، افزایش مجوز دسترسی جهت اجرای کوئری و تغییر محتوی درخت LDAP را انجام دهد. پس تا به اینجای کار دیدید در صورت موفقیت آمیز بودن این حمله، مهاجم قادر به اجرای  عملیات متعددی خواهد بود.

در ارتباط با یافتن آسیب پذیری‌هایی که منجر به حملات موفق LDAP بر ضد یک برنامه کاربردی می‌شوند بایستی بگوییم تنها تکیه بر سنجش‌های خودکار کافی نیست. کارشناسان امنیت portswigger معتقد هستند نتایج این سنجش‌ها به تنهایی قابل اتکا نیستند و به طور مثال نتایجی حاصل از یک پویشگر آسیب‌پذیری بایستی به صورت خودکار و توسط یک متخصص تست نفوذ برنامه کاربردی مرور شده و این متخصص بعد از بررسی دقیق نتایج اعلام نماید که آیا در برنامه کاربردی مورد نظر آسیب پذیری‌ای که منجر به اجرای موفق حملات LDAP می‌شود وجود دارد و یا خیر.

روش‌های پیشگیری و بهبود

اولین توصیه این است که اگر امکان دارد از کپی کردن داده‌هایی که کاربر وارد می‌نماید و کنترل آن‌ها توسط کاربر صورت می‌پذیرد در کوئر‌های LDAP خودداری نمایید. اگر این کار امکان پذیر نیست، آرمان داده پویان اکیدا توصیه می‌نماید تا ورودی‌های کاربر به صورت بسیار دقیق و سختگیرانه‌ای توسط برنامه کاربردی ارزیابی گردد. در بسیاری از وضعیت‌ها، اگر به کاربر اجازه وارد کردن رشته‌های کوتاه الفبایی و عددی بر روی کوئری‌ها داده شود و مابقی ورودی‌هایش توسط برنامه کاربردی پذیرفته نشود از حملات تزریق LDAP جلوگیری خواهد شد. همچنین ورودی‌هایی که شامل متاکاراکترهای LDAP هستند مانند ( ) ; , * | & = نیز بایستی مسدود گردند، همچنین فضای سفید خالی (whitespace) نیز در دسته این ورودی‌ها قرار دارد.

دسته‌بندی آسیب‌ پذیری‌ها

CWE-90: خنثی‌سازی نامناسب یا استفاده از المان‌های خاص در کوئری LDAP

CVE-116: انکدینگ نامناسب یا در رفتن از خروجی (Escaping Outpu)

یک مثال برای آسیب پذیری اول برایتان میزنیم. به تکه کد زیر دقت فرمایید:

;(context = new InitialDirContext(env
;String searchFilter = “StreetAddress=” + address
;(NamingEnumeration answer = context.search(searchBase, searchFilter, searchCtls

به دلیل اینکه این تکه کد در خنثی سازی (neutralize) کردن رشته آدرس برای ساختن کوئری شکست می‌خورد، مهاجم می‌تواند با دادن آدرسی که شامل کوئری‌های مورد نظرش است یک حمله LDAP موفق به راه بیندازد.

در ادامه برای دسته دوم نیز مثالی برایتان می‌زنیم. یک برنامه کاربردی که برای گفت و گو کردن یا همان به اصطلاح چت کردن است را در نظر بگیرید. در این برنامه کاربردی یک سرور front-end با یک سرور back-end در ارتباط است. در سرور back-end عملیات احراز هویت و بررسی مجوز انجام نمی‌گیرد و تنها این عملیات در سرور front-end انجام می‌شود. پروتکل پیغام رسانی از دو دستور پشتیبانی می‌نماید یکی SAY و دیگری BAN. البته فقط مدیرها (administrators) می‌توانند از دستورات BAN استفاده کنند. هر آرگیومنت بایستی با یک فضای خالی از هم جدا شوند. ورودی خام یک URL است که encode شده است. اگر مهاجم از کاراکتر “|” استفاده کند می‌تواند چندین دستور را پشت سر هم بیاورد. به تکه کد زیر نگاهی بیندازید:

$inputString = readLineFromFileHandle($serverFH);

# generate an array of strings separated by the “|” character.
@commands = split(/\|/, $inputString);

foreach $cmd (@commands) {

# separate the operator from its arguments based on a single whitespace
($operator, $args) = split(/ /, $cmd, 2);

$args = UrlDecode($args);
if ($operator eq “BAN”) {

ExecuteBan($args);

}
elsif ($operator eq “SAY”) {

ExecuteSay($args);

}

سرور front-end یک دستور را دریافت می‌نماید، آن را encode کرده و برای سرور ارسال می‌نماید. سپس بررسی مجوز را انجام داده و دستور را به سرور ارسال می‌کند.

$inputString = GetUntrustedArgument(“command”);
($cmd, $argstr) = split(/\s+/, $inputString, 2);

# removes extra whitespace and also changes CRLF’s to spaces
$argstr =~ s/\s+/ /gs;

$argstr = UrlEncode($argstr);
if (($cmd eq “BAN”) && (! IsAdministrator($username))) {

die “Error: you are not the admin.\n”;

}

# communicate with file server using a file handle
$fh = GetServerFileHandle(“myserver”);

print $fh “$cmd $argstr\n”;

خب حالا بیاید این موضوع را دقیق‌تر بررسی نماییم. در حالی که پروتکل و سرور back-end اجازه ارسال چندین دستور را داخل یک درخواست می‌دهد، سرور front-end تنها اجازه ارسال یک دستور را می‌دهد. اما آیا این کافی است؟ به تکه کد پایین دقت فرمایید:

SAY hello world|BAN user12

سرور front end این دستور را به صورت “SAY” می‌بیند و سپس $argstr به صورت “hello world | BAN user12” به نظر می‌رسد. از آنجایی که این دستور “SAY” است، بررسی دستور “BAN” شکست خورده و front-end دستور URL-encoded را به سرور back-end ارسال می‌نماید:

SAY hello%20world|BAN%20user12

در هر صورت back end مانند دو دستور مجزا با آن برخورد می‌کند.

SAY hello world
BAN user12

سخن آخر

در این مطلب پروتکل LDAP را به شما معرفی کردیم، بعد از آن حمله تزریق LDAP و با دو مثال طریقه سواستفاده از آسیب‌پذیری های برنامه‌های کاربردی در راستای راه اندازی موفق حمله LDAP را نشان دادیم. توجه داشته باشید در صورتی که یک مهاجم بتواند حمله موفق LDAP به راه بیندازد کارهای متعددی می‌تواند انجام بدهد، همانطور که در ابتدای مطلب نیز توضیح دادیم می‌تواند به اطلاعات حساس دست یافته یا منطق برنامه کاربردی را تغییر دهد. تنها استفاده از پویشگرآسیب‌پذیری برای تشخیص این نوع از آسیب پذیری کافی نبوده و برای تشخیص درست آن نیاز به متخصصان امنیت در این حوزه وجود دارد. آرمان داده پویان در راستای تست نفوذ برنامه‌های کاربردی می‌تواند خدمات ارزشمندی به شما ارائه نماید.

آرمان داده پویان ارائه دهنده تست نفوذ برنامه‌های کاربردی

برای مشاوره و کسب اطلاعات بیشتر با ما تماس بگیرید

تعداد بازدید: 320


تازه ترین ها