米国時間6月17日,世界中で広く使われているWebサーバー・ソフトウエア「Apache HTTP Server」のセキュリティ・ホールが公開された。今回のセキュリティ・ホールはApache HTTP Server本体が原因である。そのため,機能を拡張していないデフォルトの状態でも影響を受ける。しかも,バージョンによってはリモートから任意のコードを実行することが可能な,深刻なセキュリティ・ホールだ。今回のコラムでは,このセキュリティ・ホールを詳しく解説する。

デフォルトで影響を受ける

 米Internet Security Systems(ISS)などの情報によれば,Apache HTTP Server(以下,Apache と略す)に,深刻なセキュリティ・ホールが見つかった(関連記事)。

 Apache は Apache Software Foundationによって開発および保守されている Webサーバー・ソフトウエアである。インターネット上のWebサーバーを調査している英Netcraft の「Web Server Survey 」によると,2002年5月の時点で,全世界のWebサーバーのおよそ6割がApacheを使用しているという。

 Apache に関連したセキュリティ・ホールといえば,PHP のバッファ・オーバーフローの問題(関連記事)が記憶に新しい。この問題は,Apache に PHP をモジュールとして組み込んだ場合に影響を受ける。しかし,今回の問題は PHP の場合と異なり,機能拡張のためのモジュールなどには依存しない。デフォルトの状態,すなわち何ら機能を拡張していなくても影響を受けるのだ。

チャンク形式エンコーディング機能に問題

 今回のセキュリティ・ホールは,Apacheが備える「チャンク形式エンコーディング」機能が原因である。チャンク形式エンコーディングとはなにか,その機能のどこに問題があったのか――について,以下解説しよう。

 HTTP バージョン 1.1(HTTP/1.1)を規定するスタンダード(標準仕様)であるRFC2616には,HTTP バージョン 1.0 にはなかった "Chunked Transfer Coding" (チャンク形式の転送コーディング) という新機能が追加された。これはコーディングの一機能であるので,当然「エンコード(符号化)」と「デコード(逆符号化)」が存在する。

チャンク形式エンコーディングは,エンティティ・ボディ(送信したいデータの実体)を,任意のサイズの塊(チャンク)に分割し,チャンクのサイズを記述したヘッダーを付加するエンコード方式である。

 HTTP/1.1 では,転送コーディングとしてチャンク形式のみが定義されている。したがって,HTTP/1.1 をサポートするアプリケーションは,チャンク形式のエンコードならびにデコードをサポートしていなければならない。当然,Apache もチャンク形式のエンコードおよびデコードをサポートしている。

 Webブラウザなどのクライアントから,チャンク形式エンコーディングされたデータが Web サーバーに送信された場合,Web サーバーはそのデータを保持するために,データ分のバッファ(メモリー)を確保する。

 送信するデータのサイズが不明な場合には,クライアントと Web サーバーがあらかじめ通知しあった(ネゴシエーションした)サイズのチャンクを,クライアントはサーバーに対して送信する。サーバーはそのサイズのチャンクが送信されるものとして,バッファを確保する。

 しかし,ISSのアドバイザリによれば,Apacheには,確保すべきバッファの算出処理に問題があるという。そのため,シグナルによる競合状態や,ヒープ領域のオーバーフロー,そして,リモートからの悪意あるコードの実行を許してしまう可能性がある。

バージョンによって異なる影響度

 ISS のアドバイザリと同日にリリースされた「Apache Security Advisory」によると,今回のセキュリティ・ホールの影響を受けるのは,Apache バージョン 1.3.24 を含む 1.3 系列(1.3.x)のすべてのバージョンと,Apache バージョン 2.0.36 を含むすべての 2 系列(2.x)である。ただし,影響度――すなわち,許してしまう攻撃――についてはバージョンによって異なる。

 まず,バージョン 1.3.x については,Apache が稼働するプラットフォームによらず,リモートから任意のコードを実行される可能性がある。

 この問題が発表された当初は,32ビット版 UNIX OS 上で稼働させている場合には,任意のコードが実行されることはないとされていた。ISS が「Bugtraq」メーリング・リストに投稿したように,任意のコードが実行される前に,プロセスが終了してしまうというのだ。

 投稿された内容は次のようなものだった。「UNIX版において任意のコードを実行するためには,非常に大きなメモリー領域を消費する必要がある。32ビット版のUNIX OS においては,利用可能な仮想メモリー・アドレス空間の約半分を消費する必要がある。これだけのメモリーを消費すると,OSはプロセスを自動的に強制終了させてしまうので,攻撃を成功させることはできない。

 それに対して 64ビット版UNIX OS では,より広大な仮想メモリー・アドレス空間を利用できるために,プロセスを強制終了させずに,リモートの攻撃者によって,任意のコードを実行されてしまう」。

 つまり,プラットフォームによって影響が異なるとされていた。しかし,32ビット版でも,リモートから任意のコードを実行される可能性があることが明らかとなった。米国時間6月19日,「GOBBLES Security」から Bugtraq メーリング・リストに,OpenBSD で稼働する Apache に影響を与える検証用コードが投稿されたのである。GOBBLES Security によれば,以下のプラットフォームで今回の問題が利用可能であることを確認したという。

  • Sun Solaris 6-8 (SPARC/x86)
  • FreeBSD 4.3-4.5 (x86)
  • OpenBSD 2.6-3.1 (x86)
  • Linux (GNU) 2.4 (x86)

