インターネットを便利に使える一方で、思わぬリスクが潜んでいることがあります。
中でも、DNSキャッシュポイズニングはその典型例と言えるでしょう。
これは、DNSサーバのキャッシュに偽の情報が紛れ込み、ユーザーを攻撃者の用意した偽サイトへ巧妙に誘導する仕組みです。
この攻撃によって、個人情報の詐取、マルウェア感染、さらには企業の機密情報の漏洩など、より深刻な被害に発展する恐れがあります。

対策を怠ると影響は広範囲に及ぶため、十分な注意が必要です。



何それ、すっごく怖いです!
DNSキャッシュポイズニングとは



まずはDNSの仕組みについて簡単に復習をしましょう。
DNS(Domain Name System)は、インターネット上でドメイン名(例:www.example.com)をIPアドレス(例:192.0.2.1)に変換する仕組みです。
パソコンがWebサイトへアクセスするとき、まずキャッシュDNSサーバ(リゾルバ)に問い合わせを行います。
もしキャッシュDNSサーバに該当する情報があれば、その情報を使って応答します。


もしキャッシュに情報がない場合、キャッシュDNSサーバは権威DNSサーバに問い合わせを行い、最新の情報を取得します。
このとき得られた情報はキャッシュとして一定期間保存され、次回以降の同じ問い合わせは権威DNSサーバに聞きに行かずに高速に応答できます。



このキャッシュ機能のおかげで、Webページの表示が早くなって、ネットワークの負荷も軽減されるのでしたよね。



しかしこの仕組みを悪用した攻撃がDNSキャッシュポイズニングであることも忘れてはいけません。
DNSキャッシュポイズニング(DNSキャッシュ汚染)とは、DNSサーバのキャッシュに偽の情報を注入し、ユーザーを本来とは異なるサイトやIPアドレスへ誘導する攻撃手法です。
これは、インターネット上のやりとりに不可欠なDNSという仕組みを逆手に取った攻撃で、非常に巧妙かつ深刻な脅威となります。
キャッシュサーバが権威サーバに問い合わせる際、悪意のある攻撃者が偽の返答を送ることで、それがキャッシュに記録されてしまうことがあります。



偽のキャッシュ情報が記録され、そこにアクセスさせられてしまうのですね。
このとき、攻撃者が細工した応答がDNSキャッシュに保存されると、次に同じドメイン名を解決しようとする際にも、その偽情報が使われ続けるため、ユーザーは本来の正しいサイトではなく、攻撃者が用意したフィッシングサイトやマルウェア配布サイトなどの悪意のあるIPアドレスにアクセスしてしまい、個人情報を盗まれたり、マルウェアに感染したりするリスクが高まります。
こうした被害は一般のユーザーだけでなく、企業のネットワーク環境にも大きな影響を与えるため、DNSキャッシュポイズニング対策の重要性がますます高まっています。
攻撃の仕組み
DNSキャッシュポイズニングは、DNSというインターネットの根幹を支える仕組みを悪用した、非常に巧妙で見えにくい攻撃のひとつです。
特に注意すべきは、DNSサーバが正規の情報をまだ取得していないタイミングを突かれ、攻撃者によって偽の情報が先に注入されてしまう点にあります。
ユーザー側は普段どおりにWebサイトにアクセスしているつもりでも、実際には全く別の悪意あるページに誘導されていることに気づかないケースが多いのです。



正規のWEBサイトにアクセスしたつもりで偽サイトにアクセスしていたらとっても怖いです。
こうした攻撃は、わずかなタイミングと技術的なすき間を狙って行われるため、一度成立してしまうと非常に厄介です。
以下では、DNSキャッシュポイズニングがどのように行われるのか、その基本的な攻撃の流れを5つのステップでわかりやすく解説します。
1.ユーザーがDNSサーバに問い合わせを行う
ユーザーは、特定のWebサイトにアクセスするために、ドメイン名に対応するIPアドレスをキャッシュDNSサーバに問い合わせます。


2.キャッシュがなければ権威DNSサーバに問い合わせる
キャッシュDNSサーバは、必要な情報が手元にない場合、正規の権威DNSサーバに問い合わせを行います。このとき、DNSパケットには送信元ポート番号とトランザクションIDが含まれており、正当な応答と偽の応答を見分ける重要な手がかりとなります。


3.攻撃者が先回りして偽の応答を送りつける
攻撃者は、送信元IPアドレスを詐称した上で、正規の権威サーバよりも早く偽の応答をキャッシュDNSサーバに返します。この偽の応答には、攻撃者が用意した偽のIPアドレスが含まれており、トランザクションIDとポート番号も一致させようと試みます。


4.キャッシュDNSサーバが偽の情報を記録する
トランザクションIDとポート番号が一致してしまうと、キャッシュDNSサーバはその応答を正規のものと誤認し、偽のIPアドレスをキャッシュに保存してしまいます。もし一致しなければ、応答は破棄されるため、攻撃は成立しません。


