DNS キャッシュポイズニング
基礎
ドメイン名と IP アドレスをひもづける DNS サーバに偽の情報を記憶させることで、その DNS サーバの利用者を不正な Web サーバなどへ誘導する攻撃手法
例 : www.example.com
- キャッシュ DNS サーバ => 権威 DNS サーバ
- www.example.com の名前解決要求
- 悪意ある DNS サーバ => キャッシュ DNS サーバ
- 権威 DNS サーバが正当な応答を返す前に、www.example.com の応答を返す
- キャッシュ DNS サーバ
- 悪意ある DNS サーバから応答をキャッシュ
- クライアント => キャッシュ DNS サーバ
- www.example.com の名前解決要求
- キャッシュ DNS サーバ => クライアント
- 悪意ある DNS サーバからもらった www.example.com の IP アドレスを返す
- クライアント
- 偽のサイトにアクセスする
DNS スプーフィングの一種
ファーミング
- DNS サーバのキャシュに偽の情報を登録することで、多くの一般ユーザを次々に偽のサイトに誘導する手法
カミンスキー攻撃
- キャッシュに存在しないサブドメインへの DNS クエリ発行を利用して、攻撃を従来より効率良く成立させる手法
- キャッシュに存在しないサブドメイン(a.example.com,b.example.com…)の DNS クエリを利用することでキャッシュサーバに再帰問合せの実行を強制
- これにより攻撃成立の機会を大幅に増加させ、攻撃を効率的に行えるようになっています
- ポート番号が 53 番に固定されていると攻撃が成立しやすくなる
- 応答パケットの偽装を難しくするには、ランダムに選択したポート番号を通信に使用すること(
ソースポートランダマイゼーション
)や DNSSEC の導入が有効な対策となる
- 応答パケットの偽装を難しくするには、ランダムに選択したポート番号を通信に使用すること(
hosts ファイルの書き換え
- マルウェアがこれを実行し、不正なサイトへアクセスさせる事件もある
攻撃の成否
- 攻撃者は、送信ポート番号(名前解決要求の送信元ポート番号であり、応答時の宛先ポート番号となる)、トランザクション ID を本来の応答レコードと合致させる必要がある
- しかし、送信ポート番号、宛先ポート番号ともに 53 番に固定する設定となる DNS サーバが数多く存在し、攻撃を容易にさせている
- 攻撃者は、送信ポート番号(名前解決要求の送信元ポート番号であり、応答時の宛先ポート番号となる)、トランザクション ID を本来の応答レコードと合致させる必要がある
対策
- DNS サーバをキャッシュサーバとコンテンツサーバの 2 台のサーバに分けて、キャッシュサーバでは外部からのアクセスを受け付けないようにする方法