نشریه انجمن علمی دانشکده مهندسی کامپیوتر دانشگاه علم و صنعت ایران
در جستوجوی IP های گمشده
همه چیز در مورد پدیدهای به اسم دیاناس ربایی (DNS Hijacking)
محمد اصولیان (ورودی ۹۹)
کامپیوترتون رو روشن کنید. بدون استفاده از VPN، سایت youtube.com رو پینگ(ping) کنید. اگر IP ای که به شما نمایش داده میشه با 10 شروع شده باید بهتون بگم که این IP متعلق به یوتیوب نیست. چنین IP ای اصلا در اینترنت وجود نداره و شما دچار دیاناس ربایی(DNS Hijacking) شدید.
توی این یادداشت بهتون توضیح میدم که چطور میتونید این مشکل رو حل کنید اما قبلش بهتره از ریشه یه نگاهی بندازیم که اصلا این مشکل چطور به وجود اومد؟
دی ان اس چیست؟
اگر با DNS آشنا نیستید بهتره قبل از خوندن ادامه این یادداشت، چند تا ویدیو در موردش ببینید تا دقیقتر با جزئیاتش آشنا بشید. اما اگر بخوام یه معرفی کوتاه بکنم، DNS یا سامانه نام دامنه (Domain Name System) یک پروتکل اینترنت هست که وظیفش تبدیل دامنهی سایتها، به آدرس IP هست.
شما هر وقت بخواید با کسی تماس برقرار کنید، اول توی دفترچه تلفن شمارش رو پیدا میکنید و بعد با شماره تماس میگیرید. تو دنیای اینترنت هم برای ارتباط با یک وبسایت، نیاز به آدرس IP اون وبسایت داریم. مثلا وقتی دامنهی google.com رو در مرورگرتون وارد میکنید، مرورگر از موجودی به اسم سرور دیاناس(DNS Server) یا به طور دقیقتر تحلیلگر دیاناس (DNS resolver) درخواست میکنه که IP متعلق به google.com رو بهش بگه. تحلیلگر فرایند جستوجو رو آغاز میکنه و جواب رو به مروگر برمیگردونه. حالا مرورگر با استفاده از IP، میتونه وبسایت رو به شما نمایش بده.
اما آیا به نظرتون ممکنه که تحلیلگر به شما دروغ بگه؟
دیاناس ربایی
دیاناس ربایی، یک نوع حمله از طریق DNS است که در این حمله، مهاجم سعی میکنه با دستکاری تنظیمات DNS شما، کاری کنه که دامنههایی که از طریق این پروتکل درخواست میکنید، به درستی ترجمه نشن. یعنی به جای IP سایت مورد نظرتون، یک IP دیگه به مرورگرتون برسه و شما هدایت بشید به یک سایت اشتباه.
در اغلب موارد این سایت اشتباه، خطرناک هم هست و قصد دزدیدن اطلاعات شخصی شما رو داره! مثلا هنگام خرید کردن از طریق اینترنت، به جای صفحه پرداخت اصلی، هدایت میشید به یک صفحه پرداخت جعلی و با وارد کردن رمز عبورتون، اطلاعات حساب بانکی شما دزدیده و موجودی حسابتون تخلیه میشه. در این صورت به این نوع حمله، "فیشینگ (phishing)" هم میگن. اما گاهی اوقات هم هدف فقط اینه که به سایت مقصدتون نرسید. یعنی IP ای که مرورگر دریافت میکنه یا IP یک وبسایت بدون خطر دیگه هست یا اصلا چنین IP ای وجود نداره و شما با خطا مواجه میشید.
روشهای حمله
روشهای متفاوتی برای دیاناس ربایی وجود داره. بعضیاشون فقط یک سوژه رو هدف قرار میدن و بعضیاشون روی جمعیت خیلی زیادی تاثیر میگذارن. دوتا از این روشها که مربوط به مشکل ما هستن رو توضیح میدم.
دیاناس ربایی محلی(Local DNS Hijacking):
توی این روش، مهاجم سعی میکنه با نصب بدافزار یا نفوذ به سیستم هدف، تنظیمات DNS رو طوری تغییر بده که سوژه، IP های اشتباه دریافت کنه. مثلا میتونه تحلیلگر دیاناس سیستم شما رو عوض کنه و به جاش تحلیلگری که خودش طراحی کرده رو قرار بده.
دیاناس ربایی مرد میانی(Man in the middle DNS Hijack):
مهاجم اینجا مثل یک واسط بین شما و تحلیلگر دیاناس عمل میکنه. تمام درخواستهایی که برای تحلیلگر ارسال میکنید یا پاسخهایی که اون برای شما برمیگردونه، از کامپیوتر مهاجم گذر میکنن و توی همین مسیر، مهاجم میتونه درخواستهای شما یا پاسخهای تحلیلگر رو تغییر بده.
خب حالا وقتشه برگردیم سر مشکل خودمون...
چرا DNS من ربوده میشه؟
دلیل اولش احتمالا اینه که از تحلیلگر دیاناس نامعتبری استفاده میکنید که بهتون دروغ میگه. در اکثر مواقع، تحلیلگر دیاناس سیستمها به طور اتوماتیک توسط ارائه دهندگان سرویس اینترنت (ISP: Internet Protocol Provider) مشخص میشن که متاسفانه نامعتبر هستن و به دلایلی، IP ها را طبق میل خودشون و نه بر حسب واقعیت برمیگردونن. خوشبختانه این امکان وجود داره که با مراجعه به تنظیمات کامپیوترتون، به راحتی، تحلیلگر سیستمتون رو به یکی از موارد معروف و مورد اطمینان مثل 8.8.8.8 و 8.8.4.4 که متعلق به گوگل هستند تغییر بدید.
اگر الآن تحلیلگر دیاناس سیستمتون رو عوض کردید و یا از قبل هم از تحلیلگرهای معتبر استفاده میکردید، احتمالا همچنان هم IP های اشتباه دریافت میکنید. علت این مشکل اینه که این بار شما تحت حمله دوم هستید و مهاجم کسی نیست جز ISP. ISP واسط بین شما و دنیای اینترنت هست. بنابراین، تمام درخواستهای DNS بین شما و تحلیلگر، همگی از ISP گذر میکنن. ISP تمام این درخواستها رو رصد میکنه و در صورتی که لازم بدونه، مقادیر بازگشتی از طرف تحلیلگر(resolver) رو دستکاری میکنه.
رمزنگاری، راه حل نهایی
راه حل نهایی همه این مشکلات اینه که درخواستهای DNS رو رمزنگاری(Encrypt) کنیم. پروتکل DNS به تنهایی از هیچ رمزنگاریای استفاده نمیکنه اما پروتکلهای دیگهای وجود دارن که میتونن با اعمال رمزنگاری روی DNS، کاری کنن که درخواستهای شما برای هیچ مهاجمی قابل مشاهده یا حداقل قابل تغییر نباشه.
دیاواچ (DoH)
دیاواچ (DoH: DNS over HTTPS) یک پروتکل هست که درخواستهای DNS رو توی یک درخواست HTTPS (Hypertext Transfer Protocol) بستهبندی و ارسال میکنه. یعنی به جای این که شما یک درخواست DNS از سیستمتون به تحلیلگر ارسال کنید، یک درخواست HTTPS ارسال میکنید. وقتی تحلیلگر این بسته رو باز میکنه، میبینه که توی خود این بسته HTTPS، یک بسته DNS دیگه وجود داره که ازش IP یک سایت رو پرسیده. تحلیلگر هم جواب رو دوباره توی یک بسته HTTPS قرار میده و براتون ارسال میکنه. چون در پروتکل HTTPS، تمام بستهها رمزنگاری میشن، هیچکس از محتوای درخواست DNS شما یا پاسخش خبردار نمیشه.
دیاناس کریپت (DNSCrypt)
دیاناس کریپت هم یک پروتکل رمزنگاری دیگه هست که نمیتونه مانع از مشاهده درخواست بشه، اما تضمین میده که درخواست و پاسخ، مصون از تغییرات باشند. این پروتکل برای استفاده سازمانی گزینه بهتری هست چون میتونن فعالیت کارمنداشون رو رصد و تخلفها رو ثبت کنن اما نمیتونن اختلالی ایجاد کنن.
استفاده از DoH خیلی سادست. کافیه یک سری تنظیمات رو روی مرورگر یا سیستمعاملتون اعمال کنید که با یک سرچ گوگل قابل انجامه، اما دیاناس کریپت نیاز به نصب یک نرمافزار خارجی مثل دیاناس کریپت پروکسی (dnscrypt-proxy) داره.
در نهایت با استفاده از هر کدوم از این پروتکلها میتونید یک درخواست و پاسخ سالم DNS داشته باشید و IP واقعی youtube.com یا هر سایت دیگهای رو مشاهده کنید.
در آخر
لازمه این تذکر رو بدم که با استفاده از این پروتکلها، نمیتونید به سایتهای دارای محدودیت دسترسی پیدا کنید، بلکه تنها میتونید از خطر دیاناس ربایی به دور باشید و از دیدن IP واقعی وبسایتها خوشحال باشید :)
اگر هم از یک پروکسی سرور برای اتصال به اینترنت استفاده میکنید، احتمالا این دو پروتکل خیلی به دردتون خواهند خورد.
امیدوارم این یادداشت چیزی به علمتون اضافه کرده باشه و در عمل هم سودی براتون داشته بوده باشه.
مطلبی دیگر از این انتشارات
طراحی سیستماتیک در بازی ها
مطلبی دیگر از این انتشارات
سزا کالج
مطلبی دیگر از این انتشارات
یاد بگیریم که چهطور یاد بگیریم