DNS için güvenli aktarımlar

Geleneksel DNS sorguları ve yanıtları, şifreleme olmadan UDP veya TCP üzerinden gönderilir bu tür cihazlar gözetim, adres sahteciliği ve DNS tabanlı internet filtrelemesine tabi tutulabilir. Google Açık DNS gibi herkese açık çözümleyicilerin istemcilere verdiği yanıtlar özellikle Mesajlar birçok ağdan geçebileceği için bu güvenlik açığı özyinelemeli çözümleyiciler ve yetkili alan adı sunucuları arasındaki ek korumalar kullanabilirsiniz.

Bu sorunları gidermek için 2016'da HTTPS üzerinden DNS'yi kullanıma sunduk (şimdiki adıyla DoH) HTTPS ve QUIC üzerinden DNSSEC doğrulamalı DNS çözümlemesi olanağı sunar. 2019'da, Android Gizli DNS özelliği.

DoH ve DoT, istemciler ve çözümleyiciler arasındaki gizliliği ve güvenliği artırır. uçtan uca hizmet sunmak için DNSSEC'nin Google Herkese Açık DNS doğrulamasını tamamlama DNSSEC imzalı alanlar için kimliği doğrulanmış DNS Google Açık DNS ile Hem DoH hem de DoH için hızlı, gizli ve güvenli DNS çözümlemesi sağlamayı taahhüt eder DoT istemcileri.

Desteklenen TLS sürümleri ve şifreleme paketleri

Google Açık DNS, hem DoH hem de DoT için TLS 1.2 ve TLS 1.3'ü destekler; daha önce yok TLS veya SSL sürümleri desteklenir. Yalnızca yönlendirme güvenliği bulunan şifre paketleri ve Ek Veri İçeren Kimliği Doğrulanmış Şifreleme (AEAD) desteklenir. Qualys SSL Labs, desteklenen şifre paketi grubunu gösterir.

Uç noktalar

Google Açık DNS, DoH ve DoT için aşağıdaki uç noktaları kullanır:

DoT (853 numaralı bağlantı noktası) dns.google

DoH (bağlantı noktası 443) URI şablonları

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

    • POST için URL yalnızca https://dns.google/dns-query ve gövdesidir HTTP isteği, içerik türüne sahip ikili UDP DNS yüküdür application/dns-message.
    • GET için https://dns.google/dns-query?dns=BASE64URL_OF_QUERY şeklindedir.
  • JSON API'si - https://dns.google/resolve{?name}{&type,cd,do,…}

    • Diğer GET parametreleri JSON API sayfası. Yalnızca name parametresi gereklidir.

Müşteriler

DoT veya DoH kullanan birkaç istemci uygulaması vardır

  • Android 9 (Pie) "Gizli Tarama" özelliği - DoT
  • Intra (Android uygulaması) – DoH

dnsprivacy.org web sitesi, DoT ve DoH için başka birçok istemciyi listelese de, bunlar için genelde orta düzeyde teknik yapılandırma gerekir.

Komut satırı örnekleri

Aşağıdaki komut satırı örnekleri, gerçek bir istemcide kullanılmak üzere tasarlanmamıştır ve yalnızca yaygın olarak kullanılan teşhis araçlarının kullanımı çizimleridir.

DoT

Aşağıdaki komutlar için Knot DNS kdig 2.3.0 veya sonraki bir sürüm gereklidir; 2.7.4 veya daha sonra, TLS 1.3'ün gerektirdiği şekilde SNI göndermek için +tls‑sni öğesinin açıklamasını kaldırın.

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 POST

Bu komuttaki Base64Url kodlamalı dize, Önerilen şekilde, DNS kimliği alanı sıfır olarak ayarlanmış dig +noedns example.test A RFC 8484 bölüm 4.1 tarafından desteklenmektedir. Kabuk komutu, bu DNS sorgusunu ikili veri gövdesi içeriğini kullanarak application/dns-message İçerik Türü'nü kullanır.

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 GETİRİ

Bu komuttaki Base64Url kodlamalı dize, DNS kimliği alanı sıfır olarak ayarlanmış dig +noedns example.com A. Bu durumda, olup olmadığına bakın.

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İRİ

Bu, DoH için JSON API'yi kullanır.

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":[]}

IP adresi URL'leri için TLS 1.3 ve SNI

TLS 1.3, istemcilerin Sunucu Adı Kimliği (SNI) sağlamanız gerekir.

SNI uzantısı, SNI bilgilerinin bir DNS alanı olduğunu (IP adresi değil) belirtir:

"Ana Makine Adı" sunucunun tam DNS ana makine adını içeriyorsa, anladığınızdan emin olun. Ana makine adı bir bayt dizesi olarak gösterilir nokta olmadan ASCII kodlamasını kullanıyor. Bu sayede ekip üyeleri kullanarak uluslararası hale getirilmiş alan adlarını RFC5890'a gidin. DNS ana makine adları büyük/küçük harfe duyarlı değildir. Karşılaştırılacak algoritma ana makine adları RFC5890, Bölüm 2.3.2.4'te açıklanmaktadır.

"HostName" içinde tam IPv4 ve IPv6 adreslerine izin verilmez.

Program yönetiminden yararlanmak isteyen DoH veya DoT TLS 1.3'teki güvenlik iyileştirmelerinden yararlanabilirsiniz. Şu anki Google Açık DNS'si SNI sağlamayan TLS 1.3 bağlantılarını kabul eder ancak işle ilgili veya güvenlikle ilgili nedenlerden dolayı bu başvuruları kabul etmeyin.

SNI ile ilgili DoT veya DoH başvuruları için önerilerimiz şunlardır:

  1. Google Public'e tüm bağlantılar için dns.google ana makine adını SNI olarak gönderin DNS DoT veya DoH hizmetleri.
  2. Kullanılabilir ana makine adı yoksa (örneğin, fırsat noktası noktası noktası) olarak değiştirmeyi tercih ederseniz, IP adresini SNI yerine SNI'da boş bırakmak daha iyi olabilir.
  3. IPv6 adresleri köşeli parantez içinde [2001:db8:1234::5678] biçiminde görünmelidir Host üstbilgisini kullanın ancak SNI'da köşeli parantezler kullanmayın.

DNS Yanıtı Kesme

Google Açık DNS genellikle DoT ve DoH'ye verilen yanıtları kısaltmaz. iki durum söz konusudur:

  1. Google Açık DNS, yetkili alan adı sunucularını kullandığında yanıtta TC işaretini belirler.

  2. DNS yanıtının (ikili DNS mesajı biçiminde) TCP DNS iletileri için 64 KiB sınırını aşarsa Google Açık DNS RFC standartları gerektiriyorsa TC (kısaltma) işaretini kullanın.

Ancak, bu durumlarda istemcilerin düz TCP kullanarak yeniden denemesine gerek yoktur çünkü bu sonuç aynı olacaktır.