DNSキャッシュポイズニングとは?攻撃の仕組みから具体的対策まで徹底解説
この記事では、DNSキャッシュポイズニングについて分かりやすく解説します。仕組みや攻撃シナリオ、対策などを順を追って説明します。
DNSキャッシュポイズニングとは?
DNSキャッシュポイズニングは、DNSサーバが保持しているキャッシュ情報に偽のDNS情報を注入し、ユーザが本来とは異なるIPアドレスへ誘導されてしまう攻撃手法です。
たとえば、私たちが普段Yahooのサイトにアクセスする時、「yahoo.com」といったドメインにアクセスしますが、裏側の処理としてはDNSサーバーで「yahoo.com」に対応するIPアドレスが呼び出され、実際にはそのIPアドレスのサーバーにアクセスしていることになります。
しかしDNSキャッシュポイズニングが成功してしまうと、攻撃者が用意した悪意のあるサーバ(フィッシングサイトなど)に接続するよう誤誘導されます。
DNSの基本的な仕組みとキャッシュ
DNS(Domain Name System)は、ドメイン名(例: example.com)をIPアドレス(例: 93.184.216.34)に変換する仕組みです。主な流れは以下のとおりです。
- DNSリゾルバ(DNSサーバ)に問い合わせ
クライアント(PCやスマートフォンなど)は、インターネットプロバイダ(ISP)や社内のDNSリゾルバに「example.comのIPアドレスを教えてほしい」と問い合わせます。 - DNSリゾルバによるキャッシュ確認
DNSリゾルバは、まず自分がもつキャッシュに「example.com」の情報があるかどうかを確認します。- キャッシュにあれば、それを返答して終わりです。
- キャッシュになければ、ルートDNSサーバや権威DNSサーバに問い合わせを進めます。
- キャッシュの保持(TTL)
DNSリゾルバは、取得した名前解決情報を一定時間(TTL: Time To Live)キャッシュしておきます。次回同じ問い合わせが来たときは、キャッシュからすぐに返答できるため通信の効率が上がります。
DNSキャッシュポイズニングは、このDNSリゾルバが持つキャッシュの情報を偽装することで起きる攻撃です。
DNSキャッシュポイズニングの仕組み
DNSキャッシュポイズニングが成功すると、DNSキャッシュ内の情報が攻撃者によって書き換えられ(偽のIPアドレスに差し替えられ)、ユーザが意図せず攻撃者の管理するサイトへ誘導される可能性があります。一般的な手口は次のような流れです。
- リゾルバへの攻撃
攻撃者はDNSリゾルバに多数の偽の応答を送りつけます。リゾルバが正規サーバからの応答を待っている間に、攻撃者の偽応答を受け取ってしまうと、誤った情報がキャッシュされる可能性があります。 - クエリIDやソースポートの推測
DNSリゾルバが名前解決のために送信するDNSクエリには「クエリID」という識別子が含まれており、これが一致した応答を「正当な応答」として処理します。- かつてはクエリIDのビット数が少なく、推測が容易でした。
- ソースポートも固定・予測可能なケースでは、さらに攻撃が容易になります。
- キャッシュの書き換え
攻撃者がDNSリゾルバのクエリIDやソースポートをうまく推測しながら偽のDNS応答をリゾルバに届けると、正規サーバからの応答より先に受理されることがあります。リゾルバはこの偽情報を正しいものとしてキャッシュし、一定期間それをユーザに返すようになります。
このように、一時的でも攻撃者の偽応答が正規応答より先に「正しい応答」としてリゾルバに認識されると、キャッシュ内に誤った情報が格納され、ユーザは攻撃者の狙いどおりに誘導されてしまいます。
攻撃が成功するとどうなるのか?(シチュエーション例)
例:フィッシングサイトへの誘導
- ユーザが「bank.example.com」へアクセスしようとする。
- 企業やISPのDNSサーバが、bank.example.comを解決しようと権威サーバに問い合わせを始める。
- 攻撃者が、正規サーバの応答を待っている間に偽のDNS応答を送りつける。
- DNSサーバが誤って偽応答を受け取り、「bank.example.com」のIPアドレスとして攻撃者のフィッシングサイトをキャッシュしてしまう。
- その後、同じDNSサーバを利用しているユーザ全員が「bank.example.com」を開くと、攻撃者のサイトに誘導される。
- 見た目は本物そっくりのログインページだが、入力するとIDやパスワードが盗まれる。
例:マルウェア配布サイトへの誘導
- ユーザが正規のソフトウェア配布サイトへアクセスしようとする。
- 上記と同様の手口でDNSのキャッシュ情報が書き換えられる。
- ユーザがアクセスすると、実際には攻撃者が用意したマルウェア配布サイトへ誘導され、偽のソフトウェアをダウンロードしてしまう。
いずれの場合も、キャッシュが汚染されたDNSサーバを使うユーザは、正しいサイトにアクセスしていると信じてしまうため、被害が拡大しやすい点が特徴です。
攻撃を防ぐ対策
DNSキャッシュポイズニングを防ぐためには、複数の対策が考えられます。主な対策は以下のとおりです。
ソースポートランダム化
- ソースポートをランダム化し、攻撃者がクエリIDと合わせて推測しにくくする。
- 現在の多くのDNSソフトウェアはデフォルトで対応していますが、古い環境では設定が必要な場合があります。
DNSSECの導入
- DNSSEC(DNS Security Extensions)を導入すると、DNS応答が署名され、正当性を検証できるようになります。
- DNSSECでは応答にデジタル署名がつくため、偽の応答が送り込まれても検証に失敗し、キャッシュ汚染を防ぎやすくなります。
- 導入コストや運用面の課題もあるため、すべてのドメインで導入されているわけではありませんが、近年は徐々に普及が進んでいます。
短いTTLの活用
- DNSレコードのTTL(キャッシュとして保持される有効期限)を短く設定し、キャッシュが長期間保持されないようにすることで、キャッシュ汚染の影響を小さくできます。
- ただしTTLが短すぎると問い合わせが増え、パフォーマンスに影響する場合があります。
DNSサーバソフトウェアの最新化
- DNSサーバソフトウェア(BINDやUnboundなど)を最新バージョンに保つことにより、既知の脆弱性を修正し、より安全な実装を利用できます。
- 古いバージョンではソースポート固定などの問題が残っている可能性があるため注意が必要です。
ネットワーク機器での防御
- ルータやファイアウォールなど、ネットワーク機器でDNSトラフィックを監視し、不正なDNS応答をブロックする仕組みを整える。
- IDS/IPS(侵入検知システム/侵入防止システム)でDNSトラフィックを監視し、怪しい通信を検知・ブロックする対策も有効です。
DNSキャッシュポイズニング対策を強化すべき理由
- 不正サイトへの誘導は被害が大きい
フィッシング詐欺やマルウェア配布など、多くのユーザが一度に被害を受けるリスクがあります。 - DNSはインフラの根幹
DNSはインターネット通信の基盤技術であり、多くのサービスに影響を与えます。 - 攻撃コストが比較的低い
過去にはクエリIDやソースポートを予測しやすい実装が多く、攻撃者の手間がそれほどかからない時期もありました。現在はランダム化などで対策が進んでいますが、油断は禁物です。
CSRF攻撃とは?仕組み・リスク・最新の対策方法をわかりやすく解説
まとめ
- DNSキャッシュポイズニングはDNSサーバ(リゾルバ)のキャッシュに偽の情報を注入し、ユーザを悪意のあるサイトに誘導する攻撃です。
- 攻撃者はクエリIDやソースポートを推測して偽のDNS応答を送り込み、正規応答より先にDNSサーバが受理するとキャッシュが汚染されます。
- 対策としては、ソースポートのランダム化・DNSSECの導入・ソフトウェアの最新化・ネットワーク機器での監視などが挙げられます。
DNSはインターネット利用に欠かせない仕組みであり、その脆弱性を突いた攻撃は大きな被害につながります。管理者の方は日頃からDNSサーバの設定やバージョンを確認し、必要に応じてDNSSECの導入などセキュリティ対策を実施することが重要です。