DoH(DNS over HTTPS) を Cisco Umbrella で扱う


今回は、小ネタですが、表題の通り 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] になっており、上記課題が残ります。
[^1]: https://support.mozilla.org/en-US/kb/canary-domain-use-application-dnsnet


Chromeにおいては、上記のcanary domain の手法を取っていません（この手法を取り入れる予定もないとのこと[^2]）。Chromeでは、より保守的なアプローチとして、システム側のDNSとして設定されているDNSサーバーが DoH に対応している場合に限りDoHをプライバシー向上の手段として使います。
[^2]: https://www.chromium.org/developers/dns-over-https

Umbrella での DoH のブロック
-----
Cisco Umbrella においては、設定で、DoHをブロックすることができます。
Cisco Umbrella のポリシー設定において "Proxy/Anonymizer" カテゴリをブロックします。そうすることで、DoHのサーバーに対する名前解決を制限し、結果として、ブラウザは、アプリ内で設定したDoHはなく、システムで設定された DNS を利用します。

実際に DoH をブロックするポリシーが設定された環境で、DoH を使うとどうなるか見てみましょう。

下記のように、Umbrella のレポート上では、設定したPolicy によって DoH のサーバーへの通信がブロックされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134942/4cf82f56-e69f-2364-d32a-f408db85424a.png)



ブロックの動作としては、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 に対して有効なっているか、確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134942/fb30026e-9cdd-5fc2-bb1c-b05c6de10034.png)



Dig like DoH クライアント を使ってみる
======

OpenDNS (現Cisco Umbrella) のGithubのリポジトリに dig like な dohクライアントがあります。それを使って、動作確認してみます。

[GitHub - opendns/doh-client](https://github.com/opendns/doh-client)

インストール

```
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 ヘルプ](https://support.mozilla.org/ja/kb/firefox-dns-over-https)

[DoH! What's all the fuss about DNS over HTTPS? - Cisco Umbrella](https://umbrella.cisco.com/blog/doh-whats-all-the-fuss-about-dns-over-https)

[Web Browsers and DNS over HTTPS default – Cisco Umbrella](https://support.umbrella.com/hc/en-us/articles/360001371526)

[GPO and DoH – Cisco Umbrella](https://support.umbrella.com/hc/en-us/articles/360033819691-GPO-and-DoH)

[Using DNS over HTTPS (DoH) with Umbrella – Cisco Umbrella](https://support.umbrella.com/hc/en-us/articles/360043574271-Using-DNS-over-HTTPS-DoH-with-Umbrella)