攻撃者はDNSリゾルバーを欺きDNSキャッシュを汚染して偽情報を保存させ、リゾルバーが、クライアントに間違ったIPアドレスを送信します。Webサイトへ閲覧することを試みるユーザーは、不正な場所へ転送されます。
この記事を読み終えると、以下のことができるようになります。
関連コンテンツ
是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!
記事のリンクをコピーする
DNSキャッシュポイズニングはDNSキャッシュに偽情報を入力し、DNSは、正しくない応答を行い、ユーザーを間違ったWebサイトに接続します。DNSキャッシュポイズニングは「DNSスプーフィング」としても知られています。IPアドレスは、インターネットの「教室番号」で、Webトラフィックが適切な場所に着くことを可能にします。DNSリゾルバーキャッシュは電話番号をまとめた電話帳のようなもので、不完全な情報を保存している場合、キャッシュされた情報が修正されるまで、トラフィックは間違った場所に転送されてしまいます。(実際のIPアドレスと本物のWebサイトが分離されているわけではないことに注意してください。)
典型的には、DNSリゾルバーのキャッシュ中のデータを確認する方法がないため、Time to Live (TTL)が期限切れになるか、手動で削除されるまで誤ったDNS情報がキャッシュに残ります。多くの脆弱性からDNSポイズニングが可能ですが、主な問題は、DNSがはるかに小さな規模のインターネットを意図して構築されており、(BGPのような)信頼の原理に基づいていることです。DNSSECと呼ばれる、よりセキュアなDNSプロトコルは、これらの問題の一部を解決することを目的としていますが、まだ広く採用されていません。
DNSリゾルバーは、ドメイン名に関係したIPアドレスをクライアントに提供します。言い換えれば、「cloudflare.com」のような人間が読めるWebサイトのアドレスを取得し、それらをマシンが読めるIPアドレスに変換します。ユーザーがWebサイトに移動しようとすると、オペレーティングシステムはDNSリゾルバーにリクエストを送信します。DNSリゾルバーはIPアドレスで応答し、Webブラウザはこのアドレスを取得し、Webサイトの読み込みを始めます。
DNSリゾルバーは、一定時間IPアドレスクエリへの応答を保存します。このようにして、リゾルバーは、将来のクエリに対して、一般にDNS解決プロセスに関係する多くのサーバーと通信する必要なく、はるかに迅速に応答できます。DNSリゾルバーは、そのIPアドレスに関連付けられた指定されたTime to Live (TTL)が許可する限り、キャッシュに応答を保存します。
DNSキャッシュなし応答:
DNSキャッシュ済み応答:
攻撃者は、 DNSネームサーバーになりすましてDNSリゾルバーにリクエストを行い、DNSリゾルバーがネームサーバーに問い合わせるときに応答を偽造することにより、DNSキャッシュをポイズニングできます。これは、DNSサーバーがTCPではなくUDPを使用し、現在DNS情報の検証手段がないために可能です。
DNSキャッシュポイズニングプロセス:
ポイズニングされたDNSキャッシュ:
DNSリクエストとレスポンスでは、通信を開始するために通信を行う双方が「ハンドシェイク」を行う必要があるTCPを使う代わりに、UDP(User Datagram Protocol)を用います。UDPでは、接続が開いていること、受信者が受信の準備ができていることは保証されません。攻撃者は、ヘッダーデータを偽造することでUDP経由でメッセージを送信し、正当なサーバーからの応答を装うことができます。
DNSリゾルバーが虚偽の応答を受信した場合、情報が正確で正当なソースからのものであるかどうかを確認する方法がないため、データを無差別に受け入れてキャッシュします。DNSは、インターネットの初期、接続しているのは大学と研究センターだけであった頃に作成されたため、誰かが虚偽のDNS情報を広めることを予期する理由はありませんでした。
これらのDNSキャッシュプロセスの脆弱性の主要なポイントにもかかわらず、DNSポイズニング攻撃は簡単ではありません。DNSリゾルバーは実際に権威ネームサーバーに問い合わせるため、攻撃者は権威ネームサーバーからの実際の応答が到着する前に偽の応答を送信するのに数ミリ秒しかありません。
攻撃者は、DNSスプーフィング攻撃を行うために、次のような多くの情報要素を手に入れるか、推測する必要があります。
攻撃者は他の方法でDNSリゾルバーにアクセスすることもできます。悪意のある者がDNSリゾルバーを操作、ハッキング、または物理的にアクセスした場合、キャッシュされたデータをより簡単に変更できます。
*ネットワークでは、ポートは通信受信の仮想ポイントです。コンピューターには複数のポートがあり、それぞれに独自の番号が付いています。コンピューターが相互に通信するには、特定の種類の通信用に特定のポートを指定する必要があります。たとえば、HTTP通信は常にポート80に送信され、HTTPSは常にポート443を使用します。
一部の政府は、特定のWebサイトやWebリソースへのアクセスを禁止するために、国内で、故意にDNSキャッシュポイズニングを行っています。
DNSSECはDomain Name System Security Extensionsの略で、DNSデータの整合性と発信元を検証する手段です。DNSは元々そのような検証なしで設計されたため、DNSポイズニングが可能です。
TLS/SSLと同様に、DNSSECは公開鍵暗号化(情報にデジタル署名する方法)を使用してデータを検証および認証します。DNSSEC拡張機能は2005年に公開されましたが、DNSSECはまだ主流ではないため、DNSは依然として攻撃に対して脆弱です。
利用開始
DNSについて
DNSサーバー
DNSレコード
DNS用語集