dig コマンドはDoHに対応しています。
dig t.co @dns.google +https
dig コマンドは DoTに対応しています。
dig t.co @dns.google +tls
活用例: DNSがDNATで捻じ曲げられててないかどうか。調べる
DoT/DoHを使えば、TLSになる。通信開始前に、CA証明書を使って通信相手を検証が可能になり、TLS通信開始後に暗号化することで改竄が不可能になる。
つまり、DNS問い合わせが捻じ曲げれてないかを「検出」できるようになるわけです。
dig t.co @dns.google +https dig t.co @dns.google +tls
すると、証明書の検出が走るので、ただしい結果を得ることができる。
次のコマンドで結果を比較すると、だいたい分かる。
dig t.co @dns.google +https dig t.co @dns.google +tls dig t.co @dns.google +tcp dig t.co @dns.google
HTTP:443や、TLS:853で、通信したり、ほかにもTCPで通信してみたりなどで、ある程度の推測が付きそうです。
通信がねじ曲がってると、HTTPSで接続エラーになるはずです。 (8.8.8.8 はudp/53 で応答があるのに、tcp/443 で接続エラーです)
dns.google
と one.one.one.one
はこの点において信用可能な証明書を使っている。
IPアドレスでアクセスでも検証可能だ
1.1.1.1
の証明書のSANを見ると
openssl s_client -connect 1.1.1.1:443 < /dev/null 2> /dev/null | openssl x509 -noout -ext subjectAltName
X509v3 Subject Alternative Name: DNS:cloudflare-dns.com, DNS:*.cloudflare-dns.com, DNS:one.one.one.one, IP Address:1.0.0.1, IP Address:1.1.1.1, IP Address:162.159.36.1, IP Address:162.159.46.1, IP Address:2606:4700:4700:0:0:0:0:1001, IP Address:2606:4700:4700:0:0:0:0:1111, IP Address:2606:4700:4700:0:0:0:0:64, IP Address:2606:4700:4700:0:0:0:0:6400
8.8.8.8.
のsubjectAltNameを見ると
openssl s_client -connect 8.8.8.8:443 < /dev/null 2> /dev/null | openssl x509 -noout -ext subjectAltName
X509v3 Subject Alternative Name: DNS:dns.google, DNS:dns.google.com, DNS:*.dns.google.com, DNS:8888.google, DNS:dns64.dns.google, IP Address:8.8.8.8, IP Address:8.8.4.4, IP Address:2001:4860:4860:0:0:0:0:8888, IP Address:2001:4860:4860:0:0:0:0:8844, IP Address:2001:4860:4860:0:0:0:0:6464, IP Address:2001:4860:4860:0:0:0:0:64
それぞれ以上となっていて、IPアドレスでアクセスしてもTLSで証明書の検証をIPアドレスのSANで見れることがわかる。
DNSは用意に改変され捻じ曲がる
私達の1.1.1.1 / 8.8.8.8
へDNS問い合わせはネットワーク管理者によって書き換えられる可能性がある。
通常は「モラル」があり技術者の良心があり、まずやらない。たかだか通信停止に留めるだろう。
が、DNATをすることで8.8.8.8 への問い合わせを、ローカルDNSに書き換えることも可能である。 なぜなら、DNS queryは暗号化されてないから「改竄」「なりすまし」の検出は不可能であり、DNSは監視され続けることになる。
HTTPSでdigを使うことで、8.8.8.8 がNAT別サーバに流されてないかを検知して安全なDNSか否かを検知できる。