数年前,筆者は米サンのOS「Solaris」のIPスタック――具体的にはIPデータグラム――の処理で二つのぜい弱性(バグ)を発見した。IP処理コードは信頼できないマシンに公開せざるを得ないため,この種のバグは極めて深刻な存在だ。さらに,IPデータグラム処理のバグは,ファイアウォールの侵害やカーネル・パニック,あるいはさらに深刻なケースにつながる。筆者が発見したこれらのバグも例外ではない。以下に概要を示す。
バグ1:フラグメンテーション攻撃
このぜい弱性は,SolarisのIPフラグメントの再構成処理に関係する非常に興味深い問題だ。一般的にカーネルは,到着するフラグメントごとにフラグメントのデータ部(IPヘッダーではなくデータ)をこのデータグラムと関連付けたリストに格納する。このキューにつなぐ最初のフラグメントを受け取ったとき,IPヘッダーは外さない。したがって,フラグメントの再構成が完了すると,この関連付けされたリストには,最初の要素にIPヘッダーと最初のデータ部,後続要素に残りのデータ部が含まれることになる。問題は,同じキューをあて先とする複数のフラグメントで特定のビット・クリアがあった場合,この再構成アルゴリズムが処理の完了していないキューを誤って完了したと見なしてしまうことである。実際,このトリックは最初のフラグメント(オフセット0)を送らずに実行できる。この場合,「IPヘッダー」は関連付けられたフラグメント・リストの最初の要素から取得する。つまり,送信したフラグメントのうち一つのフラグメントのデータ部からIPヘッダーが作られる。すると結果はどうなるだろう。このトリックを利用して複数のフラグメントを送り,これらを再組み立てすると,全く別のパケットになってしまう可能性がある。例えば2種類のTCPフラグメントを送信して,これらの再構成時に一つのUDPパケットとして解釈させることが可能だ。これは,ファイアウォールにとっては悪い知らせとなる。巧みなトリックだ。
バグ2:ヘッダー長の計算ミス
第2のぜい弱性は,IPヘッダー長を割り出す処理に起因する。通常,IPヘッダー長を割り出すには,IPヘッダーの最初のバイトを取得し,このバイトの下位4ビットをマスクして隠す(上位4ビットがIPバージョン。今回のケースはバージョン4)。次に,下位4ビットに「4」をかけた結果がIPヘッダーの長さとなる。Solarisカーネルは下位4ビットをマスクオフせずにIPヘッダーの大きさを割り出すが,この場合,IPバージョンのフィールドに「4」がセットされていると想定する。
ここで当然ながら,IPバージョンが実際に4であることと,ヘッダー長フィールドが5以上であることを確認する検証がなされる。ただし,この検証はIP処理の非常に早い段階で行われる。バグ1を利用すれば,このオプションの長さの算出をう回して,別のIPバージョンとヘッダー長を指定できる。これにより,いくつか問題が生じる。まずIP処理のチェックサム計算時に,チェックサムのアルゴリズムが範囲外のメモリー上で作動を試み,最終的にはマッピングされていないページにヒットするため,カーネル・パニックを引き起こすことができる。第2に,IPオプションの処理中にいくつかのオプション(ソースのルーティングなど)でIPヘッダー内のデータが頻繁に移動するため,メモリー破損を生じさせることができる。
いずれにせよ,筆者が2年以上前に見つけたこれらの問題を,今になってなぜ明かすのか。実際のところ,我々が最初にこれらの問題をサンに報告したとき,サンは重要度の高い方(バグ2)はパッチを提供して素早く対応した上で,「これら両者は関連する問題であるため,もう一つのバグに対するパッチを公開するまで発表を待ってほしい」と頼んできたのだ。それから2年が経過し,サンはついにバグ1のパッチを公開した。現時点で最も重要な問題は,既にパッチが当てられてからしばらく経っており(サンはこの間にSolarisで二つの新しいバージョンをリリース済み),さらに我々としては,通常はバグ1だけでは通告しない。バグ1は興味深いものであると同時に,ファイアウォールをバイパスするという意味で脅威であり,攻撃者にとってはごく限られた範囲で攻撃が可能だ。つまり,最初のバグを使用して攻撃範囲を広げることはできるが,単独ではホストを侵害することはできない。
我々としては,サンが現在提供しているパッチWebサイトを適用することを強く勧める。
Copyrights (C) 2008 IBM, Corp. All rights reserved.
本記事の内容は執筆時点のものであり,含まれている情報やリンクの正確性,完全性,妥当性について保証するものではありません。
◆この記事は,日本IBMの許可を得て,米国のセキュリティ・ラボであるIBM Internet Security Systems X-Forceの研究員が執筆するブログIBM Internet Security Systems Frequency-X Blogの記事を抜粋して日本語化したものです。
オリジナルの記事は,Timely Disclosure?でお読みいただけます。