PR

 TCP(Transmission Control Protocol)といえば,インターネット上で稼働しているコンピュータの大半が使用している重要なプロトコルの一つである。このプロトコルが持つ深刻なぜい弱性が,日本ではゴールデン・ウィークさなかの5月1日に米CERT/CC から警告された。今回のコラムではこのTCPスタックのぜい弱性について解説したいと思う。

ISNの生成過程に起因

 TCPを使用して通信する場合,まず,コネクションを確立するために「3ウェイ・ハンドシェイク」という手順が取られる。3ウェイという名の通り,ホストの間で3段階に分けてデータ・パケットをやり取りして認証を行う。

 この際,それぞれのパケット順序を正しく識別するために,送信される各パケットには一連の番号が振られる。データを受け取ったホストでは,この番号を基にエラー・チェックを行う。そして番号が正しい場合には,その番号に対応した番号を応答パケットに付加して返す。

 このとき使用される一連の番号は,「イニシャル・シーケンス・ナンバー(Initial Sequence Number:ISN)」と呼ばれており,今回のぜい弱性はこのISNを生成するアルゴリズムに起因する。

ISN が分かれば攻撃可能

 初期のTCP/IPでは,新しいISNを生成する際に一定の値を加算するという単純なアルゴリズムを採用していたため,攻撃者はISNを容易に予測できた。そのため,予測したISNと偽造したソース・アドレスを使って攻撃用パケットを作成することが可能であった。具体的には,IPアドレスの詐称(IP spoofing)やネットワーク・セッションの乗っ取り(Session hijack)といった攻撃方法に悪用された。

 このISNの生成過程の問題に関しては古くから指摘され,1985年にはBob Morris氏がレポートとして記している。そしてこのぜい弱性による大規模な被害がインターネット上で報告されたため(CA-1995-01),ISNの予測を困難にする擬似乱数生成法(pseudo-random number generator:PRNG)が実装されるようになっていった。そのため,容易にはISNを予測できなくなったと考えられてきた。

 しかし,5月1日のアドバイザリ(CERT Advisory CA-2001-09)では,PRNGでランダムに生成したISNでも予測可能であることが警告された。アドバイザリによると,以下のようなシステムがこのぜい弱性の影響を受ける。

  1. RFC1948 *1 かそれと同等の実装が施されていないTCPスタックを使用しているシステム
  2. IPSec等の暗号化ネットワーク・プロトコルを使用していないシステム

*1 RFC 1948「Defending Against Sequence Number Attacks」

 もともとこの問題は,2001年3月に米Guardent社(マサチューセッツ州)の Tim Newsham氏が記した論文によって指摘されたもので,その後にCERT/CCへ報告された。そして,3月12日付けで米GuardentのWebサイトで公開され,CERT/CCからは「Vulnerability NoteVU#498440」として公表された。しかし,内容の重大性から悪用されることを憂慮し,一般には概要のみを公表して,詳細な技術情報に関しては政府機関やベンダー,そしていくつかの団体だけに報告した。

ISNの“妥当な範囲”が推測可能

 今回指摘されたぜい弱性を悪用すると,目的とするISNを“妥当な範囲”に絞り込むことができる。まず,PRNGで生成されたISNをターゲット・ホストへのコネクションの中から1つか2つ抽出する。そして,それらをサンプルとして統計的な解析を行うことで,次の(もしくは前の)ISNが含まれる範囲を推測することができてしまうというのだ。

 この際,ターゲットとなるサイトからはサンプルとするISN以外の情報を得る必要はない。目的のISNが含まれる“妥当な範囲”さえ明らかにすれば,その範囲内のISNすべてを使って総当り攻撃を仕掛けることで,ネットワーク・セッションの乗っ取りなどが可能となる。

 Newsham氏の論文では,特定のTCP/IP実装のみを対象としているが,4月25日に米BindView社(テキサス州)のMichal Zalewski氏によって発表された論文では,代表的なTCPのISN 生成機構(具体的には Linuxをはじめとする11種類のOSプラットフォームと主要なネットワーク・デバイスなど)が対象となるという。

 彼らは,PRNGが生成するISNの相関パターンを位相解析(phase analysis)によって導き出し,データを図示するという手法をとった。こうして,抽出したあるISNとその次(もしくは前)のISNとの相関関係を探ったのである。

 そして,一般的なネットワーク帯域でのやり取りを模擬するようなデータ・セットを使って予測可能性を検証した結果,実際はパケット・ヘッダーに32ビットのデータとして格納されているISNが,生成にシステム・クロックを利用するなどの実装上の問題により,より小さなビット空間(これが“妥当な範囲”に対応する)に絞り込むことが可能だということを示した。つまり,抽出したあるISNとその次(もしくは前)のISNはまったく独立しているわけではなく,ある相関関係が存在することを明らかにしたのである。この相関関係を使えば,TCPセッションを攻撃するための数値(すなわちISN)を劇的に絞り込むことができる。

