DNSとは?
DNSはインターネットとは切っても切れない仕組みですが、真面目に説明すると文字通り電話帳ぐらいの厚さになってしまう程の情報量があります。簡単に説明すると、「www.example.jp」のサーバーがどこにあるのか(IPアドレス)を教えてくれる公開電話帳のようなサービスと言えます。このDNS、主に中継役として利用される「キャッシュサーバー」と、唯一正しい情報を持つ「権威サーバー」に分けられます。説明が長引くので割愛しますが、そのようなサーバーがたくさんあると考えてください。
DNSがなければ、我々はサイトにアクセスする際に「163.43.24.70」といったIPアドレスを使用しなければならず、非常に不便です。また、CNAMEやTXTといったSSLサーバー証明書(以下、SSL証明書)の取得に必要な認証も利用できません。DNSはインターネットに無くてはならない存在になっています。
DNSの危険性
前述の通り、DNSはオープンな電話帳なので、誰(IPアドレス)が何(ドメインの情報)を調べているのか?を暗号化通信ではなく平文で通信しています。当コラムの読者の方であればお気づきかと思いますが、平文では通信に「盗聴・なりすまし・改ざん」の危険が生じます。つまり、あなたがこのページを見ようとした際に名前解決した結果=「ssl.sakura.ad.jpのIPアドレス」をあなたの会社のネットワーク担当者なら見ることはもちろん、改ざんすることもできてしまいます。
「DNSとの通信が改ざんされる」とは、どういうことなのでしょうか。例えば、ssl.sakura.ad.jp のIPアドレスを改ざんすると、全く異なる別のサーバーへ接続させることが可能になります。つまり、DNSとの通信を悪意のある第三者に改ざんされた場合、自分が意図しないサーバーへ接続される可能性が出てきます。さらに、サーバーが異なっているにも関わらず、ブラウザに表示されるドメイン名は本来の「正しいドメイン名」です。もし、サイトの見た目も同じように作られていたら、何も疑うことなくIDとパスワードを入力し、ログインしようとして………はい、IDとパスワードが窃取されてしまうわけですね。
HTTPS通信の安全性
ここでSSL通信のメリットを思い出してください。その1つに「なりすましの防止」があります。DNSとの通信内容が改ざんされて偽物のIPアドレスをつかまされたとしても、そのIPアドレスのサーバーに正規の(この場合は問い合わせたドメインの)SSL証明書が入っていない限り、ブラウザがエラーを表示してサイトにはアクセスできません。ただし、HTTP(平文)でアクセスする場合はこの限りではありませんので注意が必要です。DNS over HTTPSの説明をするつもりが、いつもの癖でSSLの重要性を説明してしまいましたね。
DNS over HTTPSとは?
DNS over HTTPS(以下、DoH)とは、「DNSへの問い合わせ」を平文で通信するのでは無く、HTTPSの暗号化通信にすることで盗聴・なりすまし・改ざんを防ぎます。DoHはDNS側で設定し、ブラウザが対応することで利用できるので、閲覧者側はDoHに対応しているブラウザを使うだけで利用することができます。サーバー運用者側は使っているDNSがDoHに対応していれば利用できることになります。これによりDNSキャッシュポイズニングなどから「部分的に」身を守ることができるようになります。
「インターネットが速くなる!」という記事だけを見てパブリックDNS(Googleが提供している8.8.8.8のような公開DNSキャッシュサーバー)を設定している方も多いかもしれませんが、パブリックDNSを利用する場合、通信経路が不特定多数になる(その結果中間者に通信を改ざん・傍受されるリスクが増える)ためDoHはとても重要になります。
先ほど「部分的に」と書きましたが、大切なのはDoHとはいえ、絶対安心というわけではないことです。DNSを利用する場合、大抵はローカルのルーターやプロバイダーのDNSがキャッシュサーバーとして利用され、権威サーバーとキャッシュサーバー間の通信は暗号化されていません。権威サーバーとの通信にはDNSSECという仕組みがあり、電子署名により通信内容は担保されますが暗号化はされていません。DNSの通信全区間を暗号化するのはとても難しいことなのです。
そして、現行仕様のSNI SSL※の最大の弱点である「通信先のドメイン名が平文でやりとりされる」点と合わさると、以下のように何とも中途半端なものになってしまいます。
SNI SSLを利用したサーバーの場合
- DNS over HTTPSで名前解決をしてHTTPS通信でデータをやり取りしているため、名前解決したリクエストと結果は中間者からは見えない。
- その後の通信でSNI SSLが使われるため、通信先ドメイン名が見えてしまう。
- もしDNSで名前解決したあとに接続したサイトがHTTPだった場合は内容が見えてしまう。
- ※SNI SSL:従来のSSLの仕組みでは、1つのサーバーに1つのSSL証明書しか利用できませんでした。サーバー単位では無く、ドメイン名単位でSSL証明書を利用できるようにしたのがSNI SSLという仕組みです。これにより1つのサーバーで複数のSSL証明書が利用できるようになりました。ただし、SSL証明書を利用するために「サーバー側に希望するドメイン名を伝える部分」は平文で通信されます。その結果、通信先のドメイン名が見えてしまいます。
SNI SSLにおけるドメイン暴露の問題はEncrypted SNIという技術で解決されています。詳しくは当コラムの『通信先ドメイン名を暗号化!「Encrypted SNI」とは?』をご覧ください。Encrypted SNIとDoHを組み合わせることで、DNSへの問い合わせとSNI SSLによるドメインの平文通信問題を解決することができるため、インターネットにおけるプライバシー保護は格段に高まります。
DoHはインターネット通信の一部を暗号化する技術であり、「これさえ対応しておけばインターネットのプライバシーは保たれる!」といった万能なものでは無いことを覚えておきましょう。
DNS over HTTPSのデメリット
現在のDNSへのリクエストは平文で通信されるため、通信先、通信内容ともに悪意のある第三者が傍受可能であり、他の通信と見分けることも容易です。DoHを利用すると、リクエストの通信内容がわからなくなります。また、UDPではなくTCP443番ポートでの通信になるため、そのほかのHTTPS通信と混ざってしまい、どのリクエストがDNSへの名前解決リクエストなのかわかりにくくなります。
これにより通信元からの名前解決内容がわからなくなり、その結果中間者からはエンドユーザーがどのサイトへ接続しようとしているかがわかりにくくなります。これがDNS over HTTPSの目的なわけですが、一方子供に好ましくないサイトを見られないようにする「ペアレンタルコントロール」などでは、DNSへの名前解決リクエストをローカルのPCやルーター、携帯電話、ISPの接続元などでブロックする手法が用いられている場合があります。また、広告ブロッカーなどのソフトウェアでも利用されることがあります。DoHを使われてしまうと、これらが利用できなくなります。ペアレンタルコントロールを活用している親御さんには頭の痛い問題ですね。
安全なインターネットとは?
これまで、SSLの世界でも「安全なインターネット」を目指すために、ブラウザのアドレスバーに「保護されていない通信」の表示が出たり、不正な証明書をブラウザ側でブロックしたりといったことが行われてきました。これ自体はとても重要な取り組みなのですが、これまで出来ていたことが出来なくなってしまうことや、必要以上に早急に仕様が変更されることで批判の的になることも多くあります。
現実に、DoHの実装にあたっても「ChromeやFirefoxはDNSリクエストを独占しようとしている」や「子供にポルノサイトを見せないようにすることが阻害される」といった批判もされています。
真に自由に、プライバシーが保護された状態でインターネットを閲覧できることも非常に重要ですし、ポルノサイトやフィッシングサイト、その他悪意のあるサイトからエンドユーザーを保護することも非常に大切です。DNS over HTTPSはまだ実験的な機能ですが、今後どのように実装されていくか興味深く見守っていきましょう。