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

gihyo.jp » DEVELOPER STAGE » 連載 » なぜPHPアプリにセキュリティホールが多いのか? » 第10回 スクリプトインジェクションが無くならない10の理由

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

第10回 スクリプトインジェクションが無くならない10の理由

SQLインジェクション対策は非常に簡単です。しかしブラウザに対する「スクリプトインジェクション」はなかなか無くなりません。スクリプトインジェクションが無くならない10の理由をあげてみます。

複雑な攻撃経路と対策

前回紹介したように,ブラウザに対するスクリプトインジェクション攻撃の経路は3種類あります。エスケープ方法も数種類あります。すべての出力を完全にエスケープできればセキュリティ維持も容易になりますが,タグや属性を出力したい場合もあるため,必ずしもすべての出力をエスケープできるわけではありません。さらに攻撃手法にも,サイトをまたがった攻撃,直接攻撃,間接攻撃などパターンがあります。エスケープできないデータへの不正なスクリプトの挿入を防ぐには,データの起源までさかのぼり安全性を確保しなければなりません。ブラウザに対するスクリプトインジェクション対策はデータベースサーバへのSQLインジェクション対策に比べ非常に複雑で難しい対策です。

新しい技術やブラウザの導入

新しい技術やブラウザは思いもよらない脆弱性を含んでいる場合があります。XMLHttpReuqest利用の普及により,DOMベースのスクリプトインジェクションに脆弱なWebサイトを構築してしまうリスクが増えました。ブラウザ側での対策が進み,以前に比べれば随分安全にスクリプトを実行可能になりましたが,スクリプトインジェクションの攻撃経路が増えたことには変わりありません。加えてブラックリストによるインジェクション対策は間違ったセキュリティ対策と言えますが,多くのサイトがブラックリスト方式によるセキュリティ対策に頼っていると考えられます。E4X(JavaScriptのXMLサポート)や「data://」URIの追加,通常では予想ができないブラウザの動作など(ダウンロードしたHTMLファイル内のスクリプトがダウンロード先のコンテクストで実行される,XMLHttpRequestがクロスドメインで実行できる(古いKHTMLでは可能だった)など)は,ブラックリスト方式のスクリプトインジェクション対策のみでなく,厳格なホワイトリストによる適切な入力値の検証と出力のエスケープ処理を行っているアプリケーションのセキュリティ対策でさえ無効にしてしまう場合があります。

ブラウザ本体でなく,プラグインの不具合によりスクリプトの挿入・実行が可能になってしまっていた例も少なくありません。ブラウザ本体の不具合と同様に,プラグインの不具合によるセキュリティ上の問題をサーバ側で対処するのは限界があります。

10月26日にリリースされたMac OS Xでは新しいSafariが付属しています。ベータテスト段階で多くのセキュリティ研究者が新たなセキュリティ問題を指摘されました。リリース版に新しいスクリプトインジェクション脆弱性があってもおかしくありません。Mac OS X 10.5は数日で200万本出荷されたとされています。

知識不足

すべてのWeb開発者はブラウザに対する「スクリプトインジェクション」を正しく理解していなければなりません。「フレームワークを利用しているので安全」などと勘違いしていると脆弱性を作ってしまいます。Web開発に従事する方すべてがどのような攻撃方法があり,どのように対策するのか正しい知識を持っていなければなりません。

PHPは簡単な文法を習得するだけでWebアプリケーションが簡単に構築できます。習得が簡単なのは良い事ですが,必要不可欠なセキュリティ対策の知識なしで作られたWebアプリケーションには必ずセキュリティホールやセキュリティ上重大な脆弱性がある,と考えても構わないでしょう。SQLインジェクションのように対策が簡単なセキュリティ上の問題もなくなっていません。知識不足によるブラウザに対するスクリプトインジェクション脆弱性がなくならないのは当然と言えます。

コードの独り歩き

Web開発者がスクリプトが挿入される仕組みや危険性を理解していても,コードがどのように利用される可能性があるのか理解していないと脆弱性を作ってしまう場合があります。プロトタイプやサンプルコードなどにはセキュリティ対策がまったく無い場合があります。この事を知らずに別の開発者がセキュリティ対策を追加せずにそのまま使ってしまうケースはよくあります。

Webサイトや書籍や雑誌に掲載されているコードをコピーして利用する場合,必要なセキュリティ対策が追加されているか十分注意する必要があります。ほかのオープンソースアプリケーションのコードをコピーして利用する場合,コピーしたコードが動作することだけを確認するのでなく,コードが安全に動作するためにどのようなセキュリティ対策が行われているか確認し,不足している場合は必要なセキュリティ対策を追加してから利用しなければなりません。

リソース不足

