【図解】初心者にも分かるDNSSECの仕組みとシーケンス~キャッシュポイズニングと対策,普及/対応状況,KSKとZSKを分ける意義~

DNSの一般的なフローとキャッシュポイズニング

DNS の一般的なシーケンスは以下の通りです。

クライアントは DNS キャッシュサーバ (フルリゾルバ ,フルサービスリゾルバ) サーバに対して任意の名前解決をクエリ (要求) します。

フルリゾルバは自身のキャッシュ保持状況に応じて、キャッシュしていない情報を各 DNS 権威サーバにクエリします。

なお、最上位ゾーンである『ルートヒント』の DNS 権威サーバの IP アドレスはあらかじめインストールされます。

キャッシュポイズニング攻撃

ところが、キャッシュポイズニング攻撃を受けると、偽のサイトに誘導されてしまいます。以下では example.com ゾーンが乗っ取られ、www.example.com を 198.51.100.2 に誘導される例を示します。

例ではゾーン自体を乗っ取っているため、例えば mail.example.com 等の MX レコードも誘導できてしまいますが、www.example.com の A レコードだけ乗っ取る、という攻撃も可能です。

DNS のクエリ/応答は UDP 通信で実装していることが多く、偽の応答を総当たり攻撃しやすい環境にあります。

DNSSECとは

DNSSEC (読み方:でぃーえぬえすせっく) とは、DNS Security Extensions の略で、主にキャッシュポイズニングを根本的に防ぐセキュリティ技術です。

RFC 4034 で定義されています。

DNSSEC では https サイトの認証でも使われる『公開鍵/秘密鍵によるデジタル署名』技術により実現しています

ただし、形式は https のような汎用的な X.509 デジタル証明書ではなく、DNSSEC 専用のフォーマットが使われます。

また、https のように通信を暗号化する(機密性を実現する)機能はありません。あくまで改竄・偽装を防ぐ (完全性を実現する) 技術です。

公開鍵/秘密鍵の基礎知識については以下も併せてご参照下さい。

【図解】初心者も分かる"公開鍵/秘密鍵"の仕組み~公開鍵暗号方式の身近で具体的な利用例やメリット〜
【図解】初心者も分かる"公開鍵/秘密鍵"の仕組み~公開鍵暗号方式の身近で具体的な利用例やメリット〜
公開鍵・秘密鍵でできること ~暗号化とデジタル署名~ 特定のサーバ A が秘密...

DNSSEC では、各権威 DNS サーバはそのゾーンに対して公開鍵/秘密鍵を 1 ペア作成し、ゾーン内の各レコードを秘密鍵で署名し、公開鍵はインターネット上に公開します。

フルリゾルバ DNS サーバは、あるレコードを各 DNS 権威サーバにクエリしますが、その際に併せてそのゾーンの公開鍵もクエリします。そして受信したレコードと、署名を公開鍵で復号したものを照らし合わせ、一致すれば正しいレコードだと見なします。

以降に例を示します。説明の便宜上、フェーズ1 と フェーズ2 に分けています。

DNSSEC フェーズ 1 - 公開鍵によるレコードの署名の検証 -

フェーズ 1 では『www.example.com. の A レコード』とその A レコードに対する『RRSIG レコードを example.com. の公開鍵で復号したデータ』が一致することを検証します。

これにより『公開鍵が正しければこのAレコードも正しいものだと判断することができます。そしてフェーズ 2 ではこの公開鍵の正しさを検証します。

DNSSEC フェーズ 2 - 公開鍵の検証 -

フェーズ 1 では ZSK (Zone Signing Key)という秘密鍵によって作られた署名 RRSIG を検証しましたが、フェーズ 2 では ZSK の公開鍵の正しさを、KSK (Key Signing Key) で検証します。

また、自身の KSK の公開鍵が正しいことの保証は、上位ゾーンの DNS 権威サーバにしてもらいます。

具体的には、KSK を含む DNSKEY レコードのハッシュ値を上位サーバに登録します。

検証者である DNS キャッシュサーバ (フルリゾルバ) は example.com. ゾーンの DNS 権威サーバの DNSKEY のハッシュ値を計算し、com. ゾーンの DNS 権威サーバに対して example.com. の DS レコードを問合せ結果が合致するかを確認します。

com. の DNSKEY も同様に、ルートヒントサーバに保証してもらいますが、ルートヒントサーバは最上位であるため、保証してもらう先がありません。

ですがこれは 1 つしか存在しませんので、DNS キャッシュサーバ自体にその 1 つを信頼するよう登録しておけば良いのです。

ZSK と KSK を分ける理由・意義

ZSK は各レコードに対して RRSIG という署名を作るため、DNS キャッシュサーバは検証を行う数が多いです。そのため、負荷を軽くするため、比較的弱めのセキュリティ強度の公開鍵暗号方式を使います。そのため、比較的短めの有効期間に設定します。

一方、KSK はゾーン自体の検証ですので数は多くありません。ただし、乗っ取られたときのインパクトは大きいですので、強めのセキュリティ強度の公開鍵暗号方式を使います。そのため、比較的長めの有効期間に設定します。

このように使い分けをするため、ZSK と KSK は敢えて分割しています。

DNSSEC の普及・対応状況

DNSSEC の普及・対応状況の最新情報は以下で確認できます。

http://www.ohmo.to/dnssec/maps/