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

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

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

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

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

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

نقاط النهاية

يستخدم "نظام أسماء النطاقات العام من Google" نقطتَي النهاية التاليتَين لكل من وزارة الصحة وإدارة الاتصالات:

DoT (منفذ 853) dns.google

DoH (منفذ 443) نماذج URI

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

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

العملاء

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

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

يدرج الموقع الإلكتروني dnsprivacy.org قائمة بالعديد من العملاء الآخرين التابعَين لإدارة الاتصالات ووزارة الصحة، ولكن هذه البرامج عادةً ما تتطلّب إعدادًا تقنيًا إلى حدٍّ كبير.

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

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

DoT

تتطلّب الأوامر التالية توفُّر الإصدار 2.3.0 من Knot DNS kdig أو إصدار أحدث. أما في الإصدار 2.7.4 أو ما بعده، فألغِ التعليق على +tls‑sni لإرسال SNI كما هو مطلوب في TLS 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

نشر RFC 8484

سلسلة Base64Url المشفرة في هذا الأمر هي رسالة نظام أسماء النطاقات المُرسَلة من dig +noedns example.test A مع ضبط حقل "معرّف نظام أسماء النطاقات" على صفر، على النحو المقترَح من القسم 4.1 من RFC 8484. يرسل الأمر Shell طلب بحث نظام أسماء النطاقات هذا كمحتوى لنص البيانات الثنائية، وذلك باستخدام نوع المحتوى 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

سيؤدي ذلك إلى استخدام واجهة برمجة التطبيقات JSON API لـ 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":[]}

الإصدار 1.3 من TLS وSNI لعناوين URL الخاصة بعناوين IP

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

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

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

لا يُسمح بعناوين IPv4 وIPv6 البسيطة في "HostName".

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

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

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

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

على الرغم من أنّ "نظام أسماء النطاقات العام من Google" لا يقطع الردود بشكل عام إلى استفسارات إدارة الاتصالات وقسم (DoH)، هناك حالتان يحدثان فيهما:

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

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

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