安全なWebアプリケーション開発には十分なリソースが必要です。セキュリティ対策のリソースを確保していない開発プロジェクトでは安全なWebアプリケーション開発は難しくなります。残念ながら多くのプロジェクトは十分なリソースをセキュリティ対策に割り当てていません。リソース不足の多くは顧客の理解不足(不適切な発注),不適切な受注,不適切な見積もりやプロジェクト管理などが原因で発生します。優れた開発者でも十分な開発リソースが無いと安全なアプリケーションの開発はできません。

不適切な対策

不適切なスクリプトインジェクション対策は,知識不足,リソース不足が原因で発生します。ブラック方式でスクリプトインジェクションを防ぐなどの不適切なスクリプトインジェクション対策が利用されているケースは後を立ちません。スクリプトインジェクション対策はホワイトリスト方式で検証し,エスケープ可能な出力はすべてエスケープしなければなりません。

セキュリティ対策の一つとして,そもそも守るべき情報を無くしてしまうという方法があります。しかし,重要な情報を保存していなくても(例えば,匿名の掲示板情報)スクリプトインジェクション対策は必須です。サイトの規模や価値に関係なく,対策がないサイトであればフィッシング詐欺に利用されるなど,ほかのユーザやサイトの攻撃に利用される可能性があります。

特に設計レベルで不適切な対策を採用してしまうと,後で修正するために非常に多くのリソースが必要になるので注意が必要です。

コードレビューの不在

セキュアなアプリケーション開発サイクルにはコードレビューが欠かせません。しかし,多くのプロジェクトで十分なコードレビューが行われている,とは言い難い状況です。出版物に校正が欠かせないないように,アプリケーションのコードレビューは欠かせません。

オープンソースシステムはソースコードが公開されているので多くの開発者によりコードレビューが可能になり,クローズドソースのシステムより安全性が高い,と言われています。しかし,多くのオープンソースアプリケーションで十分なコードレビューが行われていないことが明らかになっています。オープンソースのアプリケーションは安全性が高い,と盲目的に信じるのではなく,自分で確かめるほうが良いです。

国際化の壁

Webアプリケーションの多くは海外で開発されています。多くのアプリケーションは欧米のシングルバイト圏での利用を前提に開発されています。このため,マルチバイト文字を利用した場合,スクリプトの挿入攻撃が可能になるコードになっている場合も少なくありません。PHP場合,デフォルトでマルチバイト文字を扱うモジュール(mbstring)が有効でないため,脆弱になっている場合が多くあります。マルチバイト文字関連のセキュリティ上の問題はPHPアプリケーションのみでなく,PHP本体やデフォルトで付属するモジュールに発見される場合も少なくありません。

フレームワークの不在

Webアプリケーション開発フレームワークを利用すれば安全なWebアプリケーションが自動的に作れる訳ではありません。しかし,Webアプリケーションフレームワークを利用すると比較的容易に安全なWebアプリケーションを構築できます。

PHPの場合,フレームワークなしに開発されたアプリケーションも多くあります。また,PHPには非常に多くのフレームワークがあるためどのフレームワークを選択するか非常に難しくなっています。信頼性の高いフレームワークが広く利用されるとスクリプトインジェクション脆弱性も少なくなると考えられます。

不適切な設定

US CERTとマイクロソフト社が2000年2月にクロスサイトスクリプティング脆弱性に関して注意を喚起するする文書を発表した際に,ダイナミックコンテンツを送信するWebサーバは利用する文字エンコーディングをHTTPヘッダで指定しなければならないと明記しています。しかし,PHPのソースに含まれるphp.iniの設定例では文字エンコーディング設定(default_charset)は未設定で,HTTPレスポンスヘッダには文字エンコーディングが記載されない設定例になっています。

php.iniのdefault_charsetにデフォルト値(iso-8859-1やUTF-8など)を設定すると,実際に送信したテキストの文字エンコーディングがHTTPヘッダで指定した文字エンコーディングが異なると文字化けが発生します。本来はHTTPヘッダで必ず文字エンコーディングを指定すべきですが,デフォルトのphp.ini設定では文字エンコーディングが指定されていません。HTTPヘッダで文字エンコーディングが指定されていないとMETAタグによって指定されている文字エンコーディングが利用され,METAタグもない場合は自動認識される場合があります。自動認識はもちろん,METAタグで文字エンコーディングを指定してもスクリプトインジェクションに脆弱になる場合があります。文字エンコーディングはHTTPヘッダで指定されなければなりません。

著者プロフィール

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

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

URLhttp://blog.ohgaki.net/

著書

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

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

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

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

コメント

コメントの記入

パスサポ

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

ピックアップ

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

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

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

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

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

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

一行クイックアンケート

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

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

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

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

書籍案内

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

定期刊行物一覧

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