عمليات النقل الآمنة لنظام أسماء النطاقات

يتم إرسال استعلامات وردود نظام أسماء النطاقات (DNS) التقليدية عبر بروتوكول UDP أو TCP بدون تشفير، مما يجعلها خاضعة للمراقبة والانتحال وتصفية الإنترنت المستندة إلى نظام أسماء النطاقات. تكون الردود على العملاء من برامج التعيين العامة مثل نظام أسماء النطاقات العام من Google خاصة عرضة للخطر، حيث إن الرسائل قد تمر عبر العديد من الشبكات، كما أن الرسائل بين برامج التعيين المتكررة وخوادم الأسماء الموثوقة غالبًا ما تتضمن إجراءات الحماية الإضافية

لمعالجة هذه المشاكل، أطلقنا نظام أسماء النطاقات عبر بروتوكول HTTPS في عام 2016 (يُعرف الآن باسم DoH) توفير حلّ مشفّر لنظام أسماء النطاقات للتحقّق من مصداقية ملحقات أمان نظام أسماء النطاقات (DNSSEC) من خلال HTTPS وQUIC. وفي عام 2019، أضفنا دعمًا لمعيار نظام أسماء النطاقات عبر بروتوكول أمان طبقة النقل (DoT) الذي يستخدمه ميزة نظام أسماء النطاقات الخاص في Android.

تعمل إدارة الاتصالات وإدارة الاتصالات على تحسين الخصوصية والأمان بين العملاء وبرامج التعيين، استكمال عملية التحقق من نظام أسماء النطاقات العامة من Google لملحقات أمان نظام أسماء النطاقات (DNSSEC) لتوفير حلول شاملة نظام أسماء النطاقات الذي تمت مصادقته للنطاقات المُوقَّعة باستخدام ملحقات أمان نظام أسماء النطاقات (DNSSEC) باستخدام نظام أسماء النطاقات العام من Google، نلتزم بتوفير حل سريع وخاص وآمن لنظام أسماء النطاقات لكل من وزارة الصحة عملاء DoT.

إصدارات بروتوكول أمان طبقة النقل (TLS) ومجموعات التشفير المتوافقة

يتوافق نظام أسماء النطاقات العام من Google مع TLS 1.2 وTLS 1.3 لكل من DoH وDoT. لا قبل يتم دعم إصدارات بروتوكول أمان طبقة النقل أو طبقة مأخذ التوصيل الآمنة. مجموعات الرموز فقط مع أمان إعادة التوجيه وميزتا "التشفير المُصدَّق عليه باستخدام البيانات الإضافية" (AEAD) تعرض الميزات الاختبارية لطبقة المقابس الآمنة في Qualys المجموعة الحالية من مجموعات الرموز المتوافقة.

نقاط النهاية

يستخدم "نظام أسماء النطاقات العام من Google" نقطتَي النهاية التاليتَين لإدارة النقل في الوقت الفعلي (DoH) وقسم "إدارة الاتصالات" (DoT):

DoT (المنفذ 853) dns.google

نماذج معرّف الموارد المنتظم (URI) DoH (المنفذ 443)

  • RFC 8484 – https://dns.google/dns-query{?dns}

    • بالنسبة إلى طريقة POST، يكون عنوان URL هو https://dns.google/dns-query فقط ونص يكون طلب HTTP هو حمولة بيانات نظام أسماء نطاقات UDP الثنائية مع نوع المحتوى application/dns-message.
    • للحصول على هذا، يُرجى إدخال https://dns.google/dns-query?dns=BASE64URL_OF_QUERY.
  • JSON API – https://dns.google/resolve{?name}{&type,cd,do,…}

    • يتم توضيح المزيد من معلمات GET في JSON API. مطلوب مَعلمة name فقط.

العملاء

هناك عدد من تطبيقات العميل التي تستخدم DoT أو DoH

  • Android 9 (Pie) ميزة "التصفّح بخصوصية تامة" – DoT
  • Intra (تطبيق Android) – DoH

يدرج موقع الويب dnsprivacy.org العديد من البرامج الأخرى لإدارة الاتصالات وDoH، ولكن عادةً ما تتطلب تهيئة تقنية معتدلة.

أمثلة على سطر الأوامر

أمثلة سطر الأوامر التالية غير مخصصة للاستخدام في برنامج فعلي. وهي ليست سوى صور توضيحية تستخدم أدوات تشخيصية شائعة الاستخدام.

DoT

تتطلب الأوامر التالية الإصدار 2.3.0 من Knot DNS kdig أو إصدار أحدث، مع 2.7.4 أو في وقت لاحق، عليك إلغاء تعليق +tls‑sni لإرسال SNI حسبما يتطلبه الإصدار 1.3 من بروتوكول أمان طبقة النقل.

