Security)について簡単に紹介しました。今回もMOPS関連の話題です。MOPSではPHP関連のセキュリティ製品やセキュリティ知識の論文を募集し,11の論文が公開されました。Gerkis氏が投稿したPHPにおけるコード実行を解説した文書を紹介します。evaluationhttp://www.php-security.org/2010/05/20/mops-submission-07-our-dynamic-php/index.htmlなぜPHPコード実行が起きるのか?PHPコード実行が起きる原因は不適切なプログラムが原因であることがほとんどです。不適切なプログラムが作成されてしまう原因のほとんどはプログラマの知識不足です。明白および不明確なPHPコードの挿入と実行)はタイトルのとおり「明白なコード実行」と「不明確なコード実行」がどのように起きるのか解説しています。今回の記事は,この文書に書かれている内容の要約に筆者の所見を追加した体裁となっています。PHPにおけるコード実行PHPは動的な言語であるため,eval関数へのパラメータに不正なコードを挿入し,不正なコードを実行することが可能です。PHPにおけるコード実行はeval関数へのコード挿入だけではありません。明白なケースはeval関数のパラメータへのコード挿入です。$foobar;");?>このコードの場合,ダブルクオートで囲まれたパラメータを渡しているので変数$foobarの内容はPHPが置換し,eval関数は$foobarの中身の文字列がPHPのコードとして評価されます。system('ls');が実行されます。$foobar'を評価します。$foobar;?>を実行した場合と変わりありません。eval関数を実行した場合に気を付けなければならないことは,evalで評価したPHPコードで生成された変数は,evalの実行が終了した後にも残ってしまうことです。この仕様はセキュリティ上の問題となる可能性があります。Gerkis氏はeval関数のパラメータを適切にエスケープするのは非常に難しいので,できる限りevalの使用は避け,もしevalの使用が不可避な場合は文字リテラルを利用(つまり変数は利用しない)することを勧めています。変数が必要な場合は変数を初期化し,何か不具合があった場合に備えてユーザ定義エラーハンドラを使用すべきだ,としています。筆者もGerkis氏の意見に異論ありません。スクリプトのインクルードPHPはinlcude/include_once/require/require_once文でスクリプトを読み込むことができます。実は外部スクリプトの読み込みの問題はPHPに限ったことではないのですが,PHPが埋め込み型言語であるため,外部スクリプトの読み込みに対して簡単に脆弱になってしまいます。この問題についてはこの連載でも解説していますが,今回も解説します。外部スクリプトの読み込みの問題は2つの種類に分類できます。ローカルファイルの読み込み(LFI)リモードファイルの読み込み(RFI)この種類の攻撃を防ぐ最良の対策は「動的なパス」を利用しないことです。Gerkis氏はファイルの読み込みに定数を利用することはよいアプローチだとしています。'lib.php');?>そして,動的なファイル読み込みはすべきではないとしています。'.html');?>これは典型的なファイルインクルード脆弱性です。URIを利用した攻撃が紹介されています。phpinfo();?>%00等とするとPHPのコードが実行できてしまいます。URIを利用した攻撃は脆弱なHTTPリダイレクトを利用したJavaScriptインジェクションの例が有名です。data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+※1「PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+」は「<script>alert(document.cookie)<script>」をBASE64エンコードしたテキストなどとしてJavaScriptインジェクションが可能でした。この攻撃に脆弱なWebアプリケーションがあまりに多いため,現在ではブラウザがこのようなリダイレクトでJavaScriptを実行できないように対策を行っています(PHPに限らずRailsアプリなど,スクリプト系アプリの多くのリダイレクトが脆弱です⁠)⁠。これと同様の攻撃がPHPのinclude文に対して行えます。URIを利用した攻撃は非常に危険です。従来,ローカルファイル実行の問題とされていた脆弱性の問題の一部はリモートファイル実行と同様に任意のリモートからのスクリプトを実行可能です。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。URL:http://blog.ohgaki.net/著書Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?Amazon楽天ブックスhontoヨドバシ.com[改訂版]PHPポケットリファレンスAmazon楽天ブックスhontoヨドバシ.comこの記事に関連する書籍Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?本書は,Webサイトのセキュリティ確保のために必要な基礎知識と,安全なコードを書くために必要な基礎知識を解説しています。Webアプリケーションは比較的簡単に作成で...はじめてのPHP言語プログラミング入門Webアプリケーション構築ツールとしてPHPを取り上げた書籍は数多くありますが,言語の解説・入門書としての書籍はあまりありません。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。