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

攻撃者はDNSリゾルバーを欺きDNSキャッシュを汚染して偽情報を保存させ、リゾルバーが、クライアントに間違ったIPアドレスを送信します。Webサイトへ閲覧することを試みるユーザーは、不正な場所へ転送されます。

Share facebook icon linkedin icon twitter icon email icon

DNSスプーフィング

学習目的

この記事を読み終えると、以下のことができます。

  • DNSキャッシュ・ポイズニングの定義
  • DNSキャッシングの仕組みを理解する
  • 攻撃者がどのようにDNSキャッシュを汚染するか説明します
  • DNSSECがDNSキャッシュ汚染攻撃をどのようにして防止するか理解します

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

上級生のいたずらとして、高校3年生が高校の教室の番号をすべて変えてしまうことを想像します。新入生は、構内を知らないため、翌日間違った教室に来てしまいます。誤って組合せた教室番号が記録されると、誰かがディレクトリーの書き換えに気づき修正するまで、学生が間違った教室に入ります。

DNSキャッシュ・ポイズニングはDNSキャッシュに偽情報を入力し、DNSは、正しくない応答を行い、ユーザーを間違ったWebサイトに接続します。DNSキャッシュ・ポイズニングは「DNSスプーフィング」としても知られています。 IPアドレスは、インターネットの「教室番号」で、Webトラフィックが適切な場所に着くことを可能にします。DNSリゾルバー・キャッシュは「構内図」で、不完全な情報を保存している場合、キャッシュされた情報が修正されるまで、トラフィックは間違った場所に転送されてしまいます。(実際のIPアドレスと本物のWebサイトが分離されているわけではないことに注意してください。)

典型的には、DNSリゾルバーのキャッシュ中のデータを確認する方法がないため、Time to Live (TTL)時間が終了するまで、または手動で削除されるまで、正しくないDNS情報がキャッシュに残されます。多くの脆弱性からDNSポイズニングを可能になりますが、主な問題は、DNSははるかに小さな規模のインターネットのために構築され、(BGPと同様)信頼の原理に基づいていることですDNSSECというより安全なDNSプロトコルはこうした問題の一部を解決できますが、まだ広くは採用されていません。

DNSリゾルバーの仕組みは?

DNSリゾルバーは、ドメインネームに関係したIPアドレスをクライアントに提供します。言いかえれば、これらは、「cloudflare.com」のような人間の判読可能なWebサイト・アドレスを、機械可読のIPアドレスに変換(翻訳)します。ユーザーがWebサイトを閲覧しようとする場合、オペレーティング・システムはDNSリゾルバーへのリクエストを送信します。DNSリゾルバーはIPアドレスで応答し、Webブラウザはこのアドレスを取得し、Webサイトの読み込みを始めます。

DNSキャッシングの仕組みは?

DNSリゾルバーは、IPアドレスクエリに対する応答を一定時間保存します。このように、リゾルバーは、典型的なDNS解決プロセスに関与する多くのサーバーとの通信する必要をなくし、将来のクエリに非常に速く対応することができます。DNSリゾルバーはそれらのキャッシュの中でIPアドレスに関連した応答をTime to Live (TTL)時間まで保存します。

DNSのキャッシュされない応答:

DNS uncached response

DNSのキャッシュ済み応答:

DNS cached response

攻撃者はDNSキャッシュをどのように汚染するか

攻撃者はDNSネームサーバーを偽装することによりDNSキャッシュを汚染し、DNSリゾルバーにリクエストを送信します。DNSリゾルバーがネームサーバーにクエリを行う場合に、返答を偽造します。DNSサーバーがTCPの代わりにUDPを使用し、および現時点でDNS情報の確認がないことが悪用されています。

DNSキャッシュ・ポイズニング・プロセス:

DNS Cache Poisoning Process

汚染されたDNSキャッシュ:

Poisoned DNS Cache

DNSリクエストおよびレスポンスは、通信の両側でデバイスの同一性を確認する「ハンドシェイク」が必要なTCPを使用せず、UDP、あるいはユーザーデータグラムプロトコルを使用します。UDPでは、接続がオープンである、受信者は情報を受け取る準備ができている、あるいは、送信者が本物である保証がありません。この理由からUDPには脆弱性があります。攻撃者はUDPによってメッセージを送信し、ヘッダーデータを偽造し、本物のサーバーの応答であるかのように偽装します。

DNSリゾルバーが偽造された応答を受け取ると、情報が正確で正当なものかどうかを確認する方法がないので、データは無批判に受理されキャッシュされます。DNSはインターネットの初期の時期に作成されたため、接続利用者は、大学と研究センターのみでした。偽のDNS情報が広がる可能性はありませんでした。

DNSキャッシング・プロセスでの脆弱性があるもののDNSを汚染する攻撃はそれほど容易ではありません。DNSリゾルバーは、権威ネームサーバーに即時クエリを行うので、攻撃者は、権威ネームサーバーからの実際の応答が到着する前に、偽の応答を送信できる時間は、数ミリセカンドです。

攻撃者は、さらにDNSスプーフィング攻撃を行なうには次のような多くの情報要素を手に入れるあるいは推測しなければなりません。

  • ターゲットとされたDNSリゾルバーによってキャッシュされない、つまりリゾルバーが権威ネームサーバーにクエリを行うDNSクエリがどれか。
  • DNSリゾルバーが使用しているポート*-かつては同じポートをすべてのクエリに使用していましたが、今では毎時間異なるポートをんだむに使用します
  • リクエストIDナンバー
  • クエリがどの権威ネームサーバーに送信されるか

攻撃者は、さらにその他の方法でDNSリゾルバーへのアクセスを獲得することができます。悪意のある攻撃者はDNSリゾルバーへのアクセスを変造し、ハッキングし、物理的なアクセスをクラックすることでキャッシュされたデータをより容易に偽造することができます。

*ネットワーキング内では、ポートはコミュニケーション受信の仮想ポイントです。コンピューターには各々番号を持つ多数のポートがあり、コンピューターが互いに通信するには、ある種類の通信では特定のポートを指示しなければなりません。例えば、HTTP通信ではポート80で、HTTPSは常にポート443を使用します。

DNSスプーフィングおよび検閲

政府の中は、あるWebサイト、あるいはWebリソースへのアクセスを禁止するために、国内のDNSキャッシュポイズニングを故意で行っているものもあります。

DNSSECは、どのようにしてDNS汚染を防止するか

DNSSECはドメイン・ネーム・システム・セキュリティ拡張(Domain name System Security Extensions)の短縮形で、それはDNSデータの完全性および起源を確認する手段です。DNSは、元来そのような確認なしで設計されました。したがって、DNS汚染が可能になっています。

TLS/SSLのように、DNSSECは、データを確認し確証するために公開鍵暗号作成法(デジタル情報署名方法)を使用します。DNSSEC拡張は2005年に公表されましたが、主流ではなく、DNSSECはDNS攻撃にはまだ脆弱性を持っています。