2022-06-13 DNSSEC について調べる
顧客からの問い合わせで DNSSEC に関するものがあった (DNSSEC のレコードの監視)。
DNSSEC について全く知らなかったので、少し調査をすることにした。
概要
Domain Name System SECurity extensions (DNSSEC)。
DNS キャッシュポイズニングに代表される、 DNS を利用した攻撃を防止するために設計された。
DNSSEC を利用すると、悪意のあるサーバによる DNS データの偽装または操作をクライアントが受け入れないようにすることができる。
DNS キャッシュポイズニング
DNS キャッシュサーバが権威サーバに名前解決をした際のレスポンスを、攻撃者のサーバによって偽装されること。
キャッシュサーバに誤ったホスト名 / IPアドレスの対応が一定期間残るため、そのキャッシュサーバを利用するクライアントにおいて被害が発生する。
DNS キャッシュサーバ等クライアントと権威サーバ等サーバの間でのやり取りにおいてはメッセージに 16bit の ID が付与され、これの一致の確認が簡単な認証の役割を果たすが、 16bit 分(=約30000通り) しかパターンがないため、総当たりなどによって突破される危険性がある。
対策として DNSSEC が有効である。他に、この ID の bit 数を増やすという方法もある。
DNSSEC の構成
DNSSEC では、電子証明の仕組みを用いて構成サーバのホスト検証、改ざん検知を行う。
ゾーン作成者が秘密鍵と公開鍵を作成、 DNSKEY レコードという名称のレコードによって公開する。また、その秘密鍵を用いてゾーン内リソースのレコードについて電子署名を作成する。
DNS 情報を問い合わせたクライアントは問い合わせたレコード情報、DNSKEY レコードとして公開鍵情報、 PRSIG レコードとして電子署名情報を受け取り、受け取った公開鍵によって電子署名を復号することでレコードを検証する。
電子署名
電子署名は、コンテンツのハッシュを秘密鍵によって暗号化したものである。
検証する受け手はこれを公開鍵によって復号してコンテンツのハッシュを取得する。
コンテンツに同様のハッシュ関数を適用してハッシュを取得し、手元で生成したこれと復号によって得られたハッシュを比較する。
上位権威サーバによる信頼
DS レコードという、公開鍵のハッシュ値が公開されている。
この公開鍵のハッシュ情報に対し、上位の DNS サーバの秘密鍵を用いて署名し、上位の DNS サーバにおいて公開することで、クライアントは受けとった公開鍵を検証できるようになる。
手順としては、クライアントが受け取った公開鍵の署名を確認、その署名を上位の DNS サーバの公開鍵と比較。
一致していれば、その公開鍵は上位の DNS サーバによって認証されており、クライアントはその公開鍵が信頼に値すると判断することができる。
これによって証明書チェーンのように階層構造を構成し、上位 TLD の公開鍵をインストール、信頼するのみで配下の DNS サーバの公開鍵を連鎖的に検証、信頼できるようになる。