kdig -d +noall +answer @dns.google example.com \
  +tls-ca +tls-hostname=dns.google # +tls-sni=dns.google
;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(dns.google), port(853), protocol(TCP)
;; DEBUG: TLS, imported 312 system certificates
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG:  #1, C=US,ST=California,L=Mountain View,O=Google LLC,CN=dns.google
;; DEBUG:      SHA-256 PIN: lQXSLnWzUdueQ4+YCezIcLa8L6RPr8Wgeqtxmw1ti+M=
;; DEBUG:  #2, C=US,O=Google Trust Services,CN=Google Internet Authority G3
;; DEBUG:      SHA-256 PIN: f8NnEFZxQ4ExFOhSN7EiFWtiudZQVD2oY60uauV/n78=
;; DEBUG: TLS, skipping certificate PIN check
;; DEBUG: TLS, The certificate is trusted.

;; ANSWER SECTION:
example.com.            2046    IN      A       93.184.216.34
kdig -d +noall +answer @dns.google example.com \
  +tls-pin=f8NnEFZxQ4ExFOhSN7EiFWtiudZQVD2oY60uauV/n78= \
  # +tls-sni=dns.google
;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(dns.google), port(853), protocol(TCP)
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG:  #1, C=US,ST=California,L=Mountain View,O=Google LLC,CN=dns.google
;; DEBUG:      SHA-256 PIN: lQXSLnWzUdueQ4+YCezIcLa8L6RPr8Wgeqtxmw1ti+M=
;; DEBUG:  #2, C=US,O=Google Trust Services,CN=Google Internet Authority G3
;; DEBUG:      SHA-256 PIN: f8NnEFZxQ4ExFOhSN7EiFWtiudZQVD2oY60uauV/n78=, MATCH
;; DEBUG: TLS, skipping certificate verification

;; ANSWER SECTION:
example.com.            5494    IN      A       93.184.216.34

DoH

طلب POST لـ RFC 8484

وتكون سلسلة Base64Url المرمّزة في هذا الأمر هي رسالة نظام أسماء النطاقات التي يتم إرسالها بواسطة dig +noedns example.test A مع ضبط حقل معرّف نظام أسماء النطاقات على صفر، على النحو المقترَح حسب الفقرة 4.1 من معيار RFC 8484. يرسل أمر Shell استعلام DNS هذا محتوى نص البيانات الثنائية، باستخدام نوع المحتوى application/dns-message.

echo AAABAAABAAAAAAAAB2V4YW1wbGUEdGVzdAAAAQAB | base64 --decode |
 curl -is --data-binary @- -H 'content-type: application/dns-message' \
   https://dns.google/dns-query
HTTP/2 200
strict-transport-security: max-age=31536000; includeSubDomains; preload
access-control-allow-origin: *
date: Wed, 29 May 2019 19:37:16 GMT
expires: Wed, 29 May 2019 19:37:16 GMT
cache-control: private, max-age=19174
content-type: application/dns-message
server: HTTP server (unknown)
content-length: 45
x-xss-protection: 0
x-frame-options: SAMEORIGIN
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"

الحصول على RFC 8484

وتكون سلسلة Base64Url المرمّزة في هذا الأمر هي رسالة نظام أسماء النطاقات التي يتم إرسالها بواسطة dig +noedns example.com A مع ضبط حقل معرّف نظام أسماء النطاقات على صفر. في هذه الحالة، يتم تمريرها بشكل صريح في عنوان URL.

curl -i https://dns.google/dns-query?dns=AAABAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE
HTTP/2 200
strict-transport-security: max-age=31536000; includeSubDomains; preload
access-control-allow-origin: *
date: Wed, 29 May 2019 19:37:16 GMT
expires: Wed, 29 May 2019 19:37:16 GMT
cache-control: private, max-age=19174
content-type: application/dns-message
server: HTTP server (unknown)
content-length: 45
x-xss-protection: 0
x-frame-options: SAMEORIGIN
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"

JSON GET

يستخدم هذا JSON API for DoH.

curl -i 'https://dns.google/resolve?name=example.com&type=a&do=1'
HTTP/2 200
strict-transport-security: max-age=31536000; includeSubDomains; preload
access-control-allow-origin: *
date: Thu, 30 May 2019 02:46:46 GMT
expires: Thu, 30 May 2019 02:46:46 GMT
cache-control: private, max-age=10443
content-type: application/x-javascript; charset=UTF-8
server: HTTP server (unknown)
x-xss-protection: 0
x-frame-options: SAMEORIGIN
alt-svc: quic=":443"; ma=2592000; v="46,44,43,39"
accept-ranges: none
vary: Accept-Encoding

