در این مقاله تحلیلی باگدشت به بررسی تاریخچه‌ای از آسیب‌پذیری‌های DNS می‌پردازد. آسیب‌پذیری‌های DNS سامانه‌ها DNS و میلیون‌ها تجهیزات را در سرتاسر دنیا معرض خطر قرار داده‌اند. همچنین آسیب‌پذیری‌های DNS معمولاً بحرانی هستند. فرض کنید که وب‌سایت حساب بانکی خود را بخواهید مشاهده نمایید و DNS resolver آدرس وب‌سایت مهاجم را نشان می‌دهد.

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

۱. DNS چیست؟

DNS(domain name system) یک سیستم نامگذاری سلسله مراتبی و غیرمتمرکز برای سرویس‌ها و منابع دیگر متصل به شبکه اینترنت است. به عبارت ساده‌تر، پروتکل DNS هر اسم را تبدیل به یک ‌IP address می‌کند.

۲. سرور DNS چیست؟

سرور DNS که با name server شناخته می‌شود، تجهیزاتی است که سرویس DNS resolution را ارائه می‌دهند. کلاینت‌های DNS که بصورت پیش فرض بر روی کامپیوترهای رومیزی و سیستم‌های موبایل نصب هستند، از DNS سرور برای تبدیل نام‌ها به IP address استفاده می‌کنند.
در حالت کلی دو نوع نیم-سرور وجود دارد، نیم-سرور authoritative و نیم-سرور recursive. نیم-سرور authoritative مسئول دامین در آخرین زنجیره سرورهاست و زمانی که نیم-سرور authoritative نباشد، نیم-سرور recursive است. بعد از چند بار بازگشت به سرور authoritative در آن دامین مراجعه می‌کنند.
DNS resolver پایه‌ای‌ترین نود در سلسله مراتب DNS است. ایده فرایند کاری DNS زمانی شکل می‌گیرد که از DNS resolver در مورد دامین ناشناخته پرسیده می‌شود و به سرور DNS root برای جواب مراجعه می‌شود.

سرورهای Root در بالاترین نود از سلسله مراتب قرار دارند و آدرس این سرور‌ها در resolverها ثابت هستند. سرور root لیستی از سرورهای TLD DNS(Top-Level Domain) را جواب می‌دهد. سرورهای TLD DNS مسئول پسوندهای مرتبط با DNS مانند com و net هستند. سرورهای TLD به بخش بعدی آدرس‌ درخواست شده به ترتیب پاسخ می‌دهند، از پایین‌ترین زنجیره تا به سرور authoritative برسد.

۳. Cache

Cache بخش ذخیره اطلاعات است که به صورت سخت‌افزاری و نرم افزاری وجود دارد و درخواست‌های بعد از اولین درخواست برای انجام سریع‌تر فرایندها از سیستم ذخیره cache استفاده می‌شود. این ویژگی مهم سرورهای DNS است. سرورهای DNS با استفاده از ذخیره اطلاعات در Cache برای بازیابی IP address استفاده می‌کنند.

۴. DNS Cache poisoning چیست؟

حمله DNS Cache Poisoning به سرور آسیب پذیری‌های DNS ، نام وب‌سایت خارج از کنترل مهاجم را به IP address در اختیار مهاجم ارتباط می‌دهد. برای مثال، مهاجم داده سرور DNS را تغییر داده و آدرس www.example.com را به ۱۳.۳۷.۱۳.۳۷ تغییر می‌دهد. این IP address مهاجم است که به جای IP address اصلی جایگذاری شده است. بنابراین بعد از این تا زمانی که داده ذخیره شده در cache منقضی نشده است، کلاینت‌ها بعد از وارد شدن به www.example.com به IP address مهاجم وارد می‌شوند.

۵. جزییات حمله DNS cache poisoning

