DNSキャッシュポイズニングとカムフラージュ攻撃の防御法

設計

この記事では、「DNSキャッシュポイズニング」と呼ばれる攻撃手法と、その発展型である「カミンスキー型攻撃」について説明します。
これは、情報処理技術者試験でも問われる内容です。特に、情報処理安全確保支援士試験を受験する際には内容を抑える必要があります。


「DNSキャッシュポイズニング」と呼ばれる攻撃手法を理解するためには、まずDNSの仕組みを理解する必要があります。
Webの世界ではサーバーにアクセスするためにアクセス先のIPアドレスを知る必要がありますが、URLで良く使われるのはドメイン名です。
ドメイン名からIPアドレスを得るためには、ドメインを管理しているDNSサーバーにアクセスする必要があります。
DNSサーバーは階層型になっており、自身で管理していないドメインについては上位のDNSサーバーにアクセスすることでIPアドレスを得る仕組みになっています。

ここで、DNSサーバーは、上位のDNSサーバーへのアクセスの頻度を減らすために、上位のDNSサーバーから得た応答結果は、一定期間、キャッシュに保持します。
再度同じ問い合わせが来た場合は、キャッシュを見て応答することになります。


ここからが「DNSキャッシュポイズニング」の説明になります。

DNSキャッシュポイズニングは、上位のDNSサーバーからの応答を攻撃者が偽装する、という攻撃手法です。
応答を偽装することで、攻撃者が意図するサーバーにアクセスさせることが可能となり、当該ドメインを当該DNSサーバーへ問い合わせた利用者に被害を与えることができます。

そして、この問い合わせ結果は、DNSサーバーのキャッシュに保持されます。
このキャッシュが残っている限り、後の利用者にも被害を与えることができます。
「DNSキャッシュポイズニング」という名の通り、DNSサーバーのキャッシュを汚染することで、攻撃が成立します。


しかし、DNSキャッシュポイズニングを仕掛けるのは現実的には困難です。
上位のDNSサーバーへの問い合わせが発生する瞬間、つまりキャッシュの有効期限が切れた瞬間を狙って攻撃しなければならないため、DNSキャッシュポイズニングを仕掛ける機会がなかなか訪れません。

ここで、情報セキュリティ研究者のカミンスキーが公開した「カミンスキー型攻撃」と呼ばれる発展型の攻撃手法が使用されることになります。
この攻撃手法では、攻撃者自身が攻撃対象のDNSサーバーに対して、ランダムで生成したドメイン名(キャッシュに保持されていないはずのドメイン名)を問い合わせることで、上位のDNSサーバーへの問い合わせを発生させます。
この攻撃を繰り返すことで、DNSキャッシュポイズニングを仕掛ける機会を増やすことができてしまいます。
この攻撃に成功してもランダムに生成されたドメインがキャッシュに保持されるだけですが、キャッシュに保持された情報を利用することで、DNSサーバーの利用者に実質的な被害を与えられる可能性があります。


カミンスキー型攻撃を含むDNSキャッシュポイズニングの対策としては、DNSサーバー側に以下の手段を講じることが有効です。

・DNSサーバーが問い合わせを受け付ける範囲の限定する

自ネットワーク以外からの問い合わせを拒否することで、外部の攻撃者からの攻撃されることを防ぐ。

・ソースポートランダマイゼーションを行う

上位DNSサーバーへの問い合わせには、通常はTCP/UDPの53番ポートが使われる。
このポート番号をランダムなものに変更することで、攻撃が成立する可能性を減らすことができる。

・DNSSECを導入する

DNSSECとは、DNSサーバからの応答が正当かを確認する方式を定めた規格である。
これを導入することで、応答の偽装を困難にする。


社内の業務で多忙だったため、日が開いてしまいました。

今回の記事は、社内の勉強会で発表された内容をブログの記事としたものです。
(前回の記事の後書きで紹介した「関数インデックス」も、社内の勉強会で発表されたものでした)

社内外で知識を共有するのは良い習慣なので、これからも続けていきたいと思います!

コメント

タイトルとURLをコピーしました