डीएनएस के लिए सुरक्षित ट्रांसपोर्ट

पारंपरिक डीएनएस क्वेरी और जवाबों को यूडीपी या टीसीपी पर बिना एन्क्रिप्शन के भेजा जाता है, उन्हें निगरानी, स्पूफ़िंग, और डीएनएस-आधारित इंटरनेट फ़िल्टर के दायरे में लाना. Google की सार्वजनिक डीएनएस सेवा जैसे पब्लिक रिज़ॉल्वर से, क्लाइंट को मिलने वाले जवाब खास तौर पर के लिए खतरा हो सकता है, क्योंकि मैसेज कई नेटवर्क से होकर गुज़र सकते हैं. बार-बार होने वाले रिज़ॉल्वर और आधिकारिक नेम सर्वर के बीच अक्सर अतिरिक्त सुरक्षा.

इन समस्याओं को हल करने के लिए, हमने 2016 में डीएनएस-ओवर-एचटीटीपीएस को लॉन्च किया. इसे अब डीओएच कहा जाता है यह सुविधा, एचटीटीपीएस और QUIC पर एन्क्रिप्ट (सुरक्षित) किए गए डीएनएसएसईसी की पुष्टि करने वाले डीएनएस रिज़ॉल्यूशन की सुविधा देती है. साथ ही, 2019 में हमने डीएनएस-ओवर-टीएलएस (DoT) स्टैंडर्ड के लिए सहायता की सुविधा जोड़ी थी. इस स्टैंडर्ड का इस्तेमाल Android की निजी डीएनएस सुविधा.

DoH और DoT, क्लाइंट और रिज़ॉल्वर के बीच निजता और सुरक्षा को बेहतर बनाते हैं. शुरू से आखिर तक डीएनएसएसईसी के लिए, Google की सार्वजनिक डीएनएस की पुष्टि को पूरा करना डीएनएसएसईसी से हस्ताक्षर किए गए डोमेन के लिए, पुष्टि किया गया डीएनएस. Google की सार्वजनिक डीएनएस सेवा का इस्तेमाल करके, हम DoH और Google, दोनों के लिए तेज़, निजी, और सुरक्षित डीएनएस रिज़ॉल्यूशन उपलब्ध कराने के लिए प्रतिबद्ध है DoT क्लाइंट.

काम करने वाले TLS वर्शन और क्रिप्टो सुइट

Google की सार्वजनिक डीएनएस सेवा, DoH और DoT, दोनों के लिए TLS 1.2 और TLS 1.3 के साथ काम करती है; पहले नहीं TLS या SSL के वर्शन समर्थित हैं. सिर्फ़ आगे की सुरक्षा वाले साइफ़र सुइट और अतिरिक्त डेटा (AEAD) के साथ पुष्टि किया गया एन्क्रिप्शन काम करता है. Qualys SSL Labs, काम करने वाले साइफ़र सुइट का मौजूदा सेट दिखाता है.

एंडपॉइंट

Google की सार्वजनिक डीएनएस सेवा, DoH और DoT के लिए इन एंडपॉइंट का इस्तेमाल करती है:

DoT (पोर्ट 853) dns.google

DoH (पोर्ट 443) यूआरआई टेंप्लेट

  • आरएफ़सी 8484 – https://dns.google/dns-query{?dns}

    • पीओएसटी के लिए यूआरएल सिर्फ़ https://dns.google/dns-query है और इसका मुख्य हिस्सा एचटीटीपी अनुरोध, कॉन्टेंट टाइप वाला बाइनरी यूडीपी डीएनएस पेलोड है application/dns-message.
    • जीईटी के लिए यह https://dns.google/dns-query?dns=BASE64URL_OF_QUERY है.
  • JSON API – https://dns.google/resolve{?name}{&type,cd,do,…}

    • जीईटी पैरामीटर के बारे में यहां बताया गया है: JSON API पेज. सिर्फ़ name पैरामीटर ज़रूरी है.

क्लाइंट

ऐसे कई क्लाइंट ऐप्लिकेशन हैं जो DoT या DoH का इस्तेमाल करते हैं

  • Android 9 (Pie) “निजी ब्राउज़िंग” की सुविधा – DoT
  • Intra (Android ऐप्लिकेशन) – DoH

dnsprivacy.org की वेबसाइट पर DoT और DoH के कई अन्य क्लाइंट की सूची मौजूद है, लेकिन आम तौर पर, इनके लिए कुछ तकनीकी कॉन्फ़िगरेशन की ज़रूरत होती है.

कमांड लाइन के उदाहरण

नीचे दिए गए कमांड लाइन के उदाहरण, असल क्लाइंट में इस्तेमाल करने के लिए नहीं हैं और सिर्फ़ उदाहरण के तौर पर पेश हैं. इनमें आम तौर पर उपलब्ध डाइग्नोस्टिक टूल का इस्तेमाल किया जाता है.