همانطور که گفته شد برای اکسپلویت آسیب‌پذیری‌های DNS ، مدت زمانی برای دریافت IP address یک دامین برای نود resolver نیاز است و در این زمان با چند سرور نیم-سرور ارتباط برقرار می‌کند تا سرور مورد تأیید را پیدا کند. مهاجم با استفاده از این زمان می‌تواند جواب اشتباه به درخواست کننده ارسال کند.

۱.۵ جعل DNS سرور

برای اجرای حمله موفق سناریو‌های زیر نیاز است تا مهاجم پکت جعلی را به نود resolver ارسال کند:

  • resolver پورت باز و در حال گوش دادن در اینترنت داشته باشد.
  • مهاجم کنترل نود در شبکه داخلی را در اختیار بگیرد.
  • کلاینت در شبکه داخلی با استفاده از مرورگر وب‌سایت تحت کنترل مهاجم را باز کند.

برای مثال، مهاجم به یکی از endpoint شبکه داخلی نفوذ کرده و به دنبال مسموم کردن local resolver’s cache آن نود است. مهاجم همین روش را می‌تواند در resolver یک ISP اجرا نماید که پیامد بیشتری دارد.
کلاینت وب‌سایت www.example.com را درخواست می‌نماید و داده آن از resolver cache پاک شده است. سپس باتوجه فرایند توضیح داده شده اقدام می‌کند و در زمان اجرای فرایند، مهاجم پکت IP address جعلی دامین را می‌فرستد که جواب DNS server را جعل می‌کند. این روش حمله ساده‌ترین حمله DNS cache poisoning است ولی راه‌هایی مانند ID تراکنش و source port randomization برای جلوگیری کردن از این روش حمله وجود دارد.
در بعضی از مواقع DNS از ID تراکنش یا transaction ID (TXID) برای اعتبار سنجی ریکوئست استفاده می‌کند. پس مهاجم باید پاسخ با ID تراکنش درست ایجاد کند درغیر اینصورت سرور DNS پکت‌ها را دراپ می‌کند.

زمانی که این تکنیک خلق شد‌، برای تطابق ریکوئست با پاسخ طراحی شده بود و نه برای اهداف امنیتی. قبل از کشف آسیب‌پذیری‌های DNS ، از افزایش index برای ID تراکنش استفاده می‌کرده است که به راحتی برای مهاجم قابل حدس زدن است.مهاجم دامین خود را خریداری کرده و تنظیمات سرور DNS تحت کنترل خود را انجام می‌دهد.

جزییات حمله DNS cache poisoning
جزییات حمله DNS cache poisoning

۲.۵ در اختیار گرفتن ID تراکنش

در مرحله بعدی، مهاجم از resolver شبکه محلی دامین خود را درخواست می‌کند. Resolver محلی ریکوئست را به سمت سلسله مراتب نردبانی DNS ارسال می‌کند و این فرایند تا جایی ادامه پیدا می‌کند که به سرور DNS مهاجم ارسال شود. در این مرحله، ریکوئست اصلی DNS (این ریکوئست را مهاجم از شبکه داخلی ارسال کرده است.) به سرور DNS مهاجم ارسال شده و بنابراین، ID تراکنش به مهاجم نشان داده می‌شود.
استفاده از حمله ID تراکنش که در پارگراف قبل توضیح داده شد، ایده جالبی برای پاسخ جعلی مورد قبول ID تراکنش است. در این حالت مهاجم چندین پاسخ جعلی با چندین ID تراکنش ارسال می‌کند و ID تراکنش اصلی را از بین ریکوئست‌های ارسال شده پیدا می‌کند.

سپس تنها مرحله‌ای که باقی‌مانده که مهاجم باید انجام دهد، ریکوئست DNS برای یک دامین است که در داده cache نود Resolverنیست و با پاسخ جعلی با ID تراکنش به دامین درخواست کننده، پاسخ دهد.
Resolver محلی پاسخ درست را با ID تراکنش صحیح قبول می‌کند سپس پکت‌های دیگر را دراپ می‌کند و آدرس را در cache ذخیره می‌کند. از این مرحله به بعد در هر زمان، ریکوئست کلاینت به دامین مهاجم ارسال می‌شود.

