ما هو DNSSEC وكيف يعمل؟

يضيف DNSSEC (اختصار DNS Security Extensions) توقيعات رقمية إلى سجلات DNS لتتمكّن المحلِّلات (resolvers) من التحقق من أن الإجابة صادرة فعلًا من مالك النطاق ولم تُعدَّل في الطريق. وهو لا يشفّر أي شيء؛ بل يثبت الأصالة عبر سلسلة ثقة تبدأ من جذر DNS.

لا يملك DNS العادي أي وسيلة للتمييز بين إجابة حقيقية وأخرى مزوَّرة. ويسدّ DNSSEC، المعتمد في RFC 4033 و4034 و4035، هذه الثغرة. يشرح هذا الدليل أنواع السجلات المعنية، وطريقة عمل التحقق، وأكثر الأخطاء التي تُخرج النطاقات الموقَّعة من الخدمة.

المشكلة التي يحلّها DNSSEC

يقبل المحلِّل التكراري (recursive resolver) أول إجابة تطابق سؤاله. ويستطيع المهاجم القادر على حقن استجابة مزوَّرة، سواء بوجوده على مسار الشبكة أو بالفوز في سباق مع الخادم الحقيقي في هجوم تسميم الذاكرة المؤقتة (cache poisoning)، أن يحوّل مستخدمي ذلك المحلِّل إلى عنوان IP من اختياره. ويحصل كل من يشارك ذلك المحلِّل على الإجابة المزيفة إلى أن تنتهي صلاحية المدخل المخزَّن مؤقتًا.

يجعل DNSSEC التزوير قابلًا للكشف. فكل مجموعة سجلات تُوقَّع بالمفتاح الخاص للمنطقة، ويُنشر المفتاح العام المقابل في DNS. ويفحص المحلِّل المتحقِّق التوقيع ويرفض كل ما لا يجتاز التحقق. وإذا أردت مراجعة المحلِّلات والخوادم المعتمدة (authoritative) أولًا، فاقرأ ما هو DNS وكيف يعمل.

أنواع سجلات DNSSEC

السجلمكانهالغرض
DNSKEYالمنطقة الموقَّعةالمفاتيح العامة المستخدمة للتحقق من توقيعات المنطقة
RRSIGالمنطقة الموقَّعةتوقيع على مجموعة سجلات واحدة (مثل كل سجلات A لاسم ما)، مع وقتَي بداية الصلاحية ونهايتها
DSالمنطقة الأمموقّع التفويض (Delegation Signer): تجزئة (hash) لمفتاح توقيع المفاتيح في المنطقة الفرعية، تربط الأم بالفرع
NSECالمنطقة الموقَّعةيثبت أن اسمًا أو نوع سجل غير موجود بذكر الاسم الموجود التالي بحسب الترتيب
NSEC3المنطقة الموقَّعةمثل NSEC لكن بأسماء مجزَّأة (RFC 5155)، ما يصعّب سرد كل الأسماء في المنطقة
CDS / CDNSKEYالمنطقة الموقَّعةيُعلِم المنطقة الأم بسجل DS الذي ينبغي لها نشره، ما يتيح التحديثات الآلية (RFC 7344)

يتناول دليلنا عن أنواع سجلات DNS السجلات العادية، مثل A وMX وTXT، التي تحميها هذه التوقيعات.

لماذا يلزم إثبات عدم الوجود

من دون NSEC أو NSEC3 يستطيع المهاجم تزوير استجابة NXDOMAIN («هذا الاسم غير موجود»)، وهي استجابة لا يمكن أن تحمل توقيعًا خاصًا بها لأنه لا يوجد سجل لتوقيعه. وتمنح سجلات NSEC المحلِّل بيانًا موقَّعًا بأنه لا شيء موجود بين اسمين، فيمكن التحقق من النفي أيضًا.

مفاتيح توقيع المفاتيح ومفاتيح توقيع المنطقة

تستخدم معظم المناطق نوعين من المفاتيح، ويُنشر كلاهما في صورة سجلات DNSKEY:

  • مفتاح توقيع المنطقة (ZSK)، وعلامات DNSKEY فيه 256: يوقّع مجموعات السجلات العادية في المنطقة. ويمكن تدويره كثيرًا دون إشراك أحد آخر.
  • مفتاح توقيع المفاتيح (KSK)، وعلامات DNSKEY فيه 257: يوقّع مجموعة سجلات DNSKEY فقط. وتجزئته هي ما يوضع في سجل DS لدى المنطقة الأم، لذلك يتطلب تغييره تحديث المسجّل.

