それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

dig コマンドでDoH/DoTする。書換え検出する(本当に8.8.8.8と通信しているか)

dig コマンドはDoHに対応しています。

dns over https で dig を使えます。

dig t.co @dns.google +https

dig コマンドは DoTに対応しています。

dns over tls で dig を使えます。

dig t.co @dns.google +tls

活用例: DNSがDNATで捻じ曲げられててないかどうか。調べる

DoT/DoHを使えば、TLSになる。通信開始前に、CA証明書を使って通信相手を検証が可能になり、TLS通信開始後に暗号化することで改竄が不可能になる。

つまり、DNS問い合わせが捻じ曲げれてないかを「検出」できるようになるわけです。

TLSHTTPSで問い合わせしてみる。

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.googleone.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.8DNS問い合わせはネットワーク管理者によって書き換えられる可能性がある。

通常は「モラル」があり技術者の良心があり、まずやらない。たかだか通信停止に留めるだろう。

が、DNATをすることで8.8.8.8 への問い合わせを、ローカルDNSに書き換えることも可能である。 なぜなら、DNS queryは暗号化されてないから「改竄」「なりすまし」の検出は不可能であり、DNSは監視され続けることになる。

HTTPSでdigを使うことで、8.8.8.8 がNAT別サーバに流されてないかを検知して安全なDNSか否かを検知できる。