DNSキャッシュポイズニングとDNSSEC完全攻略|カミンスキー攻撃・署名検証徹底解説
インターネットの名前解決インフラを脅かす攻撃として、支援士・ネットワーク分野で頻出のテーマが「DNSキャッシュポイズニング(DNS Cache Poisoning)」と「DNSSEC(DNS Security Extensions)」です。
従来のDNSが抱えていた「UDP通信における偽装の容易さ」や「カミンスキー型攻撃の手口」、そして根本対策としての「DNSSECの公開鍵暗号による署名検証」を詳しく整理します。
1. DNSキャッシュポイズニングの原理とカミンスキー攻撃
DNSキャッシュポイズニングとは、DNSキャッシュサーバ(リゾルバ)に対し、権威DNSサーバからの正規の応答よりも早く偽のDNS応答を送りつけ、キャッシュサーバに偽のIPアドレス情報を記憶(毒入れ)させる攻撃です。毒入れされたキャッシュサーバを利用する一般ユーザーは、正規のURLを入力しても攻撃者の偽サイトへ誘導されてしまいます。
- 従来の攻撃手口と弱点: キャッシュサーバが外部へ問合せを行った瞬間に、問合せの「トランザクションID(16ビット=65,536通り)」を推測して偽応答を送り込む必要があり、一度正規応答が届くとキャッシュが残るため再試行が困難でした。
- カミンスキー型攻撃の脅威: 存在しないサブドメイン(例: 001.target.com, 002.target.com ...)を大量に問い合わせさせることで、キャッシュの存在を無視して短時間に何万回でも偽装パケットを送り続け、数秒〜数分でトランザクションIDの一致(毒入れ成功)を達成する手法。
2. 防御対策:ソースポートランダマイゼーション vs DNSSEC
対策手法 | 仕組みと効果 | 特徴と試験での位置づけ |
|---|---|---|
対策 ①(緩和策) ソースポートランダマイゼーション | 問合せ送信元のUDPポート番号(通常53番固定だったもの)をランダム(約16ビット)に変更する。 | トランザクションID(16ビット)× 送信元ポート(約16ビット)= 約32ビット(40億通り)の推測が必要になり、攻撃成功率を大幅に低下させる現実的な緩和策。 |
対策 ②(根本対策) DNSSEC (DNS Security Extensions) | 権威DNSサーバがリソースレコードセットにディジタル署名を付加し、キャッシュサーバ側で署名を検証して偽装を検知・破棄する。 | 【根本的解決策】 公開鍵暗号(ディジタル署名)により、データの真正性と完全性を数学的に保証する。 |
3. DNSSECの重要レコードと信頼の連鎖
- RRSIG(Resource Record Signature): DNSレコード群(Aレコード等)に対して権威サーバが秘密鍵(ZSK)で作成したディジタル署名レコード。
- DNSKEY(DNS Key): 署名検証に使用するゾーン署名鍵(ZSK)および鍵署名鍵(KSK)の公開鍵レコード。
- DS(Delegation Signer): 親ゾーンが保持する、子ゾーンのKSKのハッシュ値レコード。親ゾーンから子ゾーンへの信頼の連鎖(Chain of Trust)を結ぶ。
- トラストアンカー(Trust Anchor): 検証の起点となる信頼された最上位の鍵。ルートゾーンの公開鍵(KSK)がこれに該当する。
4. 午後記述式試験(SC・AP)で使える得点キーワード・記述テンプレート
【定番記述フレーズ①(DNSキャッシュポイズニングの目的)】 「キャッシュサーバに偽の対応情報を記憶させ、利用者を偽サイトへ誘導する。」(37字)
【定番記述フレーズ②(ソースポートランダマイゼーションの効果)】 「送信元ポートとトランザクションIDをランダム化し、偽応答の推測を困難にする。」(40字)
【定番記述フレーズ③(DNSSECの根本的役割)】 「公開鍵暗号によるディジタル署名を用いて、応答レコードの正当性と完全性を検証する。」(42字)