در مقالهی «تاریخچه DNS: پیشدرآمدی بر ظهور DNSSEC» در رابطه با عملکرد DNS، تهدیدات و مشکلاتی که بر سر راه آن وجود داشت، بهطور مفصل توضیح داده شد. روشی که درنهایت برای حل مشکل امن نبودن DNS بهوسیلهی جامعهی اینترنت به رسمیت شناخته شد، DNSSEC نام داشت. اما پیش از پرداختن به این موضوع که DNSSEC چیست و چگونه عمل میکند، بهتر است ابتدا مروری بر مفاهیم رمزنگاری و امضای دیجیتال داشته باشیم.
رمزنگاری (Cryptography)
Cryptography روشی برای رمزنگاری دادهها است. با استفاده از رمزنگاری میتوان امنیت و یا تایید و تصدیق دادهها را فراهم کرد. گاهی هدف از رمزنگاری، تنها مخفی کردن محتوای پیامها نیست. برای نمونه در DNSSEC از رمزنگاری در فرآیند احراز هویت رکوردها استفاده میشود.
روشهای مختلفی برای رمزنگاری وجود دارند که رایجترین آنها، رمزنگاری کلید عمومی یا Public Key Cryptography است. در این روش از یک جفت کلید، یعنی کلید خصوصی (Private key) و کلید عمومی (Public key)، استفاده میشود. اطلاعاتی که بهوسیلهی یک کلید رمزنگاری میشوند، فقط با جفت کلید دیگر رمزگشایی میشوند. به بیان بهتر اگر اطلاعاتی بهوسیلهی کلید عمومی رمزنگاری شده باشند، تنها بهوسیلهی کلید خصوصی رمزگشایی میشوند.
امضای دیجیتال
در امضای دیجیتال، دادهها نخست به یک تابع هش داده میشوند. خروجی حاصل از این تابع به همراه دادهی اصلی بهوسیلهی Private key، امضا (Sign) و سپس این امضا برای دریافتکننده ارسال میشود. دریافتکنندهی امضا اگر Public key را در اختیار داشته باشد قادر به رمزگشایی پیام و دستیابی به دادههای اصلی است. حال اگر دادههای اصلی را به تابع هش بدهد و هش خروجی با هشی که دریافت کرده یکسان باشد، به معنای دستکاری نشدن دادهها بهوسیلهی شخص سوم و احراز هویت موفق است.
DNSSEC چیست: اصطلاحات و مفاهیم پایه
DNSSEC با امضای دیجیتال رکوردهای DNS یک دامنه، امکان احراز هویت این رکوردها و در امان بودن آن دامنه از حملهی DNS Spoofing را فراهم میکند. این امضاهای دیجیتال یا در اصطلاح Digital Signatureها مانند سایر انواع رکوردهای DNS (مانند A، AAAA یا CNAME) در سرورهای DNS ذخیره میشوند. با بررسی امضای اختصاص یافته به یک رکورد میتوان مطمین شد که رکورد DNS دریافت شده از یک DNS سرور مجاز است، یا رکوردی جعلی است که بهوسیلهی یک حملهی man-in-the-middle تزریق شده است.
DNSSEC برای انجام عملکرد خود، RRهای جدیدی را تعریف میکند که مهمترین آنها عبارتاند از:
- RRset
رکوردهایی با نام، نوع و class یکسان درون یک RRset قرار میگیرند. برای نمونه تمام رکوردهای NS موجود برای یک دامنه داخل یک RRset قرار میگیرند. - RRSIG
دربردارندهی امضای دیجیتال یک RRset - DNSKEY
حاوی کلید عمومی مربوط بهZSK یا KSK - ZSK
مسوول امضای رکوردهایی جز رکوردهای DNSKEY مرتبط با یک Zone - DS
دربردارندهی hash رکورد DNSKEY حاوی public KSK است. از رکوردهای DS برای ایجاد زنجیرهای از اعتبارسنجی در ساختار سلسله مراتبی DNS استفاده میشود. - KSK
مسوول امضای رکوردهای DNSKEY مرتبط با یک Zone
عملکرد DNSSEC
نخستین گام در امنسازی یک Zone، قرار گرفتن رکوردهایی با نوع (type) یکسان داخل یک RRset است. برای نمونه اگر داخل یک Zone چهار NS Record وجود داشته باشد، همهی آنها داخل یک RRset قرار میگیرند.
بهجای آنکه رکوردهای DNS بهشکل جداگانه امضا شوند، RRset که به آن تعلق دارند امضا میشود. به این ترتیب، زمان اعتبارسنجی یک رکورد، کل رکوردهای مشابه آن رکورد که داخل RRset قرار دارند نیز، تایید اعتبار میشوند.
Zone Signing Key (ZSK)
در DNSSEC برای هر Zone یک جفت کلید وجود دارد که به آن ZSK گفته میشود؛ از Private ZSK، برای امضای RRsetهای داخل Zone و از Public ZSK برای تایید این امضاها استفاده میشود.
امضای مربوط به هر RRset، درون یک رکورد RRSIG قرار میگیرد. دریافتکنندهی رکوردهای RRSIG (برای نمونه Recursive Resolver)، تا زمانیکه راهی برای رمزگشایی آنها نداشته باشد، نمیتواند به دادههای این رکوردها دست پیدا کند. پس کلید عمومی ZSK نیز باید برای دریافتکننده ارسال شود. این کلیدها داخل DNSKEY Recordها ذخیره و برای Recursive Resolver ارسال میشوند.
زمانیکه Recursive Resolver درخواست دسترسی به یک نوع رکورد خاص را میدهد، Name Server برای آن، RRSIG مربوط به آن رکورد را ارسال میکند. Recursive Resolver با دریافت این رکورد از Name Server رکورد DNSKEY را درخواست میکند. مجموع RRSet ،RRSIG و رکوردهای DNSKEY با هم، یک پاسخ معتبر را تشکیل میدهند.
اگر Public ZSK موجود در یک DNSKEY Record تایید شود، تمام رکوردهای داخل آن Zone تایید میشوند. پس به راهی برای تایید اعتبار Public ZSK نیاز است.
Key Signing Key (KSK)
وظیفهی KSK، امن کردن رکوردهای DNSKEY حاوی Public ZSK است. KSK نیز مشابه ZSK یک جفت کلید است: Private KSK و Public KSK. باز هم مشابه آنچه برای ZSK شرح داده شد، Public KSKها درون رکوردهای DNSKEY ذخیره میشوند.
مانند انواع رکوردها، رکوردهای DNSKEY (که شامل Public ZSK یا Public KSK هستند) نیز در یک RRset قرار میگیرند. RRset مربوط به رکوردهای DNSSKEY بهوسیلهی Private KSK امضا و این امضا درون یک رکورد RRSIG ذخیره میشود. Recursive Resolver از Public KSK برای تایید اعتبار Public ZSK استفاده میکند.
بهشکل خلاصه مراحل تایید اعتبار یک رکورد برای یک Resolver به شرح زیر است:
- ابتدا RRset مربوط به رکورد مورد نظر از Name Server درخواست میشود و Name Server در پاسخ، رکورد RRSIG مربوط به آن RRset را برای Resolver ارسال میکند.
- Resolver با دریافت این امضاها برای تایید اعتبار آنها نیازمند کلیدهای عمومی است. پس از Name Server رکورد DNSKEY حاوی Public ZSK و Public KSK را درخواست میکند و Name Server نیز در پاسخ، رکورد RRSIG مربوط به رکوردهای DNSKEY را ارسال میکند.
- در گام بعد Resolver با استفاده از Public KSK، اعتبار RRSIGهای مربوط به DNSKEY RRset را بررسی میکند.
- اگر DNSKEY RRset تایید اعتبار شود، در واقع اعتبار Public ZSK تایید میشود و به این ترتیب Resolver با استفاده از Public ZSK، اعتبار RRSIG مربوط به RRset درخواستشده را بررسی میکند.
اما چگونه Resolver قادر خواهد بود که رکورد RRSIG مربوط به رکوردهای DNSKEY را تایید اعتبار کند؟ به بیان بهتر، Resolver چگونه میتواند Public KSK را اعتبارسنجی کند؟
آنچه تا به اینجا بررسی شد، شیوهی ایجاد Trust در یک Zone بود، اما DNS دارای ساختاری سلسله مراتبی است و بهندرت پیش میآید که یک Zone بهشکل مستقل عمل کند.
راهکار DNSSEC برای ایجاد Trust بین Child Zoneها و Parent Zoneهای مربوط به آنها، استفاده از رکورد DS است. در واقع DNS با استفاده از رکوردهای DS، Public KSKها را تایید اعتبار میکند. بدون وجود رکوردهای DS ،DNS Resolverها باید میلیونها Public Key را ذخیره کنند!
رکورد Delegation Signer (DS)
هر زمان Resolver قصد ارجاع به یک Child Zone را داشته باشد، از جانب Parent Zone مربوط به آن Child Zone، یک رکورد DS دریافت میکند. در این رکورد، hash مربوط به Public KSK قرار دارد و برای Resolver مشخصکنندهی آن است که برای Child Zone مورد درخواست، DNSSEC فعال شده است.
Resolver برای آنکه بتواند اعتبار Public KSKهای مربوط به Child Zone را مورد بررسی قرار دهد، رکورد DNSKEY دریافت کرده از جانب Child Zone که حاوی Public KSKها است را hash کرده و آن را با محتوای رکورد DS که از Parent Zone دریافت و مقایسه میکند. اگر این دو مقدار با هم یکسان باشند، بهمعنای معتبر بودن Public KSK است و تمام رکوردهای Child-Zone تایید اعتبار میشوند. بهاینترتیب DNSSEC زنجیرهای از اعتماد را در دامنهی DNS فراهم میکند.
چون KSK و DS Record کاملن به هم وابسته هستند، هر تغییری در KSK نیازمند تغییر در رکورد DS مربوط به Parent Zone است. تغییر رکورد DS در Parent Zone یک فرآیند چند مرحلهای است که اگر بهدرستی انجام نشود، میتواند سبب تفکیک یک Zone شود. به همین دلیل، تغییر ZSK بسیار آسانتر از KSK است.
تا به اینجا شیوهی برقراری ارتباط و اطمینان از معتبر بودن رکوردها در یک Zone و مابین یک Child Zone و Parent Zzone بررسی شد. اما چهطور میتوان مطمین شد که DS Record ارسالی از جانب Parent Zone معتبر است؟
رکورد DS نیز مانند سایر RRSetها امضا میشود و دارای RRSIG Record ویژهی خود است. تمامی مراحل اعتبارسنجی تا زمانیکه Public KSK از Parent دریافت شود، تکرار خواهد شد. پس به بیان بهتر، برای اعتبارسنجی یک رکورد، یک زنجیره از ارتباطات با سطوح بالاتر برقرار میشود. در نهایت آخرین سطح اعتبارسنجی در این زنجیره، بررسی DS Record مربوط به root DNS server است. اما مشکلی که در اینجا وجود دارد آن است که هیچ Parent DS Record برای root DNS server بهمنظور انجام این اعتبارسنجی وجود ندارد، چراکه DNS Serverهای root هیچ Parent یا سطح بالاتری ندارند.
برای حل این مشکل، نشستی تحتعنوان Root Signing (یا Root Signing Ceremony) برای امضای DNSKEY RRset مربوط به root DNS Serverها، بهوسیلهی ICANN برگزار میشود. در این مراسم یک رکورد RRSIG تولید میشود که با استفاده از آن Public KSK و Public ZSK مربوط به root Name Server را میتوان اعتبارسنجی کرد.
نکتهی مهم: اگر در هر مرحلهای در طول این اعتبارسنجی زنجیرهوار، اعتبار کلیدی تایید نشود، این زنجیره شکسته و کل عمل اعتبارسنجی با شکست روبهرو میشود. به همین دلیل DNSSEC نمیتواند از حملههای Man-In-The-Middle جلوگیری کند.
ابر آروان و DNSSEC
ابر آروان در جایگاه یک Authoritative DNS Server یک رکورد DS در اختیار مشتریانی که از محصول DNS ابری آروان استفاده میکنند، قرار میدهد. بنابراین اگر Registrar و TLD که مشتری دامنهی خود را از آن تهیه کرده، از DNSSEC پشتیبانی کند، ساختار سلسله مراتبی اعتبارسنجی رکوردها برای آن دامنه لحاظ و بهاینترتیب آن دامنه در برابر حملات DNS spoofing امن میشود.
برای درک بهتر روندی که اتفاق میافتد، تصویر زیر را در نظر بگیرید:
- کاربر در مرورگر خود نشانی example.com را وارد میکند. مرورگر نخست Cache خود را برای یافتن آدرس IP متناظر با آن بررسی میکند. اگر این IP را در Cache خود پیدا نکند، درخواستی را برای DNS Server که برای آن تنظیم شده (Recursive Resolver) میفرستد.
- Recursive Resolver که میتواند DNS Server باشد که ISP برای شما فراهم کرده است، نخست Cache خود را برای یافتن آدرس IP متناظر با آن نام جستوجو میکند. اگر آدرسی پیدا نکند، درخواستی را برای Root Server میفرستد.
- Root Server با دریافت این درخواست، در پاسخ، آدرس IP مربوط به TLD آن دامنه به همراه DS Record مرتبط با آن را برای Recursive Resolver میفرستد.
- Recursive Resolver با دریافت این IP، درخواستی را مبن بر دریافت آدرس IP دامنه، برای TLD میفرستد.
- TLD با دریافت این درخواست، آدرس IP مربوط به DNS Serverهای ابر آروان که رکوردهای دامنهی مورد نظر در آن ذخیره شدهاند، به همراه DS Record مرتبط با آن را برای Recursive Resolver میفرستد.
- Recursive Resolver برای DNS Server ابر آروان درخواستی را برای دسترسی به رکوردهای دامنهی موردنظر میفرستد.
- DNS server ابر آروان نیز در پاسخ برای Recursive Resolver، رکوردهای RRSIG و DNSKEY را میفرستد.
- Recursive Resolver که اکنون به تمام رکوردهای مورد نظر خود دست یافته و تمام سرورهای بالادستی را نیز احراز هویت کرده است، درنهایت آدرس IP دامنهی example.com را برای مرورگر میفرستد و بهاینترتیب مرورگر میتواند به محتوای دامنه دسترسی داشته باشد.
اگر از محصول DNS ابری ابر آروان استفاده میکنید و قصد فعالسازی DNSSEC برای دامنهی خود را دارید، راهنمای زیر به شما در این زمینه کمک میکند:
3 پاسخ در “DNSSEC چیست و چگونه عمل میکند؟”
متاسفانه هنوز به دلیل عدم تخصص کافی در بسیاری از رجیسترار های کشور و به طبع ناتوانی از استفاده از تکنولوژی های جدید این قابلیت در کمتر مرکز رجیستری دیده میشه. با این حال آروان با نگاهی آینده نگرانه این تکنولوژی رو پیش بینی کرده.. سپاس گذاریم.
این مطلب خیلی به درد من خورد. ممنونم.
بسیار مطلب عالی و مفیدی بود
از طرف آموزشگاه آشپزی آشپزشو قنادشو http://www.ashpazsho.ir
نظرات بسته شده است.