5.ユーザーが偽のサイトに誘導される
その後、ユーザーが同じドメインにアクセスしようとすると、キャッシュDNSサーバはキャッシュされた偽のIPアドレスを返します。結果として、ユーザーは攻撃者の用意した偽サイトにアクセスしてしまい、情報漏洩やマルウェア感染などの被害にあう恐れがあります。


この一連の流れが、DNSキャッシュポイズニングの典型的な攻撃手法です。



とても怖い攻撃だということがわかりました。
影響
DNSキャッシュポイズニングが成功すると、ユーザーは攻撃者の用意した不正なサイトに誘導され、フィッシング詐欺(ID・パスワードの窃取)、マルウェア感染、セッションハイジャックなど、さまざまな被害を受ける可能性があります。
さらに、この攻撃はユーザーの個人情報だけでなく、会社のシステムやネットワーク全体に深刻な影響を及ぼすこともあります。



たとえば、攻撃者が企業内の機密情報を盗み出したり、正規の業務通信を改ざんして不正操作を行うなど、被害が拡大する恐れがあります。
そのため、DNSキャッシュポイズニングは個人だけでなく、組織全体で対策を講じる必要があります。
DNSキャッシュポイズニングへの対策
DNSキャッシュポイズニングは、巧妙かつ深刻なサイバー攻撃のひとつであり、完全に防ぐことは難しいですが、複数の実践的な対策を組み合わせることでリスクを大きく軽減できます。
ここからは、技術的な防御手段や運用面での管理体制に基づいた具体的な対策方法について、項目ごとに整理して解説していきます。



DNSキャッシュポイズニングを防ぐためには、いくつかの具体的な対策が考えられます。
トランザクションIDとポート番号のランダム化
DNSキャッシュポイズニングを防ぐ上で鍵となるのは、DNS応答が「正規のもの」であると判断されるには、トランザクションIDと送信元ポート番号の両方が一致している必要があるという点です。
以下の流れで仕組みを整理しておきましょう。
- キャッシュサーバ(DNSリゾルバ)は、問い合わせごとにランダムなトランザクションIDを生成します。
- さらに、送信元ポート番号も通常の53番ではなく、ランダムな動的ポートを使用します。
- この情報は、DNSクエリのパケットに含まれます。具体的には、トランザクションIDはDNSデータ部に、送信元ポート番号はTCP/UDPヘッダに記載されます。
- 権威DNSサーバはこの問い合わせを受け取ると、同じトランザクションIDをDNS応答に埋め込み、ポート番号は受け取ったもの(つまりキャッシュサーバのもの)を宛先にして返信します。
- キャッシュサーバは、自分が発信に使ったポート番号に戻ってきた応答を受け取り、さらにトランザクションIDが一致していることを確認することで、応答を正当なものと判断します。
この仕組みによって、DNSリゾルバはある種の「本人確認」を行っているわけですが、攻撃者が偽の応答を注入するには、ポート番号とトランザクションIDの両方を正確に予測する必要があるというハードルがあります。
このハードルをさらに高くするためには、以下のような対策が有効です。
- トランザクションIDを0〜65535の範囲からランダムに選ぶ。
- ポート番号もランダムに変化させ、できるだけ予測されにくい値を用いる。
- UDPだけでなくTCP通信時にもポート番号のランダム化を徹底する。
- 複数のポート番号とトランザクションIDを同時に利用する設計で、攻撃者の試行成功率をさらに下げる。
DNSは通常、軽量で高速な通信が可能なUDP(User Datagram Protocol)を使ってやりとりされますが、応答サイズが大きい場合やDNSSECを使うとTCPが使われることがあります。UDPはコネクションレスであるため偽装されやすく、攻撃の標的になりやすいのですが、TCPでもポート番号が固定されていれば同様の脆弱性が生まれます。
攻撃者は、DNSキャッシュポイズニングを成功させるために、DNSリクエストに対する応答の「トランザクションID」と「送信元ポート番号」を一致させる必要があります。ポート番号が固定されていると、攻撃者は推測が容易になるため、成功率が上がってしまいます。そこで、UDP・TCPともにポートをランダムにすることで、攻撃者が成功する確率を著しく下げることができるのです。
攻撃者がDNSキャッシュポイズニングを成功させるには、
- DNSリクエストのトランザクションID(識別番号)
- 送信元ポート番号
この2つを正確に予測しなければなりません。
通常のDNSでは、1つのポート番号と1つのトランザクションIDでリクエストとレスポンスを管理していますが、この方式だと、運が良ければ攻撃者が一致させてしまう可能性があります。
それに対し、複数のポート番号と複数のトランザクションIDを同時に使う方式にすることで、
- 攻撃者が一致させなければならない「組み合わせ」が指数関数的に増え、
- 試行(偽の応答を送る)を成功させる確率が劇的に下がります。
これはいわば、「鍵穴が1つ」ではなく「複数の鍵穴を同時に正しく合わせないと開かない扉」にするようなものです。
これらの工夫を組み合わせることで、DNSキャッシュポイズニングに対する防御力は飛躍的に高まり、攻撃の成立を極めて困難にすることができます。
キャッシュサーバの非公開化とアクセス制限
DNSキャッシュサーバをインターネットに公開せず、社内ネットワークのみに限定して運用することも重要です。
DMZではなく社内に設置し、外部からの不正アクセスのリスクを最小限に抑える構成とすることが望まれます。


