DNSキャッシュポイズニングとは?仕組みや対策をわかりやすく解説!

あなたが普段インターネットを使ってWebサイトにアクセスするとき、その裏では「DNS(ドメインネームシステム)」という仕組みが重要な役割を果たしています。たとえば、ブラウザのURL欄にexample.comと入力するだけで、正しいWebページが表示されるのもDNSのおかげです。

しかしこのDNSには、悪意ある攻撃者が情報をすり替える「DNSキャッシュポイズニング」と呼ばれる危険な攻撃手法があります。

この記事では『DNSキャッシュポイズニング』について、以下の内容を図を用いてわかりやすく解説します。

  • DNSとは?
  • DNSのキャッシュとは?
  • DNSキャッシュポイズニングとは?
  • DNSキャッシュポイズニングの仕組み
  • DNSキャッシュポイズニングによる被害
  • DNSキャッシュポイズニングの対策

DNSとは?

DNSとは?

DNSは「ドメインネームシステム(Domain Name System)」の略です。一言で言えば、インターネット上の住所録のようなものです。

  • 人間はexample.comのような覚えやすい名前(ドメイン名)を使ってWebサイトにアクセスします。
  • しかしコンピュータ同士は192.0.2.1のようなIPアドレスで通信を行います。

DNSはこの「ドメイン名 ⇔ IPアドレス」の変換を行うシステムで、これを担当しているのがDNSサーバーです。

例えば、あなたがDNSサーバーに対して、「example.comのIPアドレスは何?」とか「IPアドレスが192.0.2.1のドメイン名ってなに?」と問い合わせると、DNSサーバーはそれぞれに対応するドメイン名やIPアドレスを答えてくれます。これは名前解決と呼ばれています。

あなたがexample.comにアクセスすると、裏側でDNSサーバーが働いて「このドメイン名は192.0.2.1というIPアドレスだよ」と教えてくれることで、通信が成立しているのです。

たとえば「山田さんに電話をかけたいな」と思ったとき、電話帳で名前から電話番号を調べますよね?DNSはこれと同じことをドメイン名とIPアドレスの間でやってくれます。

DNSのキャッシュとは?

DNSのキャッシュとは?

DNSキャッシュとは、DNSの名前解決の結果(「ドメイン名 ⇔ IPアドレス」の変換結果)を、一時的に保存しておく仕組みのことです。

インターネットでWebサイトにアクセスするとき、ユーザー(クライアント)のパソコンやスマホなどでは、スタブリゾルバー(DNSクライアント)がまず「このドメイン名(例:example.com)はどのIPアドレスなのか?」を調べようとします。

その問い合わせは、フルサービスリゾルバー(DNSキャッシュサーバー)に送られます。このフルサービスリゾルバーは、ユーザーの代わりに権威サーバー(権威DNSサーバー/DNSコンテンツサーバー)に問い合わせて正しいIPアドレスを取得します。

ただし、毎回かならず上位の権威サーバーに問い合わせていては、インターネット全体の負荷が大きくなってしまいます。そこで活躍するのがDNSキャッシュの仕組みです。問い合わせを処理するフルサービスリゾルバーは、過去に取得した名前解決の結果を一時的にローカルへ保存できます。この処理をキャッシングと呼び、保存された情報をキャッシュといいます。

一度キャッシュしておけば、ユーザーが同じドメインに再度アクセスした際、フルサービスリゾルバーは権威サーバーへ問い合わせることなく、手元のキャッシュから即座に応答できます。これにより、名前解決の高速化ネットワーク帯域や権威サーバーの負荷軽減といった効果が得られます。キャッシュの有効期間はレコードごとに設定されたTTL(Time To Live)に従い、期限が切れた情報は自動的に破棄・更新されます。

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

DNSキャッシュポイズニング(DNS cache poisoning)は、DNSのキャッシュに「偽のIPアドレス情報」を注入させる攻撃です。これにより、ユーザーは本来アクセスするはずだった正しいWebサイトではなく、攻撃者が用意した偽サイトへ誘導されてしまいます。

ここからは、「通常の名前解決の流れ」と「DNSキャッシュポイズニングが発生した場合の流れ」について、図を使ってわかりやすく説明します。

通常の名前解決の流れ

DNSキャッシュポイズニングとは? (通常の名前解決の流れ)
  1. スタブリゾルバー(DNSクライアント)が、example.comのIPアドレスをフルサービスリゾルバー(DNSキャッシュサーバー)に問い合わせる
    • example.comのIPアドレスは?」
  2. フルサービスリゾルバーが、権威サーバー(権威DNSサーバー/DNSコンテンツサーバー)に対して問い合わせる
    • example.comのIPアドレスは?」
  3. 権威サーバーが、フルサービスリゾルバーに正しい応答を返す
    • example.comのIPアドレスは、192.0.2.1です」
  4. フルサービスリゾルバーが、応答をキャッシュに保存
    • 以降、同じドメインへの問い合わせに対して高速に応答できるようにする
  5. フルサービスリゾルバーが、スタブリゾルバーに応答を返す
    • example.comのIPアドレスは、192.0.2.1です」
  6. スタブリゾルバーが、目的のサーバー(192.0.2.1)にアクセスして通信を開始する

