権威DNSとキャッシュDNSの分離設計およびDNSSECの実装
本記事はNWの午後試験・科目B群の学習を支える技術解説です。演習と解答例は当サイトのオリジナルで、IPAの公式問題・公式採点基準ではありません。製品ごとの設定差や、問題文で仮定した条件を区別して読み進めてください。
1. 概要と本質:なぜ権威とキャッシュの完全分離が必須なのか
DNS(Domain Name System)は、ドメイン名とIPアドレスを相互変換し、インターネットのあらゆるサービス(Web、メール、API)の入口を支える最重要インフラです。
初期のインターネットでは、1台のDNSサーバが「自社ドメインの情報を外部に教える機能」と「社内クライアントのために外部ドメインを検索する機能」を兼ね備えて運用されることが一般的でした。 しかし、この混在構成は現代のセキュリティにおいて極めて危険な脆弱性構成(アンチパターン)です。外部からの問合せを受け付けるサーバで再帰問合せを許可していると、「オープンリゾルバ」としてDNSアンプ(増幅)DDoS攻撃の踏み台に悪用されるほか、内部キャッシュが偽情報で上書きされる「DNSキャッシュポイズニング攻撃」の格好の標的となります。
本稿では権威DNSとキャッシュDNSの役割、キャッシュポイズニングの対策、DNSSECの信頼連鎖を整理する。署名によるデータ検証と通信経路の防御は分けて考える。
2. 権威DNSとキャッシュDNSのアーキテクチャ分離
DNSの名前解決に関わるエンティティは、明確に役割が分かれています。
2.1 2つの問合せ形態とサーバの役割定義
比較項目 | 権威DNSサーバ(Authoritative DNS) | キャッシュDNSサーバ(Cache DNS / Resolver) |
|---|---|---|
別名 | コンテンツDNSサーバ、ゾーンサーバ | フルサービスリゾルバ、再帰問合せDNS |
保持データ | 自身が管理権限を持つゾーン情報のみ(ゾーンファイル) | 外部から問い合わせて得た回答の一時キャッシュ |
対応する問合せ | 反復問合せ(Iterative Query) にのみ応答 | クライアントからの 再帰問合せ(Recursive Query) に応答 |
再帰検索の実施 | 行わない(絶対無効化) | クライアントに代わってルートから順次反復問合せを実施 |
外部公開 | 全世界のインターネットへ公開(UDP/TCP 53開放) | 社内LANや自組織クライアントからのみアクセス許可(外部遮断) |
オープンリゾルバ化のリスク | 再帰検索を有効にしていると踏み台化する | 外部からアクセス可能になっていると踏み台化する |
3. キャッシュポイズニング攻撃と多層防御技術
3.1 カミンスキー型キャッシュポイズニングの攻撃原理
ランダムな未キャッシュ名への問合せを誘発し、正規応答より先に偽造応答を受理させる機会を繰り返す攻撃である。成功はTXID・ポート等の予測困難性、応答検証、委任情報の受理条件に依存する。
3.2 ソースポートランダム化(SPR)による防御
DNSメッセージヘッダのTXIDは16ビット。偽造対策ではTXIDに加え、ポート・アドレス・Question等を検証し、予測されにくくする。
対策(ソースポートランダム化: Source Port Randomization):
- キャッシュDNSが上位権威DNSへ問合せパケットを送信する際、送信元ポート番号(UDP Source Port)を固定せず、エフェメラルポート範囲(約1024〜65535の約60,000通り)から毎回ランダムに選択する。 - 攻撃者は 「TXID(16bit:約6.5万通り) × 送信元ポート(16bit:約6万通り) ≒ 約40億通り()」 の組み合わせを同時に的中させなければならず、攻撃成功率は天文学的に低下する。
4. EDNS0とUDPフラグメンテーションの落とし穴
RFC 1035で策定された本来のDNS over UDPのパケットサイズ上限は 512バイト です。 しかし、後述するDNSSECの暗号署名や鍵情報、IPv6のAAAAレコードを格納すると、512バイトを容易に超過します。
4.1 EDNS0(Extension Mechanisms for DNS: RFC 6891)
DNSメッセージ内に 「OPT疑似リソースレコード(OPT RR)」 を追加することで、クライアントおよびサーバが対応可能なUDPパケットサイズ(例: 4,096バイトや1,232バイト)を通知し、512バイトを超えるUDP通信を可能にする規格です。
EDNS0のUDPペイロードを1,232バイト等の保守的なサイズへ制限し、切り詰め応答(TC=1)ではTCP/53へ再問い合わせできるようにする。1,232はIPv6最小MTU1,280−40−8に基づく目安。断片化時の通過可否はFWの実装・設定による。
5. DNSSECの信頼の連鎖(Chain of Trust)
ソースポートランダム化でも、経路上に割り込める攻撃者(中間者攻撃: MitM)による応答改ざんは防げません。 「応答データが改ざんされていないこと(完全性)」および「本当にそのゾーンの正当な権威DNSから送られたこと(真正性)」を公開鍵暗号の電子署名で証明するのが DNSSEC です。
5.1 DNSSECの主要レコード種別
レコード | 名称 | 役割 |
|---|---|---|
DNSKEY | DNS Public Key | ゾーンの公開鍵(KSKまたはZSK)を保持するレコード。 |
RRSIG | Resource Record Signature | AレコードやMXレコードなどのRRsetに対して、秘密鍵で生成された電子署名。有効期限(Inception / Expiration)を持つ。 |
DS | Delegation Signer | 親ゾーンに登録されるレコード。子ゾーンのKSKのハッシュ値を保持し、親から子への信頼を繋ぐ。 |
NSEC / NSEC3 | Next Secure | 指定したドメイン名が存在しないこと(否定応答: NXDOMAIN)を暗号的に証明するレコード。NSEC3はゾーン内部の全レコードを一覧取得される「ゾーンウォーキング(Zone Walking)」を防ぐためハッシュ化されている。 |
5.2 KSKとZSKの2階層構造の理由
なぜ鍵を2種類(KSKとZSK)に分けるのか?
ZSK(Zone Signing Key): 日常的にゾーン内のレコード(Aレコード等)に署名する鍵。頻繁に更新(ロールオーバー)したい。
KSK(Key Signing Key): ZSK自身(DNSKEYレコード)に署名するための親鍵。
理由: ZSKを更新するたびに親レジストリ(JPRSやレジストラ)に申請してDSレコードを書き換えてもらうのは運用負荷が極めて高いため、親ゾーンにはKSKのハッシュ(DSレコード)のみを登録し、子ゾーン内だけで日常的なZSKのロールオーバーを完結させる。
6. 午後・科目B形式 実戦演習
【問題シナリオ】
インターネット通販を運営するD社は、社内ネットワークのセキュリティ監査を実施した。 D社の公開Webサイト用ドメイン shop-d.co.jp を管理する権威DNSサーバ(DNS-Auth)と、社内LANのPC端末(約500台)が利用するキャッシュDNSサーバ(DNS-Cache)の運用状態を調査したところ、以下の構成となっていた。
【監査での指摘事項】:
統合DNSサーバは1台の物理サーバで構築されており、BINDの設定ファイルで recursion yes;(再帰問合せ有効)のまま、インターネット側からのUDP 53番ポート宛て通信をすべて許可していた。
統合DNSサーバはDNSSECを未導入であり、OSのパケットフィルタによりUDP送信元ポートが53番固定で上位DNSへ反復問合せを行っていた。
【設問1】
指摘事項1の構成において、外部の悪意ある第三者がこの統合DNSサーバを踏み台として利用し、第三者のターゲットサーバに対して大規模なDDoS攻撃(DNSアンプ攻撃)を実行するメカニズムについて、攻撃者が送信するパケットの送信元IPアドレス、およびDNS応答パケットの特徴に着目し、35字以内で述べよ。
解答への思考プロセス
攻撃メカニズムの整理:
- DNSアンプ攻撃(DNS Amplification Attack)は、UDPの「送信元IPアドレス偽装(IPスプーフィング)」が容易である性質を悪用する。 - 攻撃者は、送信元IPアドレスを「攻撃対象(被害者)のIPアドレス」に偽装する。 - DNSサーバに対して、応答サイズが極めて大きくなるクエリ(例: ANY . や EDNS0を用いた大容量署名レコード)を送信する。 - オープンリゾルバとなっているDNSサーバは、偽装された送信元(被害者)に向けて、送信要求の何十倍〜何百倍もの巨大な応答パケットを集中砲火する。
設問要求の確認:
- 「送信元IPアドレス」=標的サーバのIPアドレスに偽装 - 「DNS応答パケットの特徴」=要求より増幅された大容量パケット - 35字以内でまとめる。
文章作成: 設問が求める原因・動作を短く整理し、以下の解答例のようにまとめる。
- 送信元を標的に偽装し、増幅した大容量応答パケットを送りつける。
模範解答
送信元を標的に偽装し、増幅した大容量応答パケットを送りつける。
解答で確認したい論点
×「再帰問合せ機能を使って内部情報を盗み出す。」(アンプ攻撃の内容になっていない。論点不足)
△「大量のDNSクエリを送信してサーバを落とす。」(DNSサーバ自体を落とすDoS攻撃と混同しており、アンプ攻撃の「標的へ向けて増幅パケットを跳ね返す」という本質が抜けている)
【設問2】
D社がセキュリティを抜本的に改善するため、サーバを「公開権威DNS」と「社内キャッシュDNS」に物理的に2台分離することにした。 このうち、新設する「社内キャッシュDNSサーバ」のセキュリティ設定およびネットワークアクセス制御として講じるべき対策を、アクセス元IPアドレスの制限に着目して35字以内で述べよ。
解答への思考プロセス
要件と改善策:
- キャッシュDNSサーバが外部から利用可能になっている状態(オープンリゾルバ)を完全に解消する。 - キャッシュDNSへの再帰問合せ要求(UDP/TCP 53)は、「社内LAN(自社クライアント端末のIPアドレス空間)」からのみ許可し、インターネット(外部ネットワーク)からのアクセスはファイアウォールで全て破棄(遮断)する。
字数制限への圧縮:
- 「再帰問合せの受付を社内LANのIPアドレス範囲からのみに限定する。」
模範解答
再帰問合せの受付を社内LANのIPアドレス範囲からのみに制限する。
解答で確認したい論点
×「ルートDNSへのアクセスを禁止する。」(外部の名前解決ができなくなるため完全に誤り)
△「ファイアウォールでポート53を閉じる。」(社内からの通信まで閉じてしまうと社内PCが名前解決できなくなるため不正確)
7. まとめと次ステップ
DNSインフラの堅牢化は、現代のネットワーク設計において避けて通れない必須項目です。
権威DNSは外部公開し、自ゾーン情報のみを回答(再帰問合せは厳禁)。
キャッシュDNSは社内LANに閉じ、外部からのアクセスを完全遮断。
ソースポートランダム化とDNSSEC(DS→DNSKEY→RRSIG連鎖)で偽装・汚染のリスクを低減する。
次稿 NWP-07(ロードバランサ(L4/L7)による負荷分散とSSLオフロード設計) では、Webシステムのスケーラビリティと可用性を支えるロードバランサの分散アルゴリズム、SSLオフロード、Cookieセッションパーシステンスの実務設計を深掘りします。
DNSの検証と到達性を分けて考える
偽造応答の受理条件はTXIDだけではない。送受信IP、UDPポート、Questionの名前・型・クラス等を照合し、関連のない委任・追加情報を受理しない。Kaminsky型攻撃はランダムな名前で再帰検索を発生させ、AuthorityセクションのNS等を狙うが、権威ゾーンの管理権を取得する攻撃ではない。
DNSSECは信頼アンカーからDS・DNSKEY・RRSIGの連鎖を検証して、署名されたDNSデータの出所と完全性を確認する。DSはDNSKEYのRDATA等を対象にしたダイジェストで、単なる公開鍵のハッシュとは区別する。通信内容の暗号化やDDoS防止を提供せず、未署名ゾーンが自動的に安全になるわけではない。
UDPペイロード1,232バイトはIPv6最小MTU1,280−IPv6基本ヘッダ40−UDPヘッダ8という保守的な目安である。TCP/53へのフォールバックを許可し、EDNS対応だけで大きな応答が必ず届くと考えない。公開権威DNSでも必要なTCP/53を遮断しない。
recursion yesだけで公開リゾルバになるとは限らない。再帰問合せ・キャッシュ参照を許可するACLも確認する。演習のオープンリゾルバは外部からの再帰問合せを許すACLまで設定した条件を仮定する。NSEC3も名前列挙を完全に防ぐ機能ではない。
参考資料・関連する学習記事
次におすすめの学習
編集・検証について
編集・検証:IT資格ラボ編集部
IPAが公開する試験要綱・シラバス・過去問題と、各技術の公式資料を優先して内容を確認しています。制度変更や誤りを確認した場合は、記事を見直して更新します。
編集方針・情報源・訂正方針を見る