また、設定で社内からの問い合わせのみに応答するよう制限を設け、外部からのアクセスを遮断することで、オープンリゾルバになることを防ぎます。
※オープンリゾルバとは、誰でも自由にアクセスしてDNSの名前解決ができるように公開されているDNSリゾルバのことです。たとえば、IPアドレスさえ知っていれば、社外のユーザーや攻撃者でもそのDNSサーバに問い合わせを送ることができます。
これにより、外部の攻撃者がキャッシュサーバに対して偽の問い合わせや応答を送信することが物理的に難しくなり、攻撃の足がかりを断つことが可能になります。



さらに、ファイアウォールやアクセス制御リスト(ACL)といった既存のセキュリティ対策と連携させることで、内部外部問わず不正アクセスを監視・遮断する多層的な防御体制を築くことができます。
ログ監視とソフトウェアの更新
組織内の情報資産を守るためには、DNSサーバやネットワーク機器のログを定期的に監視し、不審な挙動がないかチェックすることが大切です。
特に、異常なDNSリクエスト数や特定ドメインへの集中アクセスが見られる場合には、攻撃の前兆である可能性もあるため注意が必要です。
こうした監視は、SIEM(セキュリティ情報イベント管理)ツールやIDS(侵入検知システム)と連携することで、リアルタイムに異常を検出し、迅速な対応を可能にします。



監視のためのシステムも色々とあるのですね。
加えて、DNS関連ソフトウェアやOSのアップデートを適切なタイミングで行うことも欠かせません。
これにより、既知の脆弱性を早期に解消し、新たな攻撃手法に対しても柔軟に対応できる体制が整います。
定期的なパッチ適用スケジュールを設け、自動化ツールと組み合わせることで、更新の抜け漏れを防ぐ運用体制を築きましょう。
DNSSEC(DNS Security Extensions)
DNSSEC(Domain Name System Security Extensions)は、DNS応答の正当性を保証し、DNSキャッシュポイズニング対策として非常に有効な仕組みです。
DNSリゾルバがDNSサーバからの応答を検証し、デジタル署名の整合性を確認することで、不正な応答がキャッシュに記録されないように防止します。



デジタル署名や暗号化の技術がここでも使われるのですね。
DNSSECは公開鍵暗号方式を利用しており、DNSゾーンごとに署名鍵(ZSK)と鍵署名鍵(KSK)を管理します。
これにより、DNSゾーン内のデータが改ざんされていないことを確認でき、ユーザーがアクセスするWebサイトやサービスの正当性を担保します。
さらに、DNSSECはDNS問い合わせの途中でデータが書き換えられた場合にも検知可能で、被害を最小限に抑えられます。



改ざんも検知できるのですね。
さらに、DNSSECはデジタル署名の検証により、権威サーバの応答が正当であることを証明するため、攻撃者による偽応答の混入を防ぐ役割も担います。
また、DNSSECはチェーンオブトラストという仕組みで、ルートゾーンから権威サーバまで段階的に正当性を保証するため、全体として信頼性が向上します。
運用の流れは次のとおりです。
- ユーザーからのDNS問い合わせを受ける
- 権威サーバが署名付きの応答を返す。
- リゾルバが署名付き応答を検証する。
- 署名が一致すれば安全と判断してキャッシュに保存する。
署名が一致しなければ、不正な応答として破棄されます。



先程解説した攻撃の手順の3番目、偽の情報を送り付ける段階で、署名が一致しなければキャッシュDNSサーバに情報が弾かれ、権威DNSサーバからの正しい情報をキャッシュ出来るようになります。


この仕組みにより、DNSキャッシュポイズニングのリスクを大幅に軽減できます。
また、DNSSECは既存のDNSシステムに追加で導入でき、段階的に設定できるため、段階的な移行やテスト環境での確認もしやすいのが特徴です。



DNSSECを導入することで、インターネット全体の信頼性向上にも貢献します。
まとめ
DNSキャッシュポイズニングは、ユーザーを偽サイトに誘導し、深刻な被害を与える攻撃手法です。
DNSSECの導入やソフトウェアの最新化、ランダムソースポートの活用など、複数の対策を組み合わせてリスクを軽減しましょう。
さらに、定期的な監査やアクセス制御、セキュリティログの監視も欠かせません。
攻撃者は手口を常に変化させてくるため、組織全体でセキュリティ教育や運用体制の強化を図ることも重要です。



DNSキャッシュポイズニングの脅威を正しく理解し、技術面と運用面の両面から総合的に対策を実施することが、被害を最小限に抑える鍵となります。