DNSキャッシュポイズニングが発生した場合の流れ

DNSキャッシュポイズニングとは?
  1. スタブリゾルバー(DNSクライアント)が、example.comのIPアドレスをフルサービスリゾルバー(DNSキャッシュサーバー)に問い合わせる
    • example.comのIPアドレスは?」
  2. フルサービスリゾルバーが、権威サーバー(権威DNSサーバー/DNSコンテンツサーバー)に対して問い合わせる
    • example.comのIPアドレスは?」
  3. 権威サーバーが、フルサービスリゾルバーに正しい応答を返す
    • example.comのIPアドレスは、192.0.2.1です」
    • この時、攻撃者も同時に偽の応答「example.comのIPアドレスは、198.51.100.1です」をフルサービスリゾルバーに送信している
  4. フルサービスリゾルバーが、攻撃者からの偽の応答「example.comのIPアドレスは、198.51.100.1です」を受け取ってしまい、その偽情報をキャッシュに保存してしまう
  5. フルサービスリゾルバーが、スタブリゾルバー偽情報を返す
    • example.com のIPアドレスは198.51.100.1です」
  6. スタブリゾルバーは、正しいサーバー(192.0.2.1)ではなく、攻撃者が用意したサーバー(198.51.100.1)にアクセスして通信を開始してしまう。

DNSキャッシュポイズニングの由来

「ポイズニング(poisoning)」は英語で「毒を盛る」という意味です。正しい情報が保存されるはずのDNSキャッシュに、“毒”のような偽データを混ぜて汚染することから、「DNSキャッシュポイズニング」という名前がつきました。

DNSキャッシュポイズニングによる被害

DNSキャッシュポイズニングによる主な被害を以下に示します。

被害内容説明
フィッシング詐欺正規ドメインにアクセスしたつもりでも偽サーバーへ誘導され、ID/パスワードやクレカ情報を盗まれる。
マルウェア感染攻撃者が用意したマルウェア配布サイトにアクセスさせられる。
セッション乗っ取り偽ログイン画面で資格情報やセッショントークンを奪取され、正規サービスのアカウントを不正利用される。

DNSキャッシュポイズニングの対策

DNSキャッシュポイズニングを防ぐには、攻撃を未然に防止するための仕組みや、仮に攻撃を受けたとしても被害を最小限に抑えるための工夫が必要です。ここでは代表的な対策をいくつか紹介し、それぞれの特徴や注意点をわかりやすく解説していきます。

DNSSEC(DNS Security Extensions)の導入

DNSSEC(ディーエヌエスセック)は、DNSの応答に電子署名を付ける仕組みです。

通常のDNSでは、「example.comのIPアドレスは192.0.2.1です」という応答に対して、それが本物かどうかを確認する手段がありません。攻撃者が偽の応答を送っても、サーバーは区別できないのです。

DNSSECでは、権威DNSサーバーが応答データに電子署名を付け、受け取った側(DNSキャッシュサーバーなど)がその署名を検証します。これによって、「この応答が正しい権威サーバーから送られたものかどうか」を確認できます。

つまり、DNSSECを導入すれば、偽のDNS応答を見分けることができるため、DNSキャッシュポイズニングをほぼ完全に防げます。ただし、電子署名の鍵の管理や、DNSサーバー側の対応など、導入には手間と時間がかかるのが課題です。

SSL(TLS)の導入

SSL(TLS)は、Web通信を暗号化し、正しいサーバーとの通信であることを確認する仕組みです。

WebサイトにSSL証明書を設定して「HTTPS通信」を使うと、ブラウザは通信先の証明書を確認し、正しいサーバーかどうかをチェックします。

たとえDNSキャッシュポイズニングで偽サイトに誘導されても、証明書が正しくなければブラウザが警告を出してくれるのです。

TTLを短くしすぎない

DNSのキャッシュには有効期限があり、それを「TTL(Time To Live)」といいます。TTLが長いほどキャッシュが長持ちします。たとえば、TTLが3600(秒)なら、その情報は1時間キャッシュに残ります。

一見「TTLを短くすれば安全」と思いがちですが、実は逆効果になることもあります。TTLが短いと頻繁に上位サーバーへ問い合わせる必要があり、その分だけ攻撃のチャンスが増えるからです。

逆にTTLが長ければ、キャッシュが長期間保持されるため、途中で偽情報に書き換えられるリスクが減ります。そのため、TTLを極端に短くしすぎないことが安全上のポイントです。ただし、TTLを長くしすぎると、設定変更が反映されるまで時間がかかるというデメリットもあります。運用ではバランスを取ることが大切です。

本記事のまとめ

この記事では『DNSキャッシュポイズニング』について説明しました。

DNSはインターネットに欠かせない仕組みですが、その特性を逆手に取った「DNSキャッシュポイズニング」は、非常に巧妙で危険な攻撃です。ユーザーが気づかないうちに偽サイトへ誘導され、個人情報を盗まれる恐れもあります。

本記事で紹介したように、「DNSSECの導入」「HTTPSによる通信の保護」「TTL設定の見直し」など、複数の対策を組み合わせて安全性を高めることが大切です。DNSの仕組みとリスクを正しく理解し、安全なインターネット利用を心がけましょう。

お読み頂きありがとうございました。

スポンサーリンク