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

این توابع برای هدف رمزنگاری درست نشده‌اند و متأسفانه استفاده اشتباه از توابع تصادفی در اجرای DNS مرتبا انجام می‌شود. این روش توسعه آسیب‌پذیری‌های پیشرفته DNS را بوجود آورده است.

استفاده از توابع تصادفی در DNS :

دو سال پیش، توابع تصادفی در ایجاد ID تراکنش در CoreDNS مورد استفاده قرار گرفت. توسعه دهنده‌ها از تابع math.rand برای توسعه ID تراکنش استفاده کردند. تابع rand یک تابع برای تولید اعداد به روش pseudorandom در Golang است. استفاده از این تابع برای اهداف امنیتی یک اشتباه بزرگ است. اگر مهاجم بتواند ID تراکنش را حدس بزند، می‌تواند حمله poison CoreDNS’s cache که در مقاله قبلی توضیح داده شد را اجرایی کند. این موضوع به این معنی است که اگر هر DNS resolver که از CoreDNS استفاده می‌کند، به آلوده شدن رکوردهای DNS آسیب‌پذیر است. به‌عبارت دیگر، به دلیل اینکه CoreDNS برای کوبرنتیز(Kubernetes) استفاده می‌شود، هر اپلیکیشنی در هر نود در هر خوشه‌ای به این حمله آسیب‌پذیر است.

برای مثال، در جدیدترین روش که برای اکسپلویت آسیب‌پذیری پیشرفته DNS پیدا شده است از Internet Control Message Protocol (ICMP) استفاده می‌کند که برای نمایش پورت‌های باز و بسته سرور استفاده می‌شود. بنابراین، این روش پور‌ت‌های باز را افشا می‌کند. استفاده از این روش کار مهاجم را برای تعداد حدس پورت‌های باز کم می‌کند و درنتیجه ایجاد محدودیت مانند محدودیت تصادفی که در مقاله قبلی توضیح داده شد را بی‌اثر می‌کند.

حملات به DNS :

همچنین آسیب‌پذیری‌هایی پیشرفته DNS غیر از سیستم cache مانند سرریز بافر وجود دارد. Dnsmasq یک DNS resolver رایج است که در توزیع‌های متفاوت لینوکس‌ها و روترها استفاده می‌شود و همچنین در جدیدترین توزیع کوبرنتیز استفاده شده است. در سال‌های اخیر آسیب‌پذیری‌ها DNS و نقص حافظه در Dnsmasq پیدا شده است که منجر به حملات DoS و RCE می‌شود.

حملات توضیح داده شده در این مقاله و مقاله قبلی بر روی آسیب‌پذیری‌های DNS اگر موفقیت آمیز باشند سیستم‌های هدف را با اشکالات جدی روبرو می‌کنند. با کمک ایجاد محدودیت‌های جدید احتمال اینکه مهاجم بتواند حمله DNS poisoning را اجرایی کند بسیار کم است، مگر اینکه آسیب‌پذیری‌های پیشرفته DNS با آسیب‌پذیری در resolver نرم‌افزار ترکیب شود ولی متأسفانه این اتفاق مرتبا انجام می‌شود.

در طی سال‌ها، محققان تکنیک‌های جدیدی برای پوشش این مشکل پیدا کرده‌اند که برای مثال می‌توان از فرگمنت UDP نام برد و در این مقاله با جزئیات کامل گفته خواهد شد.

باوجود استفاده از مرورگر‌های امن و گواهینامه‌ها، مهاجم توانایی مسموم کردن سرور DNS برای یک دامین را دارد. ولی به احتمال زیاد مرورگر قربانی توانایی بارگذاری صفحاتی که دارای گواهینامه‌ها منطبق با سرور را ندارد نیست. اما همچنان از این تکنیک برای اجرای حملات گسترده DoS با روش مسموم کردن DNS resolverدر سطح ISP انجام می‌شود. تغییر مقصد ریکوئست‌های سیستم قربانی به IP addressهای خالی صورت می‌گیرد.

حمله فرگمنت IP :

حمله IP فرگمنت (IP fragmentation) روش رایج حمله DoS است. در این حمله مهاجم با استفاده از جداسازی مکانیزم دیتاگرام، اکسپلویت آسیب‌پذیری را اجرا می‌کند. شناختن اجرای این حمله نیازمند دانستن فرایند فرگمنت IP است. در این فرایند دیتاگرام(datagram) IP به پکت‌های کوچکتر تقسیم می‌شوند و بعد از منتقل شدن به شکل اولیه اطلاعات برمی‌گردند.

برای انتقال اطلاعات، فرایند جداسازی اطلاعات اجباری است. در هر شبکه اندازه دیتاگرام محدود است و این محدودیت طول را MTU(Maximum transmission unit ) می‌نامند. اگر دیتاگرام بزرگ‌تر از ظرفیت شبکه باشد، دیتاگرام باید به اندازه‌های کوچکتر متناسب با اندازه‌ای که شبکه می‌تواند پردازش کند تقسیم شوند. سپس برای ارسال اطلاعات اقدام شود.

مثال فرگمنت و بازسازی دیتاگرام IP
مثال فرگمنت و بازسازی دیتاگرام IP

هدر IP در هر دیتاگرام شامل فلگ‌هایی است و این فلگ‌ها اجازه جداسازی را می‌دهند. برای مثال، اگر در هدر مقدار فلگ برابر don’t fragment باشد، سرور در دیتاگرام ICMP پیام datagram is too big to transmit را برمی‌گرداند. همچنین در تجهیرات گیرنده،‌ اطلاعات را به همان شکل جدا شده بازسازی می‌کند.

حملات فرگمنت UDP و ICMP :

در روش این حمله پکت‌های جعلی UDP و ICMP بزرگ‌تر از MTU شبکه است(معمولا اندازهMTU برابر ۱۵۰۰ bytes است). چون این پکت‌ها جعلی هستند، بازسازی این پکت‌ها غیرممکن است و منابع سرور سریعاً مصرف می‌شود. درنتیجه سرور از دسترس خارج می‌شود.

حمله فرگمنت TCP(مرسوم به Teardrop) :

این حملات مکانیسم بازسازی TCP/IP را مورد حمله قرار می‌دهد و به پکت‌های اطلاعات اجازه به هم چسبیدن را نمی‌دهند. در نتیجه هم‌پوشانی پکت‌های اطلاعات، سرور قربانی را زیر بار زیادی قرار می‌دهد که منجر به از کار افتادن سرور می‌شود. حمله Teardrop موفق نتیجه وجود سیستم عامل آسیب‌پذیر است که در نسخه‌های قدیمی ویندوز رایج بوده است. ویندوزهای ۳.۱، ۹۵ و NT به این حمله آسیب‌پذیر بودند که با انتشار به‌روز رسانی جلوی این حملات گرفته شد. ولی این اسیب‌پذیری در ویندوز ۷ و ویستا دوباره ظاهر شد. در ادامه با انتشار به‌روز رسانی در آخرین نسخه ویندوز جلوی این آسیب‌پذیری گرفته شد. اما اپراتورها باید مراقب این آسیب‌پذیری باشند و از به‌روز رسانی امنیتی این آسیب‌پذیری اطمینان حاصل پیدا کنند.

روش‌های محدودسازی آسیب‌پذیری :

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

برای خواندن مقالات دیگر و آموزش باگ بانتی به وبلاگ باگدشت مراجعه کنید.

منابع:

  1. Paloaltonetworks
  2. Imperva