今回は、小ネタですが、表題の通り DoH(DNS over HTTPS) を Cisco Umbrella で扱ってみたいと思います。
はじめに
DoH(DNS over HTTPS)自体の詳細の説明は、いろいろな記事がネット上に転がっているので割愛しますが、ざっくり言うとDNSのプライバシー向上のための技術で、これまでDNSといえば port 53 を使っていた通信を、HTTPS の通信の中でやってしまうという技術です。
最近の Firefox や Chrome ではすでにサポートされています。
プライバシー向上のための技術ですが、DNSレイヤでのペアレントコントロールや、ドメインレピュテーションなど、セキュリティ施策を行う環境においては、アプリケーションが直接HTTPSの通信の中で名前解決を行うため制御が難しいという課題や、またDNSという通信に重要な設定をOSの設定を利用せずにアプリケーションがDoHを管理することで、ブラウザごとの実装の違い、更新などの管理的な課題など、いくつかの課題が議論されています。
また、Firefox の version63 から北米ではデフォルトでDoHを有効にするということでも多くの話題を生んでいます。
Cisco Umbrella も DoH に対応しているので、色々動作について確認してみました。
この記事でやること
- Firefox / Chrome で DoH を設定し、Umbrella で制御
- Cisco Umbrella DoH サーバーを使ってみる
- Dig like DoH クライアントを使ってみる
Firefox / Chrome で DoH を設定し、Umbrella で制御
先に、いくつかの課題を挙げましたが、企業内におけるDNSでのセキュリティ施策をバイパスしてしまうという課題について、例えば、Firefox では canary domain と呼ばれる 'use-application-dns.net' というドメインに対し、名前解決を実行し、名前解決に失敗すれば、DoH を行わないという実装により、回避策を提供しています。
上記、実装に関して Cisco Umbrellaなど、DNSサーバー側で対応済みであれば、デフォルトで、DoHが有効になりません。ただし、ユーザーがマニュアルでDoHを有効にする場合は、canary domain は使われない という仕様1 になっており、上記課題が残ります。
Chromeにおいては、上記のcanary domain の手法を取っていません(この手法を取り入れる予定もないとのこと2)。Chromeでは、より保守的なアプローチとして、システム側のDNSとして設定されているDNSサーバーが DoH に対応している場合に限りDoHをプライバシー向上の手段として使います。
Umbrella での DoH のブロック
Cisco Umbrella においては、設定で、DoHをブロックすることができます。
Cisco Umbrella のポリシー設定において "Proxy/Anonymizer" カテゴリをブロックします。そうすることで、DoHのサーバーに対する名前解決を制限し、結果として、ブラウザは、アプリ内で設定したDoHはなく、システムで設定された DNS を利用します。
実際に DoH をブロックするポリシーが設定された環境で、DoH を使うとどうなるか見てみましょう。
下記のように、Umbrella のレポート上では、設定したPolicy によって DoH のサーバーへの通信がブロックされます。
ブロックの動作としては、Umbrella 側で、DNS のレスポンス変更しています。 Googleが提供する DoH サーバー dns.google に対して 名前解決をしてみると...
レスポンスが本来の 8.8.8.8 ではないのがわかると思います。
$ dig dns.google
; <<>> DiG 9.10.6 <<>> dns.google
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65103
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns.google. IN A
;; ANSWER SECTION:
dns.google. 0 IN A 146.112.61.106 <--- 本来の 8.8.8.8 が書き換わっている
;; Query time: 7 msec
;; SERVER: 208.67.222.222#53(208.67.222.222)
;; WHEN: Tue Dec 01 11:35:44 JST 2020
;; MSG SIZE rcvd: 55
ブラウザではこの状態でも、ブラウジングに問題はありません。通信に DoHのサーバーではなく、システムのDNSサーバーを使っています。
上記の通り、Umbrellaが提供する DoH のブロックは、あくまで DoH サーバーへの名前解決のレイヤで Cisco Umbrella がコントロールを行っています。
Cisco Umbrella DoH を使ってみる
2020年の5月に Umbrella も DoH に対応しました。
下記のURLを ブラウザ内の カスタムDoH設定として入力することで、Cisco Umbrella の DoH サーバーを使うことができます。
https://doh.umbrella.com/dns-query
こちらのDoHサーバを利用する場合は、Cisco Umbrella のポリシーに基づく コントロールが可能になります。
設定した状態で、https://doh.umbrella.com へアクセスすると、ブラウザの設定が doh.umbrella.com に対して有効なっているか、確認できます。
Dig like DoH クライアント を使ってみる
OpenDNS (現Cisco Umbrella) のGithubのリポジトリに dig like な dohクライアントがあります。それを使って、動作確認してみます。
インストール
git clone https://github.com/opendns/doh-client.git
cd ./doh-client
pip3 install -r requirements.txt --user
cp doh.py /usr/local/bin/doh
早速、このツールを使って yahoo.co.jp の名前解決をしてみます。
$ doh yahoo.co.jp
; <<>> DoH Client 0.1 <<>> yahoo.co.jp
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1212
;; flags: QR RD RA
;; QUESTION:
yahoo.co.jp. IN A
;; ANSWER:
yahoo.co.jp. 194 IN A 182.22.59.229
yahoo.co.jp. 194 IN A 183.79.135.206
;; Server: https://doh.opendns.com
;; Query time: 84 msec
このコマンドでは、デフォルトの DoH サーバーは Cisco Umbrella (doh.opendns.com) を使うため、上記で設定したブロックポリシーにはかかりません。
ただし、ブロックしてある DoH サーバーを使って、DoH してみると...
$ doh yahoo.co.jp @dns.google
; <<>> DoH Client 0.1 <<>> yahoo.co.jp @dns.google
Error<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1122)>
この通り、名前解決に失敗します。
設定通り、 Umbrella のポリシーが効いていることが確認できます。
まとめ
Cisco Umbrella での DoH 周りの動作確認をしてみました。
DoH 自体は、すでに巷で議論されている通り、現在のところ、技術としての選択肢であり、セキュリティのための要件ではありません。
企業ユースにおいては、DoH積極的に使うというよりは、こういった技術を どのように管理していくかという観点で、FWの設定やエンタープライズグループポリシーなども含めて、考慮点は多いのかなと思います。
参考リンク
Firefox DNS-over-HTTPS | Firefox ヘルプ
DoH! What's all the fuss about DNS over HTTPS? - Cisco Umbrella
Web Browsers and DNS over HTTPS default – Cisco Umbrella
Using DNS over HTTPS (DoH) with Umbrella – Cisco Umbrella