DoT

इन निर्देशों के लिए, Knot DNS kdig 2.3.0 या इसके बाद के वर्शन की ज़रूरत होती है; 2.7.4 या बाद में, TLS 1.3 के हिसाब से, SNI भेजने के लिए +tls‑sni को अनटिप्पणी करें.

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

आरएफ़सी 8484 पोस्ट

इस निर्देश में, Base64Url से कोड में बदली गई स्ट्रिंग, वह डीएनएस मैसेज है जिसे इन्होंने भेजा है dig +noedns example.test A में, डीएनएस आईडी फ़ील्ड को शून्य पर सेट किया गया है. हमारा सुझाव है कि आरएफ़सी 8484 के सेक्शन 4.1 के मुताबिक. शेल कमांड उस 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"

आरएफ़सी 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 एपीआई का इस्तेमाल करता है.

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

TLS 1.3 के लिए ज़रूरी क्लाइंट सर्वर नेम आइडेंटिफ़िकेशन (SNI) उपलब्ध कराएं.

SNI एक्सटेंशन बताता है कि SNI जानकारी एक DNS डोमेन है (न कि कोई IP पता):

"होस्टनेम" इसमें सर्वर का पूरी तरह क्वालिफ़ाइड डीएनएस होस्टनेम होता है, जो क्लाइंट की समझ में आएगा. होस्टनेम को बाइट स्ट्रिंग के तौर पर दिखाया गया है बिना किसी पीछे के बिंदु के ASCII एन्कोडिंग का उपयोग करके. इससे आपको विज्ञापन देने वालों को, इसमें परिभाषित A-लेबल के इस्तेमाल के ज़रिए अंतरराष्ट्रीय डोमेन नाम RFC5890. डीएनएस होस्टनेम, केस-इनसेंसिटिव होते हैं. तुलना करने के लिए एल्गोरिदम होस्टनेम की जानकारी RFC5890, सेक्शन 2.3.2.4 में दी गई है.

"HostName" में, सही आईपीवी4 और आईपीवी6 पते इस्तेमाल करने की अनुमति नहीं है.

इन शर्तों को पूरा करना उन DoH या DoT ऐप्लिकेशन के लिए मुश्किल हो सकता है जो TLS 1.3 में सुरक्षा सुधारों का लाभ उठाएं. फ़िलहाल, Google की सार्वजनिक डीएनएस सेवा उन TLS 1.3 कनेक्शन को स्वीकार करता है जो SNI उपलब्ध नहीं कराते, लेकिन हमें इसे बदलना पड़ सकता है सुरक्षा से जुड़ी वजहों से ऐसा किया जा सकता है.

SNI के बारे में DoT या DoH ऐप्लिकेशन के लिए, हमारे सुझाव ये हैं:

  1. Google सार्वजनिक से किसी भी कनेक्शन के लिए dns.google होस्टनेम को SNI के रूप में भेजें DNS DoT या DoH सेवाएं.
  2. अगर कोई होस्टनेम उपलब्ध नहीं है (उदाहरण के लिए, किसी ऐसे ऐप्लिकेशन में जो अवसरवादी DoT), तो SNI में आईपी पता भेजना बेहतर है उसे खाली छोड़ दें.
  3. IPv6 पते, [2001:db8:1234::5678] ब्रैकेट में इस तरह दिखने चाहिए Host हेडर को कॉपी करता है, लेकिन SNI में ब्रैकेट के बिना.

डीएनएस रिस्पॉन्स में काट-छांट

हालांकि, Google की सार्वजनिक डीएनएस सेवा, आम तौर पर DoT और DoH के जवाबों में काट-छांट नहीं करती हैं है, तो दो स्थितियों में ऐसा होता है:

  1. अगर Google की सार्वजनिक डीएनएस सेवा को, भरोसेमंद नेम सर्वर के साथ काम करता है, तो यह रिस्पॉन्स में टीसी फ़्लैग सेट करता है.

  2. ऐसे मामलों में जहां डीएनएस रिस्पॉन्स (बाइनरी डीएनएस मैसेज फ़ॉर्म में) अगर टीसीपी डीएनएस मैसेज के लिए 64 केआईबी की सीमा पार हो गई है, तो Google सार्वजनिक डीएनएस टीसी (काट-छांट) फ़्लैग.

हालांकि, इन मामलों में क्लाइंट को, सादा टीसीपी का इस्तेमाल करके फिर से कोशिश करने की ज़रूरत नहीं पड़ती या किसी अन्य ट्रांसपोर्ट में भी साइन इन कर सकते हैं, क्योंकि नतीजा एक जैसा ही होगा.