DNSSEC の問題をトラブルシューティングする方法を説明します。
dig は、ネームサーバーに DNS レコードを問い合わせるコマンドラインツールです。
たとえば dig で、DNS リゾルバーに www.cloudflare.com の IP アドレスを尋ねられます。
dig www.cloudflare.com +short198.41.215.162
198.41.214.162+short オプションは、結果だけを出力します。
レコードが署名されていることを確認するには +dnssec を使います。
dig www.cloudflare.com +dnssec +short198.41.214.162
198.41.215.162
A 13 3 300 20180927180434 20180925160434 35273 cloudflare.com. DYYZ/bhHSAIlpvu/HEUsxlzkC9NsswbCQ7dcfcuiNBrbhYV7k3AI8t46 QMnOlfhwT6jqsfN7ePV6Fwpym3B0pg==この例では、出力の最後の行が RRSIG レコードです。RRSIG はレコードに付く DNSSEC 署名です。RRSIG を使って、DNS リゾルバーは DNS 応答が信頼できるかを判断します。
dig で、DNS レコードの検証に使う公開鍵 DNSKEY も取得できます。
dig DNSKEY cloudflare.com +short257 3 13 mdsswUyr3DPW132mOi8V9xESWE8jTo0dxCjjnopKl+GqJxpVXckHAeF+ KkxLbxILfDLUT0rAK9iUzy1L53eKGQ==
256 3 13 koPbw9wmYZ7ggcjnQ6ayHyhHaDNMYELKTqT+qRGrZpWSccr/lBcrm10Z 1PuQHB3Azhii+sb0PYFkH1ruxLhe5g==ドメインの DNS レコードは、すべて同じ公開鍵で署名されます。そのため、サブドメイン(www.cloudflare.com)ではなく、apex ドメイン(cloudflare.com)の公開鍵を問い合わせてください。
DNS 応答には 2 つのレコードが含まれます。
DNSKEYレコード 256 は、ゾーン署名鍵(ZSK)と呼ばれる公開鍵です。ZSK はA、MX、CNAME、SRVなどの DNS レコード署名の検証に使います。DNSKEYレコード 257 は、鍵署名鍵(KSK)です。KSK はDNSKEY、CDS、CDNSKEYレコードの署名の検証に使います。
dig で +short オプションを使わない場合、応答ヘッダーに ad フラグがあれば、その DNS 応答は DNSSEC 認証済みです。
dig www.cloudflare.com[...]
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65326
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
[...]
;; QUESTION SECTION:
;www.cloudflare.com. IN A
[...]
;; ANSWER SECTION:
www.cloudflare.com. 15 IN A 198.41.215.162
www.cloudflare.com. 15 IN A 198.41.214.162DNSSEC の潜在的な問題を可視化して見つける手順は次のとおりです。
- https://dnsviz.net/ ↗ を開きます。
- 表示されたテキスト欄にドメイン名を入力します。
- DNSViz がそのサイトを一度も解析していない場合は、Analyze を選択します。
- DNSViz がそのサイトを以前解析している場合は、Update Now を選択します。
以下は、権威ネームサーバーが TLD ネームサーバーの公開 DS レコードと一致する有効な DNSKEY レコードを返さないとき、dnsviz.net が不正な委任をどう表示するかの例です。
ドメイン署名(例: cloudflare.com)の完全な検証では、トップレベルドメイン(例: .com)の鍵署名鍵を検証します。
同様の検証を、ルートサーバーレベルで .com の鍵署名鍵を確認して行います。DNSSEC のルート鍵は DNS クライアントに配布され、信頼チェーンを完成させます。
DNSSEC を有効にすると、レジストラの DNS に DS レコードが必要です。DS レコードには、鍵署名鍵の公開鍵のハッシュと、その鍵のメタデータが含まれます。
DS レコードを探すには dig を使います。
dig +short DS cloudflare.com2371 13 2 32996839A6D808AFE3EB4A795A0E6A7A39A76FC52FF228B22B76F6D6 3826F2B9+trace オプションを使うと、dig は応答が cloudflare.com のネームサーバーから返ったか、.com のネームサーバーから返ったかを確認します。この例では、cloudflare.com の DS レコードは e.gtld-servers.net から返っています。
dig DS cloudflare.com +trace[...]
cloudflare.com. 86400 IN DS 2371 13 2 32996839A6D808AFE3EB4A795A0E6A7A39A76FC52FF228B22B76F6D6 3826F2B9
[...]
com. 172800 IN NS e.gtld-servers.net.
[...]
;; Received 1213 bytes from 2001:502:1ca1::30#53(e.gtld-servers.net) in 37 ms上記の手順を手動で実行するより簡単な方法は、サードパーティツールの DNSViz を使うことです。
権威 DNS プロバイダーを変更したときに、レジストラ側の古い DNSSEC レコードを更新または削除しないと、問題が起きます。
dig A brokendnssec.net @1.0.0.1;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 10663SERVFAIL 応答が DNSSEC に関係するかどうかは、dig に +cd オプションを付けて確認します。+cd オプションは、DNSSEC 検証なしで DNS 結果を返します。
dig A brokendnssec.net @1.0.0.1 +dnssec +cd +short104.20.49.61
104.20.48.61この例では、+cd オプションでは正しい DNS 応答が返り、DNSSEC を使うクエリでは SERVFAIL になる場合、DNSSEC の設定が誤っています。権威ネームサーバーを変更したのに DS レコードを更新していないときに、よく起きます。攻撃者がクエリへの応答を偽装しようとした場合にも起きることがあります。
DNSSEC を無効にしたあとでも、DNSKEY レコードは DNS クエリとゾーン転送に現れ続けます。disabled 状態でも、Cloudflare はゾーンに署名し、RRSIG、NSEC、DNSKEY レコードを返します。これは想定どおりの動作であり、設定ミスやエラーではありません。詳細は DNSSEC の状態 と RFC 8078 ↗ を参照してください。
ただし、一部のセキュリティベンダーや監査ツールは、これらの DNSKEY レコードを問題として扱い、「DS レコードがないのに DNSKEY レコードがある」と報告し、セキュリティ結果を「Provably Insecure」とすることがあります。API を使って DNSKEY レコードを削除できます。
Delete DNSSEC API を使い、ゾーンを deleted 状態に移行します。これですべてのゾーン署名が止まり、すべての DNSSEC レコードタイプ(RRSIG、NSEC、DNSKEY、CDS、CDNSKEY)が削除されます。
Required API token permissions
At least one of the following token permissions is required:DNS Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dnssec" \
--request DELETE \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"DNSSEC の状態の詳細は、DNSSEC の状態 を参照してください。
DNSKEY レコードを削除したあと、DNS 応答に現れなくなったことを確認します。空の応答なら、削除は完了しています。
dig DNSKEY example.com +shortDNSKEY レコードがまだ見える場合は、TTL(Time to Live) の期限切れを待ってください。DNSKEY レコードは TTL が長め(多くの場合 3600 秒以上)なので、伝播に 1 時間以上かかることがあります。
DNSSEC の実装に問題が見つかった場合は、ドメインのレジストラに連絡し、DS レコードが権威 DNS プロバイダーの指定と一致していることを確認してください。Cloudflare が権威 DNS プロバイダーなら、Cloudflare で DNSSEC を設定する 手順に従ってください。