CVE-2004-0230—TCP 実装におけるシーケンス番号の推測とRSTパケット挿入による脆弱性

Printer Friendly Page

※この記事は以下の記事の日本語訳です。

CVE-2004-0230—Guessing TCP Sequence Numbers and Injecting RST Packets

https://live.paloaltonetworks.com/t5/Threat-Articles/CVE-2004-0230-Guessing-TCP-Sequence-Numbers-and...

 

 

TCP実装において大きいTCPウィンドウ サイズを使用した際、特にBGPのような長時間接続を維持するコネクションを使うプロトコルの場合、リモートの攻撃者にとってはシーケンス番号の推測がより容易になり、TCP RSTパケットを繰り返し挿入することによってDoS攻撃 (Denial of Service attack) やコネクション断を引き起こし易くなります。

 

情報元:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-0230

http://www.rfc-base.org/txt/rfc-5961.txt

 

攻撃が成功するためには、RSTパケットがTCPの受信ウィンドウ内に入ってなくてはなりません。攻撃者は考えられ得るそれぞれのウィンドウ サイズをカバーするために、大量のRSTセグメントを作り出します。これを実際に行うためには、攻撃者はいくつかの情報を既に持っているか、あるいは推測しなければなりません。

 

  • 4-タプル (双方向のコネクションのIPアドレスとTCPポート番号)
  • RSTパケットに使用されるシーケンス番号
  • お互いの端末が使っているウィンドウ サイズ。この値は正確なウィンドウ サイズである必要はありません。何故なら、正しい値の代わりにより小さい値を使うことは、攻撃者にとっては攻撃に成功するまで単により多くのセグメントを生成するだけの事であるからです。しばしば攻撃者は、ある程度の確実性を持って (攻撃対象のアプリケーションを把握していて)、コネクション上で使われる実際のウィンドウ サイズに非常に近い値を導き出せるものです。
  • 受信ウィンドウは、送り主がACKを受信せずに転送可能なバイト数となります。

 

上記の情報を集めあわせた後、攻撃者は、RSTフラグをセットし、推測したTCPシーケンス番号をつけ偽装したTCPセグメントを送信し始めます。新しいRSTセグメントが送信される度に、シーケンス番号の推測値はウィンドウ サイズ分だけ増やされます。

 

すべてのアプリケーションは、偽装攻撃を受ける可能性に大きく影響するいくつかの要素を持っています。これらの要素は以下を含みます:

 

  • ウィンドウ サイズ
  • サーバー側ポート番号
  • クライアント側ポート番号

 

言い換えると、攻撃が成功するまでRSTセグメントを挿入する回数の平均値は、2の31乗をウィンドウ サイズで割った数 (2^31/window) であり、2の31乗の値ではありません。これはウィンドウが大きくなればなるほど、少ない推測で済む事を意味します。

 

この式に当てはめてみると、ウィンドウ サイズが 32,768 の場合、TCPの受け側にて偽装したTCPセグメントが受け入れられるには平均で 65,536 のパケットが転送されなければならないことがわかります。(2^31 = 2147483648 / 32,768 =65536 )  ウィンドウサイズが65,536であれば、この平均値は32,768まで減少します。昨今のアクセス帯域幅を考えれば、このサイズでの攻撃は決して不可能ではありません。

 

一般家庭やオフィスでの帯域幅は増えてきており、帯域幅が大きくなるほどデフォルトのウィンドウ サイズは大きくなっていくと想像されます。

 

少数のパケットのやり取りの間のみ継続するTCPコネクションの場合(大抵はウェブ通信)、攻撃者は十分なトラフィックを生成できないため、このような攻撃に対してはあまり影響を受けないと言えるでしょう。しかし、BGPのような幾つかのアプリケーションは、この脆弱性に対し潜在的に最も影響を受ける可能性を持っています。BGPは、ピアとの間の継続的なTCPセッションの上に成り立ちます。コネクションがリセットされてしまうと、ルーティングテーブルの再構築が必要となり、また経路フラッピングも起きるため、結果としてサービス不能の状態に陥ります。BGPのようにTCP MD5オプションが使用可能なアプリケーションに関しては、そのオプションを使用することでこの攻撃を無効化することができます。

 

この脅威の回避策となる RFC 5961 は PAN-OS 6.0.0 において実装されています。

 

 

著者: mmmccorkle