۶. محدودیت جدید

واضح‌ترین ایجاد محدودیت قابل اجرا استفاده از ID تراکنش تصادفی(به جای استفاده از افزایش index) است. استفاده از این روش محدودیت کار مهاجم را افزایش می‌دهد. سؤالی که بوجود می‌آید این است که چه مقدار کار مهاجم را سخت‌تر می‌شود؟برای مثال، استفاده از MAX_SIZE_OF_QUERY_ID، اجرای حمله موفق را سخت می‌کند.

ID تراکنش به اندازه ۱۶ بیتی تعداد دفعاتی که مهاجم باید بررسی کند تا بتواند پکت جعلی ایجاد کند برابر ۶۵۵۳۶ است. این روش، روش خوبی است ولی صد در صد مورد اطمینان نیست.

۷. حملات پیشرفته

ایجاد محدودیت توضیح داده شده تا حدودی مهاجم را برای اکسپلویت آسیب‌پذیری‌های DNS محدود می‌کند اما پیشرفت اینترنت این محدودیت را بی‌اثر کرده است. استفاده از کلید ۱۶ بیتی بزرگ است ولی نه به اندازه کافی. در زیر این مورد محاسبه شده است:

  • اندازه پاسخ رایج DNS:
    ۱۰۰ bytes = 800 bits
  • پهنای باند مهاجم:
    ۱ Megabites per second = 1,000,000 bits
  • مدت زمان لازم برای ارسال پاسخ به resolver برابر با ۲ ثانیه است.

نکته: این فرایند در اینترنت امروزی، به دلیل پهنای باند زیاد و تأخیر کم بسیار سریع‌تر اتفاق می‌افتد حتی اگر این فرایند ذخیره یا cache نشده باشد.
۶۵۵۳۶ حالت برای ID تراکنش وجود دارد و مهاجم دو ثانیه فرصت دارد که ریکوئست و پاسخ درست را پیدا کند. به عبارت دیگر برای اینکه حمله موفق به ازای هر حمله را محاسبه کنیم، باید تعداد پکت‌های پاسخ که مهاجم می‌تواند ارسال کند قبل از اینکه پاسخ درست از سمت resolver ارسال شود، محاسبه شود. محاسبه این زمان برابر است با تقسیم پهنای باند به اندازه پکت‌ها ضرب در زمان.
با پهنای باند ۱Mbit/s مهاجم ۱,۰۰۰,۰۰۰/۸۰۰ = ۱,۲۵۰ پکت در یک ثانیه می‌تواند ارسال کند و در دوثانیه این عدد به ۲۵۰۰ پکت ارسال شده می‌رسد. در این حالت احتمال حمله موفق ۵۰ درصد است و با پهنای باند ۱Mbit/s، مهاجم باید ۱۸ بار این حمله را تکرار کند.

۸. ایجاد محدودیت‌های بیشتر

همانطور که مشاهده می‌شود این محدودیت منطقی و کافی نیست و در این مرحله محدودیتی بر اساس تصادفی پورت‌های تصادفی استفاده می‌شود. پیش از این سناریو، پورت ارسال کننده درخواست در resolver یا هر نیم-سرور ثابت بود. عدد پورت درخواست کننده ۱۶ بیت است و به عنوان مثال پورت resolver عدد ۱۰۶۵۰ انتخاب شده است که برای تمامی درخواست‌ها یکسان است. ترکیب ID تراکنش و شماره پورت عددی ۳۲ بیتی را برای DNS ایجاد می‌کند به به عنوان کلید عمل کرده و امکان اجرای حمله موفق اکسپلویت آسیب‌پذیری‌های DNS توسط مهاجم را پیچیده‌تر می‌نماید.

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

منابع: