DNSキャッシュポイズニングにおけるソースポートランダマイゼーションの効果を教えてください

知りたいこと

DNSキャッシュポイズニングにおけるソースポートランダマイゼーションの効果を教えてください。
攻撃が1回でも成功した後、同じポートでの攻撃を防ぐ効果があるのは理解しています。
また、Kaminsky attack は攻撃の頻度を飛躍的に上げる手法であり、1回あたりの成功確率には影響しないと考えています。
最初の攻撃成功に対する防御としてソースポートランダマイゼーションがどのような効果があるのか教えて下さい。
私の直感ではほとんど効果が無いように思えるので、質問しております。つまり、ソースポートランダマイゼーションは、攻撃が1回でも成功した場合に被害を最小限に食い止めるための技法であるとの理解ですが、間違っていますでしょうか?

攻撃手法

私はDNSキャッシュポイゾニングについて、以下のように理解しています。
DNSキャッシュポイゾニングでは、攻撃者は正規の権威サーバのIPアドレスを詐称してUDPパケットをキャッシュサーバに送りつけることができることが前提です。

  1. キャッシュサーバがUDPで攻撃対象のAレコードの問い合わせを発信します。このとき16ビットの問い合わせIDをランダムに付与します。そして、この問い合わせの送信元のポート番号を毎回乱数で選択するのがソースポートランダマイゼーションです。ソースポートランダマイゼーションが設定されていなければエフェメラルポートの中から任意の1個を選んでそれを固定して利用しますが、このポート番号が外から見えるわけではありません。
  2. 攻撃者はキャッシュサーバに偽造した返信UDPパケットを送り付けてキャッシュサーバに嘘のエントリを覚えさせます(ポイゾニング)。キャッシュサーバはポート番号と問い合わせIDが一致しないとパケットを無視しますので、それが当たっていないと攻撃に成功しません。このパケットは正規の権威サーバからの返信がキャッシュサーバに到達する前に送りつけないといけません。
  3. 攻撃者はキャッシュサーバに攻撃対象のAレコードを問い合わせることで攻撃が成功したかどうかを確かめることができますが、外れたときにポート番号が外れたのか問い合わせIDが外れたのかを知る方法はありません。

攻撃成功の確率

上記の手順で攻撃者は問い合わせIDとポート番号をあてずっぽうで攻撃するので、1回の成功確率は以下のことから 1 / 1,850,146,816 となりそうです。

  • Linux のエフェメラルポートの範囲は 32768から60999 で 28231個です
  • それに 16ビット=65536 をかけると 1,850,146,816 となります。

1秒に1回攻撃できるとして、24時間以内に攻撃が1回でも成功する確率は
1- (1/1,850,146,816)**86400 ≒ 1-86400 * (1/1,850,146,816) ≒ 0.000046
のような計算となります。
(この質問では攻撃の頻度は重要ではないので、あまりつっこまないでください)

ソースポートランダマイゼーションの効果は?

上記のような確率であるとして、キャッシュサーバがソースポートランダマイゼーションを行わずポートが固定されている場合に、そのことを利用した攻撃アルゴリズムを使用することで成功確率を上げることは可能でしょうか?可能な場合、どのくらい確率をあげれるのでしょうか?

コメントを投稿

0 コメント