tcp は、大きなウィンドウサイズを使用すると、リモート攻撃者がシーケンス番号を推測し、tcp RST パケットを繰り返し注入することによって、永続的な tcp 接続へのサービス拒否 (接続損失) を引き起こしやすくなり、特に長寿命のプロトコルを使用して接続 (BGP など)。
ソース:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-0230
http://www.rfc-base.org/txt/rfc-5961.txt
攻撃を成功させるには、RST を有効な受信ウィンドウにする必要があります。攻撃者は、潜在的な各ウィンドウにパケットを出すことによって、可能性のあるウィンドウの領域をカバーしようとする多くの RST セグメントを偽造しようとします。これを行うには、攻撃者はいくつかの情報を推測する必要があります。
- 4組 (接続の両側の IP アドレスと TCP ポート)。
- RST で使用されるシーケンス番号。
- 2つのエンドポイントが使用しているウィンドウサイズ。この値は、正しいものの代わりに使用される小さい値によって、攻撃者がこのいたずらに成功する前に、より多くのセグメントを生成するだけであるため、正確なウィンドウサイズである必要はありません。 攻撃者は、攻撃を受けているアプリケーションを知ることによって、かなりの確実性を持ち、接続で使用されている実際のウィンドウサイズに近い近似を 行うことができます。
- 受信ウィンドウは、送信者が受信確認を受け取らずに送信できるバイト数です。
上記の情報をアセンブルした後、攻撃者は、RST ビットセットと推測された tcpシーケンス番号を使用して、スプーフィングされた tcp セグメントの送信を開始します。 新しい RST セグメントが送信されるたびに、シーケンス番号の推測はウィンドウサイズによってインクリメントされます。
すべてのアプリケーションは、なりすまし攻撃が成功する確率に大きく影響するさまざまな要因を制御します。 これらの要因が含まれます:
- ウィンドウのサイズ
- サーバーポート番号
- クライアントポート番号
言い換えると、RST セグメントを注入する試行の平均数は、2 ^ 31 (2 ^ 31 = 2147483648/32768 = 65536) ではなく、(2 ^ 32/window) です。ウィンドウが大きくなるほど、推測は少なくなります。
この式に数値を代入すると、32768のウィンドウサイズでは、tcp 受信機に受け入れられる tcp セグメントを ' スプーフィング ' するために、平均65536パケットを送信する必要があることがわかります。 65535のウィンドウサイズは、さらに32768パケットにこれをさらに低減します。 今日のアクセス帯域幅では、そのサイズの攻撃が可能です。
ホームとオフィスの両方への帯域幅の上昇により、それはデフォルトのウィンドウサイズの値がより良い新たに利用可能な帯域幅を活用するために上昇し続けることが期待できます。
web トラフィックの場合と同様に、いくつかの簡単なパケットだけを持続させる TCP 接続は、攻撃者が十分なトラフィックを生成するのに十分な長さの接続を確立できないため、このような攻撃を受けることはありません。ただし、BGP などの一部のアプリケーションは、この脆弱性の影響を受ける可能性が最も高いと判断されます。bgp は、bgp ピア間の永続的な TCP セッションに依存しています。接続をリセットすると、ルーティングテーブルを再構築して羽ばたきを行う必要があるため、いくつかの可用性が損なわれる可能性があります。BGP などの TCP MD5 オプションを使用できるアプリケーションでは、この仕様で説明されている攻撃を効果的には不可能にします。
RFC 5961 の脅威の軽減は、汎 OS 6.0.0 で実装されました