対策とその留意点

 この問題の対策は大まかに分けて3種類あるとされている。しかし,システム内の複数デバイスがぜい弱性の対象になっている場合が十分想定されるので,CERT/CCでは以下の5点を対策適用前の留意点として挙げている。

  1. 適用しようとする対策は,「CA-2001-09」で示されたセキュリティ上の留意点に則しているか。
  2. 適用しようとする対策は,TCPの信頼性および相互運用性の要件を満たすものか。
  3. 適用しようとする対策を実装可能かどうか。
  4. 適用しようとする対策を実装するに当たって見積もられた費用を負担できるか。
  5. 適用しようとする対策を施行する時間を取ることができるか。

 システムにおいて,上記の留意点をクリアする場合にのみ,次に述べる対策が適用できる(スペースの都合により,対策に関する説明は概要のみに留める)。

【対策1】暗号を利用したセキュア・プロトコルを利用する
[概要] IPSecなどでTCPヘッダーを暗号化することで予測に必要なISNを含むヘッダー情報を漏えいと改ざんから保護する。

【対策2】RFC1948の実装を利用する
[概要] ISNが対応するアドレス空間には,ローカル・アドレス,ローカル・ポート,リモート・アドレス,リモート・ポートの4種類がある。これらのアドレスを独自のコネクション識別子によって区切ることでアドレス空間をそのセッションに固有のものとする。ただし,コネクション識別子を攻撃者が入手してしまった場合は,ISNの予測が可能になってしまう。

【対策3】RFC1948以外の実装を利用する
例1:ビットのシーケンス空間から直接ランダムな数値をISNとして使用する
[概要] 方法論は提案されているが実際に使用してみると,3回連続して同じISNを生成してしまうといった現象も見られるため,長期的な信頼性についてはまだ明らかにはなっていない。

例2:ランダム性とRFC1948の手法を組み合わせてISNを生成する
[概要] この手法についてはOpenBSDのグループが取り組んでおり,実際のプログラム・コードを以下の情報参照先に示したURLで閲覧することができる。

 今回公表されたぜい弱性は大変深刻である。対策の適用が望まれるが,現時点でそれぞれの対策が持つセキュリティ,パフォーマンス,信頼性といったシステム稼働要素とのバランスが明らかにはなっていない。そのため,対策を適用する際には,前述の留意点を十分に考慮して頂きたい。

 なお,このぜい弱性に関する各ベンダーの情報については省略した。詳しくはCA-2001-09もしくは,ラックのWebサイトで公開している同アドバイザリ邦訳版を参照して頂きたい。



情報参照先

■1985年に発表されたRobb Morris氏の技術レポート「A Weakness in the 4.2BSD UNIX TCP/IP Software」

■CERT Advisory CA-1995-01「IP Spoofing Attacks and Hijacked Terminal Connections」

■CERT Advisory CA-2001-09「Statistical Weaknesses in TCP/IP Initial Sequence Numbers」

Guardent,Inc.が公開したアドバイザリ

CERT Vulnerability Note VU#498440

BindView CorporationのRAZOR Paper

OpenBSDによるISN予測対策手法のプログラム・コード参照先

ラック CERT Advisory自主翻訳 Webサイト(日本語版)

CERT Advisory CA-1995-01の邦訳版


田中 健介(Tanaka Kensuke)
株式会社ラック 不正アクセス対策事業本部
kensuke@lac.co.jp


 IT Proセキュリティ・サイトが提供する「今週のSecurity Check [一般編]」は,その週に起きたUNIX関連およびセキュリティ全般のニュースや動向をまとめた週刊コラムです。セキュリティ・ベンダーである「株式会社ラック」のスタッフの方を執筆陣に迎え,専門家の立場から解説していただきます。