【2002年6月24日追記】
 GOBBLES Security より,以下の組み合わせに対する検証用コードが公開されている。

  • FreeBSD 4.5 (x86) + Apache/1.3.23
  • OpenBSD 3.0 (x86) + Apache 1.3.20
  • OpenBSD 3.0 (x86) + Apache 1.3.24
  • OpenBSD 3.0 (x86) + Apache 1.3.22
  • OpenBSD 3.1 (x86) + Apache 1.3.20
  • OpenBSD 3.1 (x86) + Apache 1.3.23
  • OpenBSD 3.1 (x86) + Apache 1.3.24
  • OpenBSD 3.1 (x86) + Apache 1.3.24 + PHP 4.2.1
  • NetBSD 1.5.2 (x86) + Apache 1.3.12
  • NetBSD 1.5.2 (x86) + Apache 1.3.20
  • NetBSD 1.5.2 (x86) + Apache 1.3.22
  • NetBSD 1.5.2 (x86) + Apache 1.3.23
  • NetBSD 1.5.2 (x86) + Apache 1.3.24

 さらに,「HighSpeed Junkie!」を主催する hsj氏からは,「FreeBSD 4.6 (x86) + Apache 1.3.24」に対する検証用コードがリリースされている。加えて同氏は,FreeBSD(x86) 環境下で発生するバッファ・オーバーフローを使った攻撃方法について,若干ではあるが言及している。

 今後,上記以外のOSおよびApacheのバージョンの組み合わせに対して影響をおよぼす検証用コードが公開される可能性は十分にある。セキュリティ関連サイトやメーリング・リストなどで最新の情報を随時チェックするとともに,対策の実施を徹底したい。
【追記ここまで】

 Windows プラットフォームで稼働する Apache 1.3.x についても同様である。実際,ISSのセキュリティ・チームである「X-Force」は,Windows 版 Apache(Apache for Windows)バージョン 1.3.24 で,任意のコードを実行できることを確認したという。

 Windows 版 Aapche で任意のコードを実行できてしまう理由については,スペースの都合上割愛する。興味がある読者は,「Shadow Penguin Security」を主催するUNYUN氏によって著された「ハッカー・プログラミング大全」(データハウス; ISBN: 4887186339)を一読されたい。同書第2章の「例外ハンドラ上書きによるeggの実行」が参考になる。

 以上のように,Apache を稼働させているマシンの OS が32ビット版 UNIX であろうと,64ビット版 UNIX であろうと,そして Windows であろうと,Apache 1.3.24 までの 1.3 系列のバージョンは,リモートから任意のコードを実行される可能性があるのだ。

 加えて,セキュリティ・ホールを検証するためのコードも公開されている。そのため,今回の問題を悪用する「Code Red」級ワームの出現が早くも危惧(きぐ)されている。Apache 1.3.x の管理者は早急に対策を施す必要がある。

 次に,Apache 2.x について説明する。

 Apache Software Foundation により公開された「Apache Security Advisory」によると,Apache 2.x においては,不正なデータが送信されれば的確に検出されるために,任意のコードが実行されることはないという。ただし,マルチスレッド・モデルを採用しているOS(マルチ・スレッドOS)上で動作させている場合には,Apache の子プロセスによって提供されているすべてのリクエストが消滅するとしている。

 一方で,米CERT/CCのアドバイザリ「CA-2002-17 Apache Web Server Chunk Handling Vulnerability」では,子プロセスを終了させられると記述されている。ただし,プラットフォームがマルチ・スレッドをサポートしているかどうかなどの,いくつかの要因に依存するという。

 このように,ベンダーや組織によって,Apache 2.x における影響は一致していない。しかしながら,何らかの悪影響が与えられてしまうことは間違いない。

バージョンアップで対策を

 今回のセキュリティ・ホールの影響を回避するには,最新版のバージョン 1.3.26 あるいは 2.0.39 へアップグレードする必要がある。Apache Software Foundation「Japan Apache Users Group」のサイトで公開されている。ただし,ダウンロードする場合には,国内のミラー・サイトを利用したい。

 なお,ISS のアドバイザリ中で注記されているように,Web アプリケーション・サーバーをはじめとする,数多くの商用ソフトウエア製品に Apache がバンドルされている。そのため,管理者は注意する必要がある。特に,Windows 版については十分注意していただきたい。Apacheを含む製品のベンダーの対応状況については,CERT/CC のアドバイザリを参照いただきたい。


新井悠 (ARAI Yuu)
株式会社ラック コンピュータセキュリティ研究所
y.arai@lac.co.jp


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