
私はソフトウェアとしてこの質問をしています(また、過去にここで DNSSEC に関する質問がいくつかあったためでもあります)。
私はこれをWikipediaで見たのですが、誰か私に説明してくれる人はいないかと思いました。
「前述のように、DNS リクエストの送信元ポートのランダム化と、送信元ポートと 16 ビットの暗号化 nonce の両方を選択するための暗号化された安全な乱数の使用を組み合わせると、DNS レース攻撃が成功する可能性を大幅に減らすことができます。」
ポートのランダム化によって、クライアント側での DNS ポイズニング攻撃がどのように防止されるのかわかりません。それとも、これは DNS サーバーのみに関係しているのでしょうか。同じポートのランダム化をクライアント側でも使用できますか。
答え1
ドメイン名リクエスト常にクライアントからサーバーへの通信であるため、送信元ポートはクライアント側にあり、ランダム化する必要があります。
サーバーからの応答は、ポート 53 からクライアント側の元の送信元ポートに送信されます。お読みになった内容から推測できると思いますが、クライアントが次に使用する送信元ポートが予測できる場合、実際の応答よりも先に応答を偽装することができます。
DNS サーバーは、要求されたドメインの権限がなく、再帰が有効になっている場合、それ自体がクライアントであることに注意してください。したがって、DNS サーバーに Google.com の IP アドレスを要求すると、DNS サーバーはルート サーバーにクエリを実行して答えを導き出します。ここで、応答が本物であることが重要になります。要求元の DNS サーバーは応答をキャッシュし、後続の要求に対する応答として提供するためです。
もし、ISP の DNS サーバーが次のクエリに使用するソース ポートを予測できれば、実際の応答の前に、要求に対する独自の回答を挿入することができ、ISP の DNS は、それを使用するすべてのユーザーに対して汚染されることになります。
(このシナリオは(希望的観測として)明確さのために大幅に簡略化されていることに注意してください)