تیمی از محققان دانشگاه کالیفرنیا، ریورساید، نوع جدیدی از حمله SAD DNS (CVE-2021-20322) را منتشر کردهاند که علیرغم محافظتهایی که در سال گذشته برای جلوگیری از آسیبپذیری CVE-2020-25705 اضافه شد، کار میکند. روش جدید به طور کلی مشابه آسیبپذیری سال گذشته است و تنها در استفاده از بستههای ICMP متفاوت برای بررسی پورتهای UDP فعال متفاوت است. حمله پیشنهادی امکان جایگزینی دادههای ساختگی را در حافظه پنهان سرور DNS میدهد، که میتواند برای جایگزینی آدرس IP یک دامنه دلخواه در حافظه پنهان و هدایت درخواستها به دامنه به سرور مهاجم استفاده شود.
روش پیشنهادی تنها در پشته شبکه لینوکس کار می کند زیرا به ویژگی های مکانیزم پردازش بسته ICMP در لینوکس متصل است، که به عنوان منبع نشت داده عمل می کند که تعیین شماره پورت UDP مورد استفاده توسط سرور برای ارسال یک را ساده می کند. درخواست خارجی تغییراتی که نشت اطلاعات را مسدود میکند در پایان ماه اوت در هسته لینوکس اعمال شد (اصلاح در بهروزرسانیهای هسته 5.15 و سپتامبر در شاخههای LTS هسته گنجانده شد). این اصلاح به جابجایی به استفاده از الگوریتم هش SipHash در کش های شبکه به جای جنکینز هش خلاصه می شود. وضعیت رفع آسیب پذیری در توزیع ها را می توان در این صفحات ارزیابی کرد: Debian، RHEL، Fedora، SUSE، Ubuntu.
به گفته محققانی که این مشکل را شناسایی کردهاند، حدود 38 درصد از حلکنندههای باز در شبکه، از جمله سرویسهای DNS محبوب مانند OpenDNS و Quad9 (9.9.9.9) آسیبپذیر هستند. در مورد نرم افزار سرور، حمله را می توان با استفاده از بسته هایی مانند BIND، Unbound و dnsmasq روی سرور لینوکس انجام داد. این مشکل در سرورهای DNS در حال اجرا بر روی سیستم های ویندوز و BSD ظاهر نمی شود. برای انجام موفقیت آمیز یک حمله، لازم است از جعل IP استفاده شود، یعنی. لازم است که ISP مهاجم بسته های دارای آدرس IP جعلی منبع را مسدود نکند.
به عنوان یادآوری، حمله SAD DNS از حفاظت های اضافه شده به سرورهای DNS برای جلوگیری از روش کلاسیک مسمومیت کش DNS که در سال 2008 توسط Dan Kaminsky پیشنهاد شده بود، دور می زند. روش Kaminsky اندازه کوچک فیلد ID پرس و جوی DNS را که فقط 16 بیت است دستکاری می کند. برای انتخاب شناسه تراکنش DNS صحیح لازم برای جعل نام هاست، کافی است تقریباً 7000 درخواست ارسال و حدود 140 هزار پاسخ ساختگی شبیه سازی شود. این حمله به ارسال تعداد زیادی بسته با اتصال IP ساختگی و با شناسه های تراکنش DNS مختلف به حل کننده DNS خلاصه می شود. برای جلوگیری از ذخیره اولین پاسخ، هر پاسخ ساختگی حاوی یک نام دامنه کمی تغییر یافته است (1.example.com، 2.example.com، 3.example.com، و غیره).
برای محافظت در برابر این نوع حمله، سازندگان سرور DNS توزیع تصادفی از تعداد پورت های شبکه منبع را که درخواست های رزولوشن از آنها ارسال می شود، پیاده سازی کردند که اندازه کافی بزرگ شناسه را جبران می کرد. پس از اجرای حفاظت برای ارسال پاسخ ساختگی، علاوه بر انتخاب شناسه 16 بیتی، انتخاب یکی از 64 هزار پورت ضروری شد که تعداد گزینه های انتخاب را به 2^32 افزایش داد.
روش SAD DNS به شما امکان می دهد تا تعیین شماره پورت شبکه را به طور اساسی ساده کنید و حمله را به روش کلاسیک Kaminsky کاهش دهید. مهاجم می تواند با بهره گیری از اطلاعات لو رفته در مورد فعالیت پورت های شبکه هنگام پردازش بسته های پاسخ ICMP، دسترسی به پورت های UDP استفاده نشده و فعال را شناسایی کند. این روش به ما امکان می دهد تعداد گزینه های جستجو را با 4 مرتبه قدر کاهش دهیم - 2^16+2^16 به جای 2^32 (131_072 به جای 4_294_967_296). نشت اطلاعاتی که به شما امکان میدهد به سرعت پورتهای UDP فعال را تعیین کنید، به دلیل نقص در کد پردازش بستههای ICMP با درخواستهای تکهتکه (پرچم ICMP Fragmentation Needed) یا تغییر مسیر (پرچم ICMP Redirect) ایجاد میشود. ارسال چنین بسته هایی وضعیت کش را در پشته شبکه تغییر می دهد که این امکان را فراهم می کند که بر اساس پاسخ سرور مشخص شود که کدام پورت UDP فعال است و کدام یک نیست.
سناریوی حمله: هنگامی که یک DNS Resolver سعی می کند یک نام دامنه را حل کند، یک کوئری UDP را به سرور DNS که دامنه را ارائه می کند ارسال می کند. در حالی که حلکننده منتظر پاسخ است، مهاجم میتواند به سرعت شماره پورت منبعی را که برای ارسال درخواست استفاده شده است، تعیین کند و یک پاسخ جعلی به آن ارسال کند، و جعل هویت سرور DNS در خدمت دامنه با استفاده از جعل آدرس IP. حلکننده DNS دادههای ارسالشده در پاسخ جعلی را کش میکند و برای مدتی آدرس IP جایگزین شده توسط مهاجم را برای سایر درخواستهای DNS برای نام دامنه برمیگرداند.
منبع: opennet.ru