پروتکل DNSSEC چیست؟ چه تاثیری بر امنیت سایت دارد؟
یکی از تحولاتی که در دنیای اینترنت رخ داد، به وجود آمدن DNS بود. به کمک این سیستم، نیاز به حفظ کردن اعداد طولانی برای رسیدن به سایتها از بین رفت. به این ترتیب کاربران میتوانند فقط با نوشتن نام دامنه یک سایت وارد آن شوند. بیایید که میخواهیم یک داستان برایتان بگوییم.
فرض کنید بهعنوان توریست در کشوری غریب هستید و میخواهید از محلی به محل دیگر بروید. سادهترین انتخابی که پیش رویتان قرار دارد استفاده از ناوگان حملونقل عمومی مانند تاکسی است! از آنجایی که تشخیص تاکسیها در کشورهای مختلف کار خیلی سختی نیست، با دیدن اولین ماشین زرد دستتان را بلند میکنید تا شما را سوار کند؛ اما به این فکر کردهاید که شاید در این کشور نظارت چندانی روی تاکسیها نباشد؟ اگر یک سارق با تاکسی جعلی شما را سوار کند و همهچیزتان را بدزدد تکلیف چیست؟!
نه اینکه بخواهیم دلتان را خالی کنیم، اما خوب کلیت سیستم DNS هم امنیت تضمینشده ندارد. در داستان بالا کشور غریب را دنیای اینترنت درنظر بگیرید، ناوگان حملونقل عمومی همان سیستم DNS است و سارق تاکسیران هم هکرهای همیشه در صحنه!
برای افزایش امنیت این سیستم، پروتکلی با نام DNSSEC طراحی شده است و این مقاله هم راجع به همین پروتکل است.
قبل از اینکه با پروتکل DNSSEC آشنا شوید، بیایید تعریف DNS را مرور کنیم.
DNS چیست و چه وظیفهای دارد؟
قبلاً در مقالهای بهطور کامل و مفصل راجع به DNS صحبت کردهایم. این مقاله با عنوان DNS چیست؟ آشنایی با نیمسرور در وبلاگ ایران سرور قرار دارد؛ اما از آنجایی که در این مقاله هم به تعریف این مفهوم نیاز داریم، اجازه دهید اشاره کوتاهی به آن داشته باشیم.
DNS مخفف Domain Name System است. بهسادهترین بیان، DNS را میتوان به دفترچه تلفن دنیای وسیع اینترنت تشبیه کرد. سرورهایی که وظیفه دارند نامهای دامنه را، برای فهم کامپیوترها، به آدرسهای IP تبدیل کنند.
اما یک مشکل وجود دارد. این سیستمها در ابتدا بدون هیچگونه امنیتی طراحی شدند و تا مدت زیادی هم بدون مشکل به کار خود ادامه دادند. تا این که هکرها فهمیدند سوءاستفاده از این سهلانگاری ممکن است و شروع به آزار و اذیت کاربران کردند. یکی از رایجترین حملاتی که آنها با استفاده از این رخنه امنیتی انجام میدهند، DNS Spoofing نام دارد!
DNS Spoofing چیست و چگونه انجام میشود؟
حملات DNS Spoofing با روشهای مختلفی اجرا میشوند؛ یکی از پراستفادهترین روشها، حمله مرد میانی یا Man In The Middle است. توصیه من این است که مقاله انواع حملات سایبری را بخوانید تا بیشتر با انواع روشهای هک آشنا شوید.
نمیخواهیم موضوع را تخصصی و پیچیده کنیم. در DNS Spoofing که به خاطر ضعف امنیتی DNSها ممکن میشود، فردی که قصد بازدید از یک سایت را دارد، توسط هکرها به سایت دیگری هدایت میشود. این سایت میتواند یک کپی بینقص از سایت اصلی باشد که برای اجرای حملات فیشینگ، یا کسب اطلاعات حساس کاربران، طراحی شده است.
تصویر زیر بهخوبی این فرایند را نشان میدهد:
این ناامنی بیشازحدِ نیمسرورها یا همان DNS، باعث بهوجود آمدن پروتکل امنیتی DNSSEC شد.
DNSSEC چیست و چگونه باعث افزایش امنیت میشود؟
DNSSEC مخفف Domain Name System Security Extension است و مشکل ناامنی سیستم نام دامنه یا همان نیمسرور را از بین میبرد. استفاده از این افزونه برعهده وبسایتها است تا با استفاده از آن هم از سایت خودشان و هم از بازدیدکنندگانشان محافظت کنند.
در سال 2016 حملهای گسترده از جانب هکرها رخ داد که منجر به آلودگی صدها هزار دستگاه متصل به اینترنت شد. این حمله که در زمان خود جزو بزرگترین حملات سایبری محسوب میشد، کمپانی مطرح Dyn را هدف قرار داده بود. این کمپانی در زمینه DNS به سایتهای بزرگی مانند BBC، CNN و حتی اسپاتیفای خدمات ارائه میکرد. بعد از این حمله بود که نیاز به افزایش امنیت DNSها احساس شد و DNSSEC به وجود آمد.
DNSSEC با رمزنگاری (Cryptography) و امضای دیجیتال (Digital Signature) کار میکند.
رمزنگاری (Cryptography) چیست؟
در دنیای اینترنت، برای رمزگذاری دادههای مختلف از Cryptography استفاده میشود. شاید باورتان نشود، اما رمزگذاری همیشه برای مخفی کردن پیامها استفاده نمیشود و میتوان از آن برای تائید درستی – یا نادرستی – دادهها هم استفاده کرد.
در سیستم DNSSEC هم، Cryptography وظیفه احراز هویت رکوردها را بر عهده دارد.
خیلی ساده و خودمانی درمورد رمزنگاری بگوییم که این کار به روشهای گوناگونی انجام میشود. رمزنگاری مدنظر ما در موضوع DNSSEC، رمزنگاری کلید عمومی (Public Key Cryptography) است.
در این روش اطلاعات توسط یک جفت کلید رمزگذاری میشوند. اصطلاحاً این کلیدها به کلید عمومی و کلید خصوصی معروف هستند. برای رمزگشایی پیامی که با کلید خصوصی رمزنگاری شده است، باید از کلید عمومی استفاده کنید و برعکس!
امضای دیجیتال (Digital Signature) چیست؟
امضای دیجیتال هم روش تکمیلی برای رمزنگاری دادهها است. از این امضا برای راستیآزمایی پیامهای دریافتی توسط منابع ناشناس استفاده میشود و جعل آنها کار بسیار سختی است (تقریباً غیرممکن!).
وقتی صحبت از امضای دیجیتال در پروتکل DNSSEC باشد، دادهها ابتدا توسط توابع هش، به خروجیهای مختلفی تبدیل میشوند. (توابع هش، توابع ریاضی هستند که وظیفه تبدیل دادهها به اعداد طبیعی را دارند) سپس اطلاعات با امضای دیجیتال تکمیل و توسط یک کلید خصوصی برای طرف دیگر ارسال میشوند.
اگر طرف مقابل کلید عمومی را داشته باشد، میتواند به محتویات پیام دست پیدا کند. حالا برای اینکه از درستی پیام اطمینان حاصل شود، فقط کافی است آن را وارد تابع هش کند و خروجی را با تابعی که در اختیار دارد مقایسه کند. اگر تفاوتی وجود نداشته باشد، یعنی پیام توسط شخص سومی (مثلاً هکر) دستکاری نشده است!طرز کار امضای دیجیتال در تصویر زیر نمایش داده شده است.
در تصویر بالا پوریا باید کلید عمومی مهرداد را داشته باشد تا پیام او را دریافت کند.
پس DNSSEC چگونه کار میکند؟! عجله نکنید، ابتدای بیایید رکوردهای آن را بشناسیم.
رکوردهای مرتبط با DNSSEC
همانطور که گفتیم، DNSSEC وظیفه دارد اعتبار پاسخهایی که از جانب DNS به مرورگر بازدیدکنندگان ارسال میشود را تائید کند. این کار با رمزنگاری امضاهای دیجیتال روی رکوردهای DNS انجام میشود. رکوردهای این پروتکل در واقع بهنوعی رکوردهای DNS را در خود جای میدهند و فرایند تائید یا عدم تائید درستی آن را پیش میبرند.
RRset
تمام رکوردهایی که نام، نوع و کلاس یکسان دارند، درون یک RRset قرار میگیرند. درست مانند پوشهای که حاوی یک فیلم بههمراه فایل زیرنویس و عکس کاور آن است. مثلاً تمام رکوردهای NS مربوط به یک دامنه، داخل یک RRset قرار میگیرند.
برای مثال تصویر زیر را ببینید؛ اگر 3 تا رکورد AAAA با برچسب یکسان داشته باشیم، همگی در یک RRset واحد با نام AAAA قرار میگیرند.
درباره 4 تا رکورد MX هم همین اتفاق میافتد. همه آنها در یک RRset با نام MX قرار میگیرند.
RRSIG
هر RRset امضای دیجیتالی مخصوص به خود را دارد. حالا این امضاها کجا نگهداری میشوند؟ داخل یک رکورد! به رکوردهای حاوی این امضاهای ارزشمند RRSIG میگویند.
DNSKEY
پروتکل DNSSEC برای تائید درستی هر DNS، از یک کلید عمومی استفاده میکند. این کلید در رکورد DNSKEY نگهداری میشود. نظرتان چیست که یکبار دیگر وظایف 3 رکورد اول را مرور کنیم؟
رکوردهای همنام و همنوع DNS بههمراه یکدیگر در یک RRset قرار میگیرند. مثلاً تمام رکوردهای A در یک رکورد RRset قرار میگیرند و تمام رکوردهای MX در یک RRset دیگر. سپس این رکوردهای RRset توسط امضاهای دیجیتال رمزگذاری میشوند. به رکوردی برای نگهداری از این امضاها نیاز داریم که خوب مشکلی نیست! رکوردهای RRSIG همین وظیفه را دارند. حالا یک کلید عمومی میخواهیم که DNSهای معتبر بتوانند آن را با کلید خصوصیشان باز کنند! از این کلید عمومی داخل رکورد DNSKEY نگهداری میشود!
فقط DNSهای معتبر کلیدهای خصوصیای دارند که با کلید عمومی موجود در رکورد DNSKEY سازگار باشد.
DS
نکته جالب این که باید خود رکورد DNSKEY را هم رمزگذاری کنیم و رکورد DS هم بههمین منظور توسط پروتکل DNSSEC ارائه شد. میتوان گفت رکورد DS اثر انگشتی است برای باز کردن DNSKEY.
هنگام ارزیابی سلامت یک دامنه توسط DNSSEC، یکی از مهمترین کارهایی که توسط ربات این سیستم – که اصطلاحاً به آن Resolver میگویند – انجام میشود، بررسی این موضوع است که آیا رکوردهای DS با رکوردهای DNSKEY هماهنگی دارند یا خیر؟!
اما برای آنهای که میخواهند طرز کار این رکورد را دقیقاً بدانند:
این رکورد در واقع حاوی تابع هَش کلیدهای عمومی موجود در رکورد DNSKEY است! از آنجایی که رکورد DNSKEY میتواند دارای چند کلید عمومی باشد، این رکورد به فضاهای کوچکتری تقسیم میشود (اصطلاحاً به این فضاهای کوچک محدوده فرزند و به تک فضای بزرگتر محدوده والد میگویند. در اینجا رکورد DS محدوده والد محسوب میشود و رکورد DNSKEY محدوده فرزند.)
هر زمان که در هر فرایندی نیاز به کلیدهای عمومی موجود در رکورد DNSKEY بهوجود بیاید، قبل از هرچیزی باید سلامت این رکورد تائید شود! به همین منظور DNSKEY وارد یک تابع هَش (که از قبل در اختیار پروتکل قرار دارد) میشود. اگر خروجی با تابع هَش موجود در رکورد DS یکسان باشد، سلامت رکورد DNSKEY هم مورد تائید است.
NSEC
به این فکر کردید که اگر نام دامنهای را درخواست کنید که کلاً وجود ندارد چه اتفاقی میافتد؟! در حالت عادی هیچ اتفاقی نمیافتد! یعنی حتی نمیتوانید بفهمید که ایراد از اینترنتتان است یا مرورگر به مشکل خورده است؛ اما پروتکل DNSSEC برای این مشکل هم راهحلی دارد و این راهحل رکورد NSEC است.
مثلاً فرض کنید میخواهید وارد blog.iranserver.com شوید و به هر دلیلی موفق نمیشوید. نزدیکترین نام دامنه به این آدرس، Iranserver.com است. پس رکورد NSEC نزدیکترین نام دامنه را به جای آدرس اصلی به کاربر نمایش میدهد و کاربر هم میتواند مطمئن باشد که حقهای از جانب هکرها در کار نیست و نام دامنه درخواستیاش به دلایلی موجود نیست.
اما خوب با استفاده از رکورد NSEC یک رخنه امنیتی هم به وجود میآید که برای حل آن به رکورد NSEC3 نیاز داریم.
NSEC3
NSEC بهنوعی راه را برای هکرها باز میکند و آنها میتوانند خیلی راحت به تمامی رکوردهای یک DNS دسترسی پیدا کنند. (اصطلاحاً به این کار Walk in the Zone میگویند).
NSEC3 برای رفع این مشکل توسط پروتکل DNSSEC معرفی شده است. این رکورد با استفاده از مکانیزم تابع هَش، امینت رکوردهای مختلف را فراهم میکند و نمیگذارد هکرها به آنها دسترسی پیدا کنند. حداقل انقدر راحت!
NSEC3 Parameters (NSEC3PARAM)
برایتان سوال پیش نیامده که DNSها از کجا میفهمند که کدام رکوردها را با استفاده از NSEC3 ایمن کنند و کدام رکوردها اهمیت کمتری دارند؟ پاسخ سوال محتویات موجود در رکورد NSEC3PARAM است. این رکورد حاوی پارامترهایی است که یک سرور معتبر برای محاسبه توابع هَش به آنها نیاز دارد.
آشنایی با طرز کار DNSSEC در 7 مرحله
تا به اینجای مقاله فهمیدید که DNS یا نیمسرور، خیلی ایمن نیست و این ناامنی زمینه را برای تاختوتاز هکرها فراهم میکند. DNSSEC برای رفع این مشکلات معرفی شد. این سیستم طی 7 مرحله امنیت کاربران و سایتها را تامین میکند.
مرحله اول
وقتی آدرس یک سایت را در نوار URL مرورگرتان وارد میکنید، مرورگر برای پیدا کردن IP آن سایت، شروع به جستوجو در DNS کامپیوترتان میکند. اگر قبلاً وارد آن سایت شده باشید، به احتمال خیلی زیاد، آدرس آیپی در حافظه کش کامپیوتر وجود دارد و بدون نیاز به کمک خارجی، وارد سایت مدنظرتان میشوید.
مرحله دوم
اگر آیپی سایت موردنظر در حافظه کَش وجود نداشته باشد، درخواست به یک سرور بازگشتی ارسال میشود. این سرور توسط ارائهکننده سرویس اینترنتتان (ISP) مدیریت میشود.
مرحله سوم
اگر آدرس IP منطبق با نام دامنهای که به دنبال آن هستید در سرور ISP هم موجود نباشد به این مرحله میرسیم. در اینجا جستوجو برای سرور DNSای که به کارتان بیاید شروع میشود؛ یعنی سروری که اطلاعات معتبر در رابطه با نام دامنهای که به دنبال آن هستید را درون خود داشته باشد.
مرحله چهارم
این مرحله با جستوجو در پسوند دامنه مربوطه شروع میشود. مثلاً اگر میخواهید وارد Iranserver.com شوید، جستوجو در DNS جهانی پسوند com انجام خواهد شد.
مرحله پنجم
پس از ورود به DNS دامنههای سطح اول (TLD)، جستوجو برای نام دامنه درخواستی آغاز میشود که همان Iranserver.com است.
توجه: برای آشنایی با انواع مختلف پسوندهای دامنه، میتوانید راهنمای انواع پسوند دامنه را بخوانید.
مرحله ششم
در تمامی مراحل سرور درخواست کلید DNSSECای را میکند که با محدوده آن DNS – در اینجا com – سازگار باشد. این مرحله هم همینطور است.
سرور DNS درخواست یک کلید DNSSEC میکند که قفل محدوده پسوندهای com را باز کند. پاسخی که دریافت میشود شامل رکورد RRSIG است که این کلید را درون خود دارد.
مرحله هفتم
سرور بازگشتی رکورد RRSIG از راه رسیده را ارزیابی میکند. اگر اعتبار آن تائید شود و اطمینان حاصل شود که در میان راه تغییری در آن ایجاد نشده است، در نهایت کاربر به سایت مدنظر خود منتقل خواهد شد.
تمامی این مراحل در کسری از ثانیه انجام میشوند و شما – در صورت تائید درستی آدرس – خیلی سریع به سایت مدنظرتان هدایت میشوید.
موافقید که با نقاط قوت و ضعف DNSSEC آشنا شویم؟
مزایا و معایب پروتکل DNSSEC
پروتکل DNSSEC در کنار تمام ویژگیهای خوبی که دارد، خالی از ایراد هم نیست! پس بیایید اول نگاهی کلی به مزایای آن داشته باشیم و بعد هم به معایب آن بپردازیم.
مزایای پروتکل DNSSEC
احتمالاً بزرگترین مزیتی که این پروتکل امنیتی ایجاد میکند، دفاع از کاربران در برابر حملات هکرها مانند مرد میانی یا MITM، DNS Spoofing، Cache Poisoning و … است.
وقتی این خطرها از بین بروند، خیالتان از خیلی جهات راحت میشود و میتوانید با تمرکز بیشتری روی فعالیتهای آنلاینتان تمرکز کنید. همچنین خیال مشتریانتان هم راحت میشود و میتوانند اعتماد بیشتری به شما داشته باشند. پس مزیت بعدی افزایش اعتماد بازدیدکنندگان است.
در کنار این مزایا، DNSSEC معایبی هم دارد.
معایب پروتکل DNSSEC
اگر بگوییم بیشتر معایب پروتکل DNSSEC صرفاً به خاطر نوظهور بودن آن است، برایتان عجیب است؟!! حقیقت همین است! این پروتکل هنوز توسط بسیاری از سرورهای DNS پشتیبانی نمیشود و زمان بیشتری برای جا افتادن نیاز دارد.
یکی از بدترین عیبهای DNSSEC پیچیدگیای است که در هر دو طرف سرور و کلاینت ایجاد میکند. اگر هم بخواهید از این پیچیدگی کم کنید باید هزینه بیشتری بپردازید!
تمام این معایب میتوانند با گذشت زمان و ارائه آپدیتهای جدید از بین بروند و در نقطه مقابل به مزایای این پروتکل تبدیل شوند. با این اوصاف شاید استفاده از پروتکل DNSSEC مناسب همه سایتها نباشد.
چه سایتهایی باید از DNSSEC استفاده کنند؟
استفاده از پروتکل DNSSEC میتواند برای تمام سایتها مناسب باشد؛ اما با توجه به ایراداتی که در مورد آنها صحبت کردیم، شاید بهتر باشد با توجه به ماهیت سایتتان تصمیم بگیرید. مثلاً اگر سایت فروشگاهی دارید، بهتر است از این پروتکل استفاده کنید تا خدایی نکرده پول بازدیدکنندگانتان (مشتریان) دزدیده نشود!
بعد از آن باید از سرور DNSای که آیپی سایتتان روی آن قرار گرفته اطمینان حاصل کنید؛ اطمینان از این جهت که این پروتکل را پوشش دهد. بعد از آن نگاهی به بودجهتان بیندازید؛ آیا تامین هزینه DNSSEC برایتان صرف اقتصادی دارد؟
در کل میتوان گفت DNSSEC، پروتکلی است که داشتن آن نه لزوماً مفید است و نه لزوماً مضر! اما در بسیاری موارد بد نیست که از آن استفاده کنید.
حرف آخر
چه بخواهید و چه نخواهید، هنگام کار با اینترنت در حال استفاده از DNSها هستید. حقیقت غیرقابل انکاری وجود دارد و آن هم اینکه این سرورها امنیت زیادی ندارند! هکرها میتوانند با استفاده از رخنههای موجود در این سیستم برایتان دردسر درست کنند.
پروتکل DNSSEC برای رفع این رخنهها معرفی شده و تا حد بسیار زیادی هم دست هکرها را برای اجرای حملات از این طریق کوتاه کرده است؛ البته این پروتکل معایبی هم دارد که احتمالاً با گذشت زمان از بین میروند و عملکرد آن را بهتر هم میکنند.
برای نوشتن این مقاله از سایتهای معتبری کمک گرفتیم که در ادامه نام آنها را مشاهده میکنید:
درضمن علاوه بر مقاله DNS چیست که در طول متن دو بار به آن اشاره کردیم، مقاله DNS پویا چیست هم با این موضوع مرتبط است و میتوانید برای افزایش دانشتان آن را مطالعه کنید.
نظر شما چیست؟ استفاده از DNSSEC را برای افزایش امنیت توصیه میکنید؟