Cyber Security Academy · レッスン

DNSスプーフィングとキャッシュポイズニング

DNS応答を偽造する手法を学びます。

レッスン 2/413 ステップ

「DNSスプーフィングとキャッシュポイズニング」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。

DNS応答の偽造

DNSスプーフィングとは、偽造したDNS応答を提供し、被害者が名前を攻撃者の管理するIPに解決するよう仕向けることです。キャッシュポイズニングはその一種で、偽の応答が再帰リゾルバーに受け入れられて保存され、そのリゾルバーを利用するすべてのクライアントに影響します。

通常の目的は通信のリダイレクトです。ユーザーをフィッシングページ、マルウェア配布先、または中間者プロキシへ誘導します。

レースコンディション

リゾルバーがクエリを送信すると、攻撃者は正規の権威サーバーが応答する前に偽の応答を注入しようとします。偽造応答が先に到着し、想定されるフィールドと一致すれば、その応答が競争に勝ってキャッシュされます。

そのため、攻撃と防御の両方で、遅延、パケットの順序、リゾルバーの送信元ポートが非常に重要になります。

攻撃者が推測しなければならない一致項目

偽造したUDP応答を受け入れさせるには、攻撃者は次の項目を一致させる必要があります:

  • 送信元IP(権威サーバー)。
  • 宛先ポート(リゾルバーの送信元ポート)。
  • クエリ名と種別。
  • 16ビットのトランザクションID(TXID)。

保護がなければ、実質的に唯一の秘密情報はTXIDであり、パケットごとの成功確率はおよそ65,536分の1です。

Kaminsky攻撃

Dan Kaminsky氏による2008年の公表で、ポイズニングはそれまで考えられていたよりはるかに容易だと明らかになりました。レコードごとに1回競争する代わりに、攻撃者は多数の存在しないサブドメイン(aaa.bank.com、aab.bank.comなど)を問い合わせ、ドメイン全体を対象とする悪意のあるNSまたはグルーレコードを含む偽造応答を大量に送ります。

各試行は新たな競争になり、問い合わせが見つからなくてもキャッシュによる不利がないため、攻撃者は推測が当たるまで試行を重ね、ゾーン全体を汚染できます。

for sub in $(seq 1 10000); do
  dig $sub.bank.com @victim-resolver &
done
# Attacker floods forged NS answers in parallel

送信元ポートのランダム化

Kaminsky攻撃以降の主な緩和策は送信元ポートのランダム化でした。固定された送信元ポートを使う代わりに、リゾルバーはクエリごとにランダムなエフェメラルポートを選択します。

これにより攻撃者はTXID(16ビット)と送信元ポート(約16ビット)の両方を推測する必要があり、探索空間はおよそ2^32に広がります。そのため、エントロピーの弱い実装では不可能ではないものの、オフパスからの盲目的なポイズニングは現実的ではなくなります。

オンパス攻撃者とオフパス攻撃者

オフパス攻撃者はクエリを見られないため、TXIDとポートを盲目的に推測する必要があります。オンパス攻撃者(不正なWi-Fi、侵害されたルーター、ISPなど)はクエリを直接読み取り、一致する応答を簡単に作成できます。

オンパスのなりすましはポートのランダム化を完全に無効化します。そのため、単なるエントロピーだけでなく、強い保証を得るには暗号化トランスポートとDNSSEC検証が必要です。

不正なDHCPとリゾルバー乗っ取り

攻撃者は必ずしもパケットを偽造するとは限りません。不正なDHCPサーバーは、悪意のあるDNSリゾルバーのアドレスをクライアントに配布し、すべてのルックアップを攻撃者に応答させることができます。マルウェアが/etc/resolv.confやルーター設定を書き換えることもあります。

DNSChangerマルウェアのような過去の脅威は、被害者のDNSを不正なサーバーへ何年にもわたってひそかに向け直していました。管理対象全体が実際にどのリゾルバーを使っているかを検証してください。

cat /etc/resolv.conf
# nameserver should match your trusted internal resolver

Bailiwick検証

リゾルバーはbailiwickルールを適用します。応答で提供できるのは、その応答が権威を持つゾーン内の名前に対するレコードだけです。bank.comへの応答にunrelated.comのレコードを忍び込ませることはできません。

これにより、Kaminsky型の注入を問い合わせ対象のドメインに限定し、1つの汚染された応答が無関係なゾーンまで汚染するのを防ぎます。リゾルバーが厳格なbailiwickフィルタリングを適用していることを確認してください。

ポイズニングの検知

ポイズニングが進行中、または成功したことを示す兆候:

  • ランダムで存在しないサブドメインへのクエリが急増する。
  • 同じTXIDに対する重複したDNS応答や、順序が入れ替わったDNS応答がある。
  • 解決されたIPが突然、予期しないASNや地域を指す。
  • リゾルバーの応答と、信頼できる別経路のルックアップ結果が一致しない。

多層防御

単一の制御だけでは不十分です。次の対策を組み合わせてください:

  • 送信元ポートとTXIDのランダム化により、オフパス攻撃のコストを引き上げます。
  • DNSSEC検証により、偽造応答を署名検証で失敗させます。
  • DoT/DoHにより、オンパス攻撃者から可視性と改ざんの機会を奪います。
  • 0x20エンコーディング(クエリ名の大文字・小文字をランダム化)により、エントロピーをさらに増やします。
  • NXDOMAINフラッドと応答の異常を監視します。

実運用の現実

実際には、パッチが適用されたリゾルバーに対する盲目的なオフパス・キャッシュポイズニングは現在ではまれです。しかし、UDPフラグメンテーションやSAD DNSのようなICMPベースのポート推測攻撃など、サイドチャネルを通じて再び発生することがあります。リゾルバーにパッチを適用し、検証機能を備えた暗号化リゾルバーを優先してください。

覚えておいてください。DNSへの侵害で最も影響が大きいのは、巧妙なポイズニング競争ではなく、レジストラのアカウントを盗まれることが多くあります。両方の端点を保護してください。

理解度チェック

カミンスキー攻撃手法の理解度を確認します。

まとめ

DNSスプーフィングは応答を偽造し、キャッシュポイズニングはその応答をリゾルバーに永続化します。受け入れの条件は、送信元IP、ポート、クエリ名、TXIDが一致することです。送信元ポートのランダム化とbailiwickチェックにより、オフパス攻撃者にとって攻撃のハードルは上がりましたが、オンパス攻撃者やサイドチャネルは依然として脅威です。

エントロピー、DNSSEC検証、暗号化トランスポート、監視を組み合わせた多層防御が不可欠です。次は、攻撃者がDNSを悪用してデータを移動させる方法、つまりトンネリングと情報窃取について見ていきます。

無料で開始

AI チューターと学ぶ Cyber Security Academy — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
76
レッスン
303

よくある質問

「DNSスプーフィングとキャッシュポイズニング」レッスンは無料ですか?

はい。「DNSスプーフィングとキャッシュポイズニング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。

「DNSスプーフィングとキャッシュポイズニング」で何を学びますか?

DNS応答を偽造する手法を学びます。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cyber Security Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「DNSスプーフィングとキャッシュポイズニング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCyber Security Academyレッスンでコードを書いて実行できますか?

はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. DNSの仕組みとリスク
  2. DNSスプーフィングとキャッシュポイズニング
  3. DNSトンネリングと情報窃取
  4. DNSSECとDNSフィルタリング
← Cyber Security Academyに戻る