DNSキャッシュポイズニングとは|DNSの仕組みを悪用する攻撃手法と対策を理解する

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

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

DNSはインターネットを支える重要な仕組みですが、その仕組みを悪用した攻撃も存在します。

その代表的なものがDNSキャッシュポイズニングです。

DNSキャッシュポイズニングが成功すると、利用者は本物のWebサイトへアクセスしているつもりでも、実際には攻撃者が用意した偽サイトへ誘導される可能性があります。

企業ネットワークやインターネットサービスにおいても重大なセキュリティリスクとなるため、DNS管理者だけでなくインフラエンジニアも理解しておくべき攻撃手法です。

本記事ではDNSキャッシュポイズニングの仕組みや攻撃方法、防御策について解説します。

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

DNSキャッシュポイズニングとは、DNSサーバのキャッシュへ偽のDNS情報を登録させる攻撃です。

ポイズニング(Poisoning)は「毒を盛る」という意味があります。

DNSキャッシュへ誤った情報を混入させることから、この名前で呼ばれています。

DNSキャッシュとは

DNSサーバは問い合わせ結果を一定時間保存します。


www.example.com
↓
203.0.113.10
↓
キャッシュ保存

同じ問い合わせが来た際に高速応答するためです。

キャッシュの正常な流れ


利用者
↓
キャッシュDNS
↓
権威DNS
↓
応答取得
↓
キャッシュ保存

これが通常動作です。

攻撃者の狙い

攻撃者はこのキャッシュ情報を書き換えようとします。


www.bank.com
↓
本来
203.0.113.10

攻撃後
198.51.100.10

利用者は偽サイトへ誘導されます。

なぜ危険なのか

利用者側からは気付きにくいことが特徴です。

URLは正しく見えます。


https://www.bank.com

しかし接続先は偽物です。

攻撃の流れ

簡略化すると次のようになります。


利用者
↓
DNS問い合わせ
↓
攻撃者
↓
偽応答送信
↓
キャッシュ登録

DNSサーバが偽応答を信じてしまうと攻撃成功です。

昔のDNSの問題点

初期のDNSはセキュリティを重視して設計されていませんでした。

そのため応答の正当性確認が弱く、偽応答が受け入れられることがありました。

トランザクションIDとは

DNSには問い合わせ識別番号があります。


Transaction ID

応答時に一致確認を行います。

攻撃者が狙うポイント

攻撃者はこのIDを推測します。


問い合わせ
↓
ID予測
↓
偽応答送信

成功するとキャッシュが汚染されます。

キャッシュ汚染後の状態


利用者A
↓
偽IP

利用者B
↓
偽IP

利用者C
↓
偽IP

キャッシュを利用する全員へ影響します。

攻撃の影響

  • フィッシングサイト誘導
  • 認証情報窃取
  • マルウェア感染
  • サービス妨害
  • 通信盗聴

非常に危険な攻撃です。

実際に起こった大規模事例

DNSキャッシュポイズニングは過去に多数発生しています。

特に有名なのがKaminsky攻撃です。

この攻撃は後続の記事で詳しく解説します。

TTLの影響

キャッシュはTTLが切れるまで残ります。


TTL 86400

24時間影響が続く可能性があります。

キャッシュDNSが狙われる理由

キャッシュDNSは多くの利用者が共有します。


利用者1000人
↓
キャッシュDNS

1台を汚染するだけで大きな影響があります。

オープンリゾルバとの関係

外部公開されたキャッシュDNSは攻撃対象になりやすくなります。

適切なアクセス制御が必要です。

確認方法

異なるDNSサーバへ問い合わせます。

$ dig @8.8.8.8 example.com

$ dig @1.1.1.1 example.com

結果が異なる場合は注意が必要です。

ログ確認

# journalctl -u named

不審な問い合わせを確認できます。

BINDで実施されている対策

  • ランダムポート利用
  • ランダムID利用
  • キャッシュ保護機能

現代のBINDは大幅に強化されています。

ファイアウォール対策

不要なDNSアクセスを制限します。

allow-query
allow-recursion

適切に設定します。

DNSSECによる防御

現在最も有効な対策の一つです。

DNS応答へ電子署名を付与します。


問い合わせ
↓
署名確認
↓
正当性検証

偽応答を検知できます。

企業で実施すべき対策

  • BIND最新版利用
  • オープンリゾルバ禁止
  • DNSSEC利用
  • ログ監視
  • アクセス制御
  • 定期アップデート

実務で確認する設定

recursion yes;

allow-recursion {
    192.168.0.0/16;
};

内部利用者だけに限定します。

実務で覚えておきたいポイント

  • DNSキャッシュへ偽情報を登録する攻撃である
  • 利用者を偽サイトへ誘導できる
  • キャッシュDNSが主な標的である
  • TTL期間中は影響が継続する
  • オープンリゾルバは危険である
  • DNSSECが有効な対策となる

まとめ

DNSキャッシュポイズニングはDNSキャッシュへ偽情報を登録させる攻撃であり、利用者を偽サイトへ誘導したり、認証情報を窃取したりする危険な攻撃です。

現代のDNSサーバは多くの対策を実装していますが、設定ミスや古いソフトウェアを利用している環境では依然としてリスクが存在します。

DNSSECの導入やアクセス制御、定期的なアップデートを実施することで、安全なDNS運用を実現することが重要です。