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

gihyo.jp » DEVELOPER STAGE » 連載 » なぜPHPアプリにセキュリティホールが多いのか? » 第3回 Webアプリは気楽なアプリ?!

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

第3回 Webアプリは気楽なアプリ?!

利用者と開発者の認識

内閣府の調査( http://www8.cao.go.jp/survey/h18/h18-chian/index.html )によると,「不安になる場所」として「インターネット空間」と答えた人が40.1%いたそうです。前回の調査が19.1%だったので倍増しています。しかし,一般のインターネットユーザで不安に感じられる方の多くは具体的な脅威を感じているのではなく,自分の個人情報が漏れたり悪用されるかもしれない,ウィルスなどに感染するかもしれないなど,漠然とした不安を感じているのだと思います。有名サイトを参照するだけ,“普通”にインターネットを利用しているだけでも,PCの使い方を間違えるといつ被害にあってもおかしくないと感じているユーザは多くないと思います。しかし,現実には普通の使い方であっても被害に会いかねない状態になっています。

一方開発者はというと,プログラムに脆弱性があるとセキュリティ上の問題が発生する危険性があると認識はしています。にもかかわらず正しいセキュリティ対策を行っていない場合が非常に多くあります。「ほかのサイトでも多少脆弱性があるサイトを運用していても問題になっていない」といった意識も少なくないようです。結果として非常に危うい状態で運用されているサイトが非常に多くなってきています。

Webアプリは気楽なアプリ?!

最近でこそ少なくなりましたが,Webアプリに対して「手軽につくれる気楽なアプリ」といった認識の仕方をしている方も少なくありません。セキュリティの専門家に「一般ユーザが利用するアプリケーションで最も危険性が高いアプリケーションはなに?」と聞くと,多く専門家は「Webアプリケーション」と答えるはずです。Webアプリケーションは作る側にとっても利用する側にとっても非常に大きな危険を伴うアプリケーションです。

ブラウザの脆弱性やブラウザのプラグインの脆弱性は次々に見つかっています。ブラウザやシステムの脆弱性を攻撃してスパイウェアやルートキットをインストールさせるサイトも後を絶ちません。プラグインにも危険な脆弱性が多く見つかっています。Acrobat Readerの脆弱性で任意JavaScriptが実行できたり,FlashPlayerの脆弱性でREFERERヘッダを改ざんできる問題は記憶に新しいと思います。どの脆弱性を致命的な脆弱性と考えるかは基準によって変わりますが,筆者の基準では,2006年はインターネットエクスプローラが致命的な脆弱性なしに利用できた日は一日もありませんでした。Firefoxも安全かというと度々脆弱性が見つかっており,この原稿を書いている現在でも致命的といえるセキュリティホール(悪意をもったサイトが任意サイトのクッキーを設定できる脆弱性。JavaScriptを無効にすれば回避可能)を修正したバージョンはリリースされていません。

ブラウザのみでなくOSやアプリケーションにセキュリティ上の問題がある場合も多くあります。Windowsを利用しているホームユーザは,管理者権限を持つユーザを通常ログインするユーザとして利用していることが非常に多いです。OSやその設定,インストールされたプログラムに脆弱性があるため攻撃に対して脆弱なPCが大量に放置されている現状があります。例えば,Office 2000はMicrosoft Updateに対応していません。手動でアップデートプログラムを実行しなければセキュリティパッチが適用できません。MS WordやMS PowerPointのファイルを開くことにより,システムにマルウェアがインストールされてしまう状態のPCが大量に稼働しています。インターネット上には危険な状態で利用されているPCが大量に稼働しています。その結果犯罪者が自由に操作可能な大量のボットPCやスパイウェア付きPCがインターネットに接続された状態になっています。

Webアプリケーションは,脆弱性があるブラウザでアクセスしアカウントを不正利用されたり,スパイウェアがインストールされたPCでアクセスしたためユーザ名とパスワードを盗まれたりする可能性があることを前提に構築しなければなりません。しかし,多くのWebアプリケーション・Webサイトは,お世辞にも緻密なセキュリティ対策を行っているとは到底言えない状態にあります。たとえば,前回ログインした時間,IPアドレス位はログイン後に確認できるように設計されるべきですが全く表示できないサイトがほとんどです。ログイン時間やIPが表示されなければ,ユーザは不正にデータが改ざんされるまでアカウントの不正利用に気付くことが不可能です。

Webアプリケーションの構築には落とし穴が幾つもあります。しかも,1行でも間違えるだけで致命的なセキュリティ上の問題となる可能性があるものが多くあります。XSS(JavaScript・HTMLインジェクション),SQLインジェクション,CR/LFインジェクション,CSRF(クロスサイトリクエストフォージェリ)など,多くの脆弱性は1行間違えるだけでも発生する可能性があります。

セキュリティは専門知識?!

多くのWebアプリケーションは不特定多数のユーザに公開することを前提としています。不特定多数のユーザにWebサイトを公開するのであれば,サイトの大小に関係なくサイトの安全性を維持する責任があります。すべてのWeb運営者と開発者はセキュリティに対する基礎知識を有していなければなりません。

例えば自動ログイン機能(ログイン状態を維持する機能)の実装は「セッションIDと同じく十分に長いランダムな文字列を鍵として使用すべきです」と解説されます。この解説に対するFAQとして「それでは複数のブラウザからのログイン状態が維持できませんよね?」と聞かれる場合があります。単一のブラウザからのみログイン状態を維持するか,複数のブラウザのログイン状態を維持するかは実装次第です。この質問をされた場合,ほぼ100%の確率で自動ログインの実装にセキュリティ上の問題があります。認証システムのようにセキュリティ上重要な機能でさえ正しい設計と実装が行われてない場合があります。

PHPに限らずプログラミング言語を習得する場合,必ずif文や関数,演算などの構文を覚えます。多くの言語や開発フレームワークの入門書は「構文」や「決まり事」は解説していても,セキュリティ対策の解説が不十分な場合がほとんどです。構文や決まり事を覚えるのと同じように,セキュリティの基礎知識を習得した後にアプリケーションを構築しなければなりません。セキュリティの基礎知識は専門知識ではなく,運営者・開発者全員の「常識」にならなければなりません。

真面目に取り組まなければWebアプリは「気楽につくれるアプリ」です。アプリケーション開発者の間に「PHPは気楽に簡単にWebアプリケーションが作れる言語」といった認識があるのは事実です。実際,ポイントを押さえていれば安全なWebアプリケーションを簡単に構築可能です。

しかし,本格的なWebアプリの構築は気楽なものではありません。真面目に取り組めば取り組むほど厄介です。XSSはあらゆる場所で発生する可能性があります。Webアプリケーションはシステムの性質上DoSに脆弱になりやすいです。真面目に取り組めば取り組むほど,セキュリティチェック用のコードやログコードが増えます。

PHPは「気楽にWebアプリを作れる言語」として人気が出たため,セキュリティに配慮していないコードが大量に出回っています。セキュリティ上問題があるコードを参考にさらに別のコードが書かれる,といった例も少なくありません。このような状態を解消するためにも「セキュリティ知識の常識化」が必要になります。

著者プロフィール

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

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

URLhttp://blog.ohgaki.net/

著書

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

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

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

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

コメント

コメントの記入

パスサポ

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

ピックアップ

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

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

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

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

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

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

一行クイックアンケート

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

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

その他の連載

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

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

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

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

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

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

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

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

Ubuntu Weekly Recipe

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

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

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

Blogopolisから学ぶ計算幾何

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

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

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

連載一覧

gihyo.jp

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

書籍案内

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

定期刊行物一覧

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