{"Status": 0,"TC": false,"RD": true,"RA": true,"AD": true,"CD": false,"Question":[ {"name": "example.com.","type": 1}],"Answer":[ {"name": "example.com.","type": 1,"TTL": 10443,"data": "93.184.216.34"},{"name": "example.com.","type": 46,"TTL": 10443,"data": "a 8 2 86400 1559899303 1558087103 23689 example.com. IfelQcO5NqQIX7ZNKI245KLfdRCKBaj2gKhZkJawtJbo/do+A0aUvoDM5A7EZKcF/j8SdtyfYWj/8g91B2/m/WOo7KyZxIC918R1/jvBRYQGreDL+yutb1ReGc6eUHX+NKJIYqzfal+PY7tGotS1Srn9WhBspXq8/0rNsEnsSoA="}],"Additional":[]}

TLS 1.3 وSNI لعناوين URL لعناوين IP

يتطلب بروتوكول أمان طبقة النقل (TLS) 1.3 أن تكون البرامج توفير تعريف اسم الخادم (SNI).

تحدّد إضافة SNI أن معلومات SNI هي نطاق نظام أسماء نطاقات (وليس عنوان IP):

"HostName" (اسم المضيف) يحتوي على اسم مضيف نظام أسماء النطاقات المؤهل بالكامل للخادم، كما يفهمه العميل. يتم تمثيل اسم المضيف كسلسلة بايت. باستخدام ترميز ASCII بدون نقطة لاحقة. يسمح هذا بدعم أسماء النطاقات الدولية من خلال استخدام التصنيفات A المحددة في RFC5890: أسماء المضيفين لنظام أسماء النطاقات غير حساسة لحالة الأحرف. الخوارزمية المطلوب المقارنة يتم وصف أسماء المضيفين في RFC5890، القسم 2.3.2.4.

عناوين IPv4 وIPv6 الحرفية غير مسموح بها في "HostName" (اسم المضيف).

وقد يصعُب تلبية هذه المتطلبات في تطبيقات إدارة الاتصالات (DoH) أو إدارة الاتصالات (DoT) التي تريد الاستفادة من تحسينات الأمان في TLS 1.3. نظام أسماء النطاقات العام من Google حاليًا تقبل اتصالات TLS 1.3 التي لا توفر SNI، ولكننا قد نحتاج إلى تغيير هذا لأسباب تشغيلية أو أمنية في المستقبل.

في ما يلي اقتراحاتنا بشأن تطبيقات إدارة الاتصالات أو وزارة الصحة بشأن إشارة اسم الخادم (SNI):

  1. إرسال اسم المضيف dns.google كإشارة اسم الخادم (SNI) لأي اتصالات مع منتدى Google العام خدمات DNS DoT أو DoH.
  2. في حال عدم توفُّر اسم مضيف (على سبيل المثال، في أحد التطبيقات التي تُجري هذا DoT)، فمن الأفضل إرسال عنوان IP في إشارة اسم الخادم (SNI) بدلاً من من تركه فارغًا.
  3. يجب أن تظهر عناوين الإصدار 6 من بروتوكول IP في شكل [2001:db8:1234::5678] بين قوسين: عنوان Host، ولكن بدون أقواس في إشارة اسم الخادم (SNI).

اقتطاع استجابة نظام أسماء النطاقات

على الرغم من أن نظام أسماء النطاقات العام من Google لا يقتطع استجابات DoT وDoH بشكل عام طلبات البحث، فهناك حالتان عند ذلك:

  1. إذا تعذّر على نظام أسماء النطاقات العام من Google الحصول على استجابات كاملة وغير مقتطعة من لخوادم الأسماء الموثوقة، فإنها تضع علامة الموافقة والشفافية في الرد.

  2. في الحالات التي قد يبدو فيها استجابة نظام أسماء النطاقات (في نموذج رسالة نظام أسماء النطاقات الثنائي) إذا تم تجاوز حد 64 كيبيبايت لرسائل نظام أسماء النطاقات لبروتوكول التحكم في الإرسال (TCP)، فقد يضبط نظام أسماء النطاقات العام من Google علامة TC (الاقتطاع) إذا كانت معايير RFC تتطلب ذلك.

ومع ذلك، في هذه الحالات، ليست هناك حاجة إلى أن تعيد البرامج المحاولة باستخدام بروتوكول التحكم بالنقل العادي (TCP). أو أي وسيلة نقل أخرى، لأنّ النتيجة ستكون هي نفسها.