يبقي فصل الدورين تغييرات المفاتيح الروتينية داخل مزوّد DNS لديك، بينما يكون تغيير KSK الأقل تكرارًا هو الوحيد الذي يمسّ المنطقة الأم. وتستخدم بعض الإعدادات بدلًا من ذلك مفتاح توقيع موحَّدًا، وهو أبسط وشائع مع خوارزميات المنحنيات الإهليلجية الحديثة مثل الخوارزمية 13 (ECDSA P-256 مع SHA-256).

سلسلة الثقة

لا يفيد التوقيع إلا إذا وثق المحلِّل بالمفتاح الذي أنشأه. ويبني DNSSEC هذه الثقة خطوة خطوة من الجذر الذي جرى توقيعه عام 2010. تأتي المحلِّلات المتحقِّقة ومعها KSK الخاص بمنطقة الجذر مدمجًا بوصفه مرساة ثقة (trust anchor). وللتحقق من www.example.com يفعل المحلِّل ما يلي:

  1. يستخدم مرساة ثقة الجذر للتحقق من مجموعة DNSKEY الخاصة بالجذر.
  2. يتحقق من سجل DS الموقَّع الخاص بـ com في منطقة الجذر، ثم يتأكد من أنه يطابق KSK في مجموعة DNSKEY الخاصة بـ com.
  3. يتحقق من سجل DS الموقَّع الخاص بـ example.com في منطقة com، ثم يتأكد من أنه يطابق KSK الذي تنشره example.com.
  4. يستخدم مجموعة DNSKEY الخاصة بـ example.com للتحقق من RRSIG على سجلات A الخاصة بـ www.example.com.

إذا اجتازت كل الحلقات التحقق فالإجابة آمنة (secure). وإذا لم يكن لدى المنطقة الأم سجل DS للمنطقة، فالمنطقة غير مؤمَّنة (insecure، أي غير موقَّعة) وتُعاد الإجابة كالمعتاد. وإذا وُجد DS لكن التوقيعات لا تجتاز التحقق، فالإجابة زائفة (bogus).

كيف يبدو التحقق: AD وSERVFAIL

عندما يتحقق محلِّل متحقِّق من إجابة بنجاح، يضبط العلامة AD (البيانات الموثَّقة، Authenticated Data) في الاستجابة. ويمكنك رؤيتها بالأداة dig:

$ dig +dnssec www.example.com A @1.1.1.1

;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; ANSWER SECTION:
www.example.com.  300  IN  A      192.0.2.10
www.example.com.  300  IN  RRSIG  A 13 3 300 20261101000000 20261011000000 12345 example.com. (signature data)

وعندما يفشل التحقق لا يعيد المحلِّل البيانات المحتمل أنها مزوَّرة. بل يعيد SERVFAIL، وهو يبدو للمستخدمين مثل موقع غير موجود أو انقطاع في DNS. وللتأكد من أن DNSSEC هو السبب، كرّر الاستعلام مع تعطيل الفحص:

dig www.example.com A           # status: SERVFAIL
dig +cd www.example.com A       # status: NOERROR, answer returned

إذا نجح استعلام +cd (تعطيل الفحص) وفشل الاستعلام العادي، فإن DNSSEC في المنطقة معطوب. تجري أداة فحص DNSSEC لدينا هذه الفحوص نيابةً عنك وتعرض حالة DS وDNSKEY والتوقيعات.

أشيع أسباب تعطّل DNSSEC

تغيير مزوّد DNS دون إزالة سجل DS

هذا هو الإخفاق الكلاسيكي. فسجل DS لدى جهة السجل (registry) ما زال يشير إلى KSK الخاص بالمزوّد القديم. وبعد تغيير خوادم الأسماء، يقدّم المزوّد الجديد المنطقة غير موقَّعة أو يوقّعها بمفاتيح مختلفة. فتجد المحلِّلات المتحقِّقة سجل DS بلا مفتاح مطابق، فتعدّ المنطقة زائفة، ويعيد كل بحث SERVFAIL.

وهكذا يبدو الترحيل الآمن:

  1. احذف سجل DS لدى المسجّل.
  2. انتظر حتى تنتهي صلاحية سجل DS القديم من الذاكرات المؤقتة: مدةً لا تقل عن TTL الخاص بسجل DS في المنطقة الأم، ويمكنك رؤيتها بالأمر dig example.com DS. والانتظار يومًا أو يومين هامش أمان شائع.
  3. غيّر خوادم الأسماء إلى المزوّد الجديد وانتظر انتهاء صلاحية سجلات NS القديمة.
  4. فعّل DNSSEC لدى المزوّد الجديد وانشر سجل DS الجديد الخاص به لدى المسجّل.

يدعم بعض المزوّدين إعدادًا متعدد الموقِّعين (multi-signer) يتجنب الفترة غير الموقَّعة، لكنه يتطلب تعاونًا بين المزوّدين كليهما.

التوقيعات المنتهية الصلاحية

لكل RRSIG وقت انتهاء. وإذا توقفت عملية التوقيع، كما في خادم مستضاف ذاتيًا فشلت فيه مهمة إعادة التوقيع، فستنتهي صلاحية التوقيعات في النهاية وتصير المنطقة زائفة.

تدوير المفاتيح بسرعة كبيرة

إزالة مفتاح قديم قبل أن تلتقط الذاكرات المؤقتة المفتاح الجديد تسبب إخفاقات في المحلِّلات التي ما زالت تحتفظ بمجموعة DNSKEY القديمة أو بسجل DS القديم. ويجب أن يحترم التدوير قيم TTL المعنية.

كيفية تفعيل DNSSEC لنطاقك

  1. تأكد من أن نطاقك العلوي (TLD) يدعم DNSSEC؛ فمعظم النطاقات العامة وكثير من نطاقات الدول تدعمه.
  2. شغّل توقيع DNSSEC لدى مزوّد استضافة DNS الخاص بك. سيولّد المفاتيح ويوقّع المنطقة.
  3. انسخ تفاصيل سجل DS (وسم المفتاح والخوارزمية ونوع الملخّص والملخّص) إلى إعدادات DNSSEC لدى المسجّل. وإذا كان المزوّد والمسجّل شركة واحدة فغالبًا ما يتم ذلك تلقائيًا، وتلتقط بعض جهات السجل (registries) سجلات CDS تلقائيًا.
  4. تحقق من النتيجة باستخدام أداة فحص DNSSEC لدينا، وتأكد من أن عمليات البحث العادية ما زالت تعمل باستخدام البحث في DNS.

الأسئلة الشائعة

هل يشفّر DNSSEC استعلامات DNS الخاصة بي؟

لا. يوفّر DNSSEC الأصالة وسلامة البيانات، لا الخصوصية. فالاستعلامات والإجابات تظل مرئية على الشبكة. أما التشفير فيأتي من DNS عبر TLS أو DNS عبر HTTPS، وهما يكمّلان DNSSEC.

هل أحتاج إلى DNSSEC إذا كان موقعي يستخدم HTTPS؟

تمنع شهادات HTTPS بالفعل إجابة DNS مزوَّرة من انتحال موقعك بصمت، لكن DNSSEC يحمي أيضًا توجيه البريد وسجلات TXT المستخدمة في التحقق وسجلات أخرى. وهو مطلوب كذلك لـ DANE الذي ينشر معلومات شهادة TLS في DNS.

لماذا يعمل نطاقي على بعض الشبكات دون غيرها؟

إذا كان DNSSEC معطوبًا فإن المحلِّلات المتحقِّقة وحدها تعيد SERVFAIL؛ أما غير المتحقِّقة فتواصل الإجابة. ولهذا يبدو الانقطاع وكأنه يعتمد على الشبكة.

كيف أوقف DNSSEC بأمان؟

احذف سجل DS لدى المسجّل أولًا، وانتظر انتهاء صلاحيته من الذاكرات المؤقتة، ثم أوقف توقيع المنطقة. أما عكس هذا الترتيب فيسبب انقطاعًا.

جرّبها بنفسك

طبّق هذا الدليل عمليًا باستخدام أدواتنا المجانية.

تابع القراءة

تم النسخ إلى الحافظة