FE EXAM

DNSキャッシュポイズニング(DNS汚染)

DNSに偽の対応情報を覚え込ませ利用者を偽サイトへ誘導する攻撃。

INTERACTIVE VISUALIZATION
DNS
正規サイト
偽サイト
フェーズ
idle
キャッシュ
到達先
シナリオ
ステップ1 / 6
STEP 1/6正常なDNSの仕組みDNS(Domain Name System=ドメイン名システム)は、人が読みやすいドメイン名(bank.example.com など)を、コンピュータが使うIPアドレス(数字の住所)に変換する仕組みです。一度調べた対応はキャッシュ(=一時的な覚え書き)に保存し、次回から素早く答えます。
利用者bank.example.comキャッシュDNS(キャッシュ空)正規サイト203.0.113.10攻撃者・偽サイト198.51.100.66①問い合わせキャッシュ: (未登録)
攻撃のしくみ
正: bank.example.com → 203.0.113.10 (本物)
偽: bank.example.com → 198.51.100.66 (攻撃者)
攻撃: 偽応答を先回りで送りキャッシュに保存させる
対策: DNSSECの署名検証で偽応答を拒否
解説

📌
DNSキャッシュポイズニングとは

利用者毒入りDNS偽IP偽サイト正しい名前なのに偽サイトへ

DNSキャッシュポイズニングとは、DNSサーバのキャッシュに偽の対応情報を覚え込ませ、正しいドメイン名を入力した利用者を偽サイトへ誘導する攻撃です。DNS(Domain Name System=ドメイン名システム)は、ドメイン名をIPアドレス(数字の住所)に変換する電話帳のような仕組みです。

身近な例で考えると、町の案内所の住所録に、偽の住所をこっそり書き加えるようなものです。案内所(DNS)を信じた人は、正しい店名を伝えたのに、まったく別の偽の店へ案内されてしまいます。「ポイズニング」は英語で「毒を盛ること」を意味します。

上のツールで▶ボタンを押すと、攻撃者が偽の応答をDNSに覚え込ませ、利用者が偽サイトへ誘導される流れと、DNSSECで攻撃が防がれる様子を確認できます。

⚙️
攻撃の仕組み

DNSは効率化のため、一度調べた対応をキャッシュ(=一時的な覚え書き)に保存し、次回から素早く答えます。攻撃者はこの「覚え書き」を偽情報で汚すことを狙います。鍵になるのは応答のタイミングです。

攻撃は次の順で進みます。
① 問い合わせ:利用者がドメイン名を尋ね、キャッシュDNSが本物のDNSサーバへ転送する
② 先回り:攻撃者が、本物の応答が届くより先に偽のIPを答える応答を送り込む
③ キャッシュ:DNSが先に届いた偽応答を本物と信じて保存する(=毒入りキャッシュ)
④ 誘導:以降このDNSを使う利用者が、正しい名前を入力しても偽サイトへ案内される

恐ろしいのは、利用者は正しいドメイン名を入力しているのに被害に遭う点です。一度毒が入ると、キャッシュの有効期限が切れるまで多くの利用者が偽サイトへ送られ続けます。上のツールのinject〜cacheステップで、偽応答が先回りで保存される様子を見てください。

💡
なぜ偽応答を先回りできるのか

キャッシュDNS問い合わせIDで照合正規DNSサーバ攻撃者①転送②正規応答(遅れる)②'偽応答を先着③ 先着した偽応答がキャッシュに保存される(毒入り完了)

結論:DNSの照合が「問い合わせID」だけで、応答が本物かを確かめない仕組みだからです。なぜそれで問題が起きるかを順に見ていきましょう。

キャッシュDNSはドメイン名を調べるとき、外部のDNSサーバへ問い合わせを送ります。このとき「問い合わせID」(16ビット=65536通りの番号)を付けます。返事を受け取ったとき、IDが合っていれば「正しい応答だ」と判断してキャッシュに保存する仕組みです。

攻撃者はこのIDを総当たりで推測し(65536通りなので全部試してもすぐ終わります)、IDが合った偽の応答を本物の返事が来るより速く送り込みます。DNSサーバは先着した応答を本物と信じてキャッシュし、毒入りキャッシュが完成します。以降、本物の応答が来ても「もう知っている」として無視します。

📌
他の誘導攻撃との違い

攻撃の種類偽サイトへの誘導方法利用者のURL入力
DNSキャッシュポイズニングDNSの回答を偽り、正しいURLなのに偽IPへ飛ばす正しい URL を入力(被害に気づきにくい)
フィッシングメールやSMSで偽URLリンクを踏ませる偽の URL を踏んでしまう(よく見ると違う)
MITM(中間者攻撃)通信経路に割り込み、コンテンツを書き換える正しい URL (経路の途中で書き換え)

DNSキャッシュポイズニングが特に厄介なのは、利用者がまったく正しい操作をしているのに騙される点です。フィッシングなら「URLが少し違う」で気づけることもありますが、DNSポイズニングはURLが本物のままなので見た目では判断できません。

また、一度キャッシュに毒が入ると、そのDNSを使っているすべての利用者が被害を受けるのも特徴です(フィッシングは1人ずつURLをクリックさせる必要があります)。被害範囲が広い分、対策(DNSSEC)の重要性も高いと言えます。

🛡️
対策(DNSSEC等)

正規応答署名あり ✓検証正規 → 採用偽(署名なし)→ 拒否

根本的な対策はDNSSEC(DNS Security Extensions=DNSにデジタル署名を付ける拡張)です。応答に正規サーバの署名(=改ざんされていない証明)を付け、受け取った側が「本当に正規サーバからの応答か」を検証します。署名のない偽の応答は拒否されるので、毒入りデータはキャッシュされません。

公的な書類に「実印と印鑑証明」を付けるイメージです。署名のない偽の書類は「本物ではない」とすぐに見破れます。これにより、攻撃者が偽の応答を先回りで送っても通用しなくなります。

DNSSEC以外にも、偽応答を「当てにくく」する対策があります。
問い合わせIDのランダム化:応答に付ける識別番号を予測されにくくする
送信元ポートのランダム化:問い合わせに使うポート番号を毎回変え、偽応答を合わせにくくする
ソフトウェアの更新:DNSサーバのソフトを最新に保ち、既知の弱点をふさぐ

練習問題

🎯
基本情報技術者 練習問題

Q1.DNSキャッシュポイズニングの説明として最も適切なものはどれか。
A.DNSサーバのキャッシュに偽の対応情報を覚え込ませ、利用者を偽サイトへ誘導する攻撃
B.入力欄に不正なSQLを注入してデータベースを操作する攻撃
C.バッファの容量を超えるデータを書き込む攻撃
D.Webページにスクリプトを埋め込んで実行させる攻撃
Q2.DNSキャッシュポイズニングが成立するうえで重要な点はどれか。
A.利用者が間違ったドメイン名を入力すること
B.攻撃者が正規DNSサーバの応答より先に、偽の応答をキャッシュサーバに届けること
C.利用者のパソコンがウイルスに感染していること
D.通信回線が遅いこと
Q3.DNSキャッシュポイズニングへの対策として最も適切なものはどれか。
A.DNSSECで応答にデジタル署名を付け、応答の正当性を検証する
B.SQL文をプリペアドステートメントで実行する
C.バッファの境界をチェックする
D.< や > をエスケープ処理する

関連コンテンツ