タグ

PHPと大垣靖男に関するockeghemのブックマーク (29)

  • PHPのセッションアダプション脆弱性克服への道のり

    (Last Updated On: 2018年8月13日)PHP Advent Calender用のエントリです。 PHPのセッション管理は非常に簡単です。セッションをsession_start()で開始して$_SESSION配列を使うだけです。便利で簡単なセッションモジュールですがセッションアダプションに脆弱であるため、一般に言われてる「ログインする時にはsession_regenerate_id()を呼ぶ」コーディングではセッションアダプションに脆弱になってしまいます。 まずは危険性と対策を紹介します。 セッションアダプションの危険性 セッションアダプションとは外部などから設定されたセッションIDを受け入れ初期化する脆弱性です。一番分かりやすい例はTrans SIDを有効にして http://example.com/index.php?PHPSESSID=1234567890 とアクセ

    PHPのセッションアダプション脆弱性克服への道のり
    ockeghem
    ockeghem 2011/12/05
    『セッションアダプションが致命的な脆弱性であることは少しブラウザのクッキーで実験してみれば分かる』<実験した http://t.co/so8Y2fWu
  • 勝手に補足:レガシーPHPのセキュリティ対策,大丈夫ですか?未修正の脆弱性(2) - ockeghem's blog

    第4回 未修正の脆弱性(2):レガシーPHPセキュリティ対策,大丈夫ですか?|gihyo.jp … 技術評論社という記事を読みました。とても重要なことが記載されている一方で、記述の間違い及び記述もれがあるため、読者の便宜のため勝手に補足したいと思います。具体的に、PHP4系の最終版PHP4.4.9にてパッチの提供されない4つのぜい弱性についての話題です。一部のぜい弱性はPHP5.2系でもパッチが出る見込みがないものです。 CGIのDoS 元記事ではCVE-2009-3660として紹介されていますが、CVEおよびNVDのサイトを見ると、Efront 3.5.4以前の脆弱性とあります。明らかに該当しないので調べてみると、CVE-2008-3660の間違いのようですね。2008を2009とTYPOしたのでしょう。 脆弱性の中味ですが、元記事に以下のように書かれています。 この脆弱性は不正なパス

    勝手に補足:レガシーPHPのセキュリティ対策,大丈夫ですか?未修正の脆弱性(2) - ockeghem's blog
    ockeghem
    ockeghem 2011/07/14
    日記書いた
  • 第4回 未修正の脆弱性(2) | gihyo.jp

    前回に引き続き、未修正の脆弱性とパッチを適用しない場合の対処を順次紹介します。繰り返しになりますが、脆弱性の危険度の順ではなくパッチファイル名の順番に紹介します。紹介する脆弱性情報はSRA OSS Inc日支社にてPHP4セキュリティ保守サービスとして提供しているものです。パッチ類は筆者の会社であるエレクトロニック・サービス・イニシアチブが、現状サポートされているPHPからレガシーPHPにバックポートしています。パッチの説明文を引用して脆弱性を解説します。パッチそのものの紹介は含みませんのでご了承ください。 PHP 4.3.9の評価は、PHPプロジェクトが配布しているソースコードではなくRedHat Enterprise Linux 4で提供されているPHPのSRPM(ソースRPM)のソースコードがベースになっています。PHP 5.1.6についてはPHPプロジェクトが配布しているソースコ

    第4回 未修正の脆弱性(2) | gihyo.jp
    ockeghem
    ockeghem 2011/07/12
    CVE番号の間違い(1)誤:CVE-2009-3360→正:CVE-2008-3660 (2)CVE番号未記入 (4)CVE番号未記入→CVE-2011-1092と思われる
  • 第3回 未修正の脆弱性(1) | gihyo.jp

    今回から未修正の脆弱性とパッチを適用しない場合の対処を順次紹介します。脆弱性の危険度の順ではなく、パッチファイル名の順番に紹介します。紹介する脆弱性情報はSRA OSS Inc日支社にてPHP4セキュリティ保守サービスとして提供しているものです。パッチ類は筆者の会社であるエレクトロニック・サービス・イニシアチブが、現在サポートされているPHPからレガシーPHPにバックポートしています。パッチの説明文を引用して脆弱性を解説します。パッチそのものの紹介は含みませんのでご了承ください。 PHP 4.3.9の評価は、PHPプロジェクトが配布しているソースコードではなくRedHat Enterprise Linux 4で提供されているPHPのSRPM(ソースRPM)のソースコードがベースになっています。PHP 5.1.6についてはPHPプロジェクトが配布しているソースコードがベースとなっています。

    第3回 未修正の脆弱性(1) | gihyo.jp
    ockeghem
    ockeghem 2011/06/28
    暗号論的擬似乱数生成器としてmt_randは使えない。メルセンヌ・ツイスタの本家も暗号論的な乱数でないと明記 http://j.mp/loZC3G
  • PHPが文字エンコーディング攻撃に強い理由 – HTMLエスケープ

    (Last Updated On: 2018年8月13日)PHPが文字エンコーディング攻撃に比較的強い理由は入出力の文字エンコーディングのバリデーション(サニタイズ)が行えるだけではありません。PHPが提供するHTMLエスケープ関数が文字エンコーディング攻撃に対して強い事も理由の一つです。 PerlHTMLエスケープと言えば、<,>,&,”,’をエンティティ変換するコードが一番に見つかります。 「perl html escape」でググると一番に見つかったページは次のページです。このページではまだ3バイトEUCの場合の例、CGIモジュールを使った例も載っているので良い方でしょう。 http://saboten009.blogspot.com/2008/04/perlhtml-xss.html 少し前にPerl, Ruby,Pythonユーザは検索で有用なセキュリティ情報を得られるのか?と

    PHPが文字エンコーディング攻撃に強い理由 – HTMLエスケープ
    ockeghem
    ockeghem 2009/09/29
    ツッコミどころ多数。『何年も前から文字エンコーディングを考慮したエスケープを行っている』<壊れた文字エンコーディングのチェックはPHP 5.2.5(08 Nov 2007)から/日記書いた http://www.tokumaru.org/d/20090930.html#p01
  • 文字エンコーディングの妥当性確認(バリデーション)について - t_komuraの日記

    大垣さんからコメントをいただきましたので、最後に追記しました(2009.09.22)。 少し時間が経ってしまいましたが、以下のページを読んで、PHP に関連する部分について思ったことを書きたいと思います。 http://blog.ohgaki.net/char_encoding_must_be_validated http://blog.ohgaki.net/is-char-encoding-problem-difficult 私の理解が間違っていなければ、「Web アプリケーションで文字エンコーディングに関連する問題を無くす」ことを目的として、全ての Web アプリケーション開発者が以下を実行しようという主張だと思います。 全ての入力文字列の文字エンコーディングの妥当性を確認する 文字エンコーディングを厳格に取り扱う データベースなどで「バイナリ」に近い文字エンコーディングは利用しない

    文字エンコーディングの妥当性確認(バリデーション)について - t_komuraの日記
    ockeghem
    ockeghem 2009/09/21
    詳しい解説をありがとうございます。『間違える人は少ないと思いますが、上記の設定だけでは、入力時の自動変換は有効になりません。mbstring.encoding_translation = On が必要です』<コピペした人は間違えそうですね。
  • LT発表者決定! « スタッフブログ | PHPカンファレンス2009

    広報のsotarokです. 先週26日まで受け付けておりました,LTの発表者が決定しました.(順不同・敬称略) 小山健一郎 「Tokyo Tyrant + PHP」 hnw 「phpall:PHPの全バージョンの挙動を試す」 萩原崇之 「クラウド対応型フレームワーク「Monocheros」」 里 洋平(yokkuns) 「初めてのPHP Extension」 大垣靖男 「PHP4の現状とセキュリティパッチサービス」 以上の5名の方が,PHPカンファレンスを締めくくるべく個性あふれるネタを披露してくださいます. テックデイをお楽しみに! この投稿は 2009 年 9 月 1 日 火曜日 7:35 PM に プログラム カテゴリーに公開されました。 この投稿へのコメントは RSS 2.0 フィードで購読することができます。 コメントを残すか、ご自分のサイトからトラックバックすることができます。

  • PHP6移行で増える脆弱なWebアプリ

    (Last Updated On: 2009年9月19日)PHP6のリリースはまだまだ先の話なのですが、PHP6への移行で脆弱なWebアプリが大量に発生する可能性があります。 理由は2つ – mb_check_encodingで全ての入力文字エンコーディングが正しいかチェックしていない – PHP6のhtmlentities/htmlspecialcharにはマルチバイト文字チェックコードが削除される PHPのコードを書いている人も自覚していないと思いますが、この影響はかなりあると考えられます。 近日中にgihyo.jpのセキュリティブログに詳しい情報を記述します。 追記:PHP5.3のコードを見てみたら、バックポートすべきではないのにバックポートされてました。つまり、PHP6がリリースされたらと言う問題ではなく、今ある問題になっています。一応、改修を提案するつもりですがどうなるか判りませ

    PHP6移行で増える脆弱なWebアプリ
    ockeghem
    ockeghem 2009/07/18
    そんなことにはならないと予想しますが、本当にPHP6への移行で大垣さんが言われるように脆弱性が増えるのであれば、PHP使うのをやめた方がいいですね/ 7/22追記:予想通り『対丈夫でしょう』ということで
  • 第27回 見過ごされているWebアプリケーションのバリデーションの欠陥 | gihyo.jp

    今回解説するWebアプリケーションのバリデーションの欠陥はPHPに限った問題ではありません。多くのプラットフォームのWebアプリケーションで見過ごされているバリデーション仕様の欠陥です。それは文字エンコーディングのチェックです。 文字エンコーディングバリデーションの必要性 筆者の知る限りでは、2004年に相次いで今まで知られていなかったアタックベクタ(攻撃経路)が見つかりました。2004年に多く見つかった新しいアタックベクタとは不正な文字エンコーディングを利用した攻撃です。不正な文字列を利用したJavaScriptインジェクションやSQLインジェクションの攻撃手法が公開されました。 文字エンコーディングを利用した攻撃自体は当時でも新しい攻撃手法ではありませんでした。文字エンコーディングを利用した攻撃は、少なくとも2000年から広く知られていた攻撃手法でした。ブラウザが文字エンコーディングを

    第27回 見過ごされているWebアプリケーションのバリデーションの欠陥 | gihyo.jp
    ockeghem
    ockeghem 2009/06/22
    相変わらず雑な記事。_validate_encodingの$key, $valが逆。mb_check_encodingの第二引数は省略可能だが明示した方がよい。省略時動作の説明もない/文字エンコーディングをホワイトリストやブラックリストで検証できるか?
  • 第26回 まだまだ残っているファイル読み込みバグ | gihyo.jp

    PHPのスクリプト読み込み用の関数である require/indclude文は、PHPが埋め込み型の言語であるために非常に危険なバグの温床となっています[1]⁠。 つい最近のファイル読み込みバグ 執筆時点(4/24)でレポートされているファイル読み込みバグです。 WebPotal CMS(4/23) NotFTP(4/22) TotalCalender(4/22) SMA-DB(4/17) Job2C(4/16) FreeWebshop(4/16) GuestCal(4/15) Jamroom(4/15) ファイル読み込みバグはサーバの乗っ取りも可能とする致命的なバグですが、現在でも脆弱性が次々にレポートされているバグであることが分かります。 require/include文とファイル読み込みバグの問題 PHPはスクリプト(プログラム)と出力を同じファイルの中に書き込める、埋め込み型の言語

    第26回 まだまだ残っているファイル読み込みバグ | gihyo.jp
  • 第4回 ゲストブックの改善 | gihyo.jp

    予告:4/30にZendFramework 1.8がリリースされました。次回はZendFramework 1.8の新機能の紹介とZendFramework 1.8を使って、ゲストブックアプリを作り直します。 機能的な問題以外ににも、前回作った簡単なゲストブックを使ってみるといろいろな問題があることが分かります。 日語が使えない エスケープのセキュリティ対策が十分でない ZendFrameworkらしくないViewでのエスケープ しかし、簡単なゲストブックアプリケーションを“⁠普通⁠”に作る場合とZendFrameworkを使って作る場合の違いを比べると、アプリケーションの作り方の違いがよく分かったと思います。 ZendFrameworkを使ったほうが、手順が多くて面倒に感じたかも知れません。しかし、それはアプリケーションが単純すぎてフレームワークのメリットを感じられなかっただけです。アプ

    第4回 ゲストブックの改善 | gihyo.jp
    ockeghem
    ockeghem 2009/05/19
    色々微妙。P3.『シングルクオートで囲まれた JavaScriptの文字列…などを安全にブラウザに渡すためには,ENT_QUOTESモードでシングルクオートもエスケープする』<JavaScriptのリテラルについては間違い。参照 http://tinyurl.com/oetpeu
  • PHPのSession Adoptionは重大な脅威ではない - ockeghem's blog

    なぜPHPアプリにセキュリティホールが多いのか?:第25回 PHPのアキレス腱にて、大垣靖男氏がPHPSession Adoption問題について取り上げている。大垣氏は度々この問題を取り上げているが、今のところ氏の主張に同調する人を見かけない。それもそのはずで、大垣氏の主張は間違っていると私は思う。 以下、大垣氏の主張を実際に試してみる形で、順に説明しよう。 大垣氏の主張 大垣氏の主張は、PHPにはSession Adoption脆弱性があるために、標準的なSession Fixation対策であるsession_regenerate_id()を施しても、その対策は有効ではないというものだ。 しかし,実際には現在に至るまでPHPのセッションモジュールのセッションアダプション脆弱性は修正されないままになっています。このために,来はsession_regenerate_id関数をログイン

    PHPのSession Adoptionは重大な脅威ではない - ockeghem's blog
  • 第25回 PHPのアキレス腱 ── セッション管理 | gihyo.jp

    PHPにはHTTPセッション管理モジュールが標準で付いてきます。このセッションモジュールには非常に重大なセキュリティ上の脆弱性が修正されずに残っています。その脆弱性とはセッションアダプションです。 セッションアダプションとは、セッション固定化攻撃に利用される脆弱性です。PHPのセッション管理モジュールがセッションアダプションに脆弱であることは、かなり以前、何年も前から知られています。しかし、開発者の理解不足より脆弱性が放置されたままになっています。 セッションアダプションとは セッションアダプションとは、ブラウザ等から送信された未初期化セッションIDをそのまま利用してセッションを初期化してしまう脆弱性です。ユーザが送信してきたIDでも第三者に予想できない文字列であれば大丈夫なのでは?と考える方もいると思います。その通りで第三者に予想できなければ問題ないですし、仮に予想できてもログインする際

    第25回 PHPのアキレス腱 ── セッション管理 | gihyo.jp
    ockeghem
    ockeghem 2009/05/13
    大垣氏はsession fixationについて根本的に勘違いをしている http://d.hatena.ne.jp/ockeghem/20090130/p1、中でも「セッションIDを準備する」の項を参照 / ↑ id:hilde session_regenerate_id()で大丈夫です/日記書いた http://d.hatena.ne.jp/ockeghem/20090515/p1
  • 第3回 はじめてのZendFrameworkアプリケーション | gihyo.jp

    早速ですが、はじめてのZendFrameworkのアプリケーションを作ってみましょう。 何事をはじめるにも最初は簡単なことからはじめるのが一番です。ゲストブックと呼ばれるアプリケーションを作ってみましょう。 ゲストブックとは 旅館やペンションにて、宿泊客が思い思いの感想を書くノートなどを見かけたことがありませんか? 感想を書いたことがある方もいることでしょう。このノートはゲストブックと呼ばれています。 ゲストブックは設計が非常にシンプルなのでコンピュータアプリケーションの入門アプリとして広く利用されています。この連載でも最初のアプリケーションはゲストブックにします。 フレームワークなしのゲストブックアプリ Zend Frameworkを利用したゲストブックアプリケーションを期待されているかもしれませんが、ちょっと我慢してください。まず最初に、通常のPHPアプリとして作られたゲストブックアプ

    第3回 はじめてのZendFrameworkアプリケーション | gihyo.jp
    ockeghem
    ockeghem 2009/05/06
    『通常このような実装での公開は大いに問題がありますが,セキュリティやエラー処理など細かい部分の解説は理解の妨げになるため,敢えて省略しています』<後付でセキュリティ「対策」を説明するのではどうかな?
  • 第24回 無くならないSQLインジェクション脆弱性 | gihyo.jp

    SQLMapを使ってみる 比較的メンテナンス状態が良いSQLMapを使ってみます。SQLMapPythonで記述されたプログラムです。Pythonが利用可能なコンピュータであれば利用できます。 SQLMapを利用するために以下の、まったく無防備なコードを用意しました。これをローカルホストのApache/PHPで実行しアクセスできるようにしました。 PHPコード <?php $conn = mysql_connect('localhost','root'); mysql_select_db('test', $conn); $sql = "SELECT * FROM user WHERE name = '".$_GET['name']."' AND pass = '".$_GET['pass']."'"; $result = mysql_query($sql, $conn); if (!$r

    第24回 無くならないSQLインジェクション脆弱性 | gihyo.jp
    ockeghem
    ockeghem 2009/04/30
    大垣メソッドの説明。『SQLインジェクション対策には次のような注意事項があります』<4項目のどれがandでどれがorか分からない
  • PHP:既知のセキュリティ脆弱性 – Session Adoption

    (Last Updated On: 2018年8月13日)追記:より新しい情報については間違いだらけのHTTPセッション管理とその対策をどうぞ。 PHPには広く知られているにも関わらず放置されている既知のセキュリティ脆弱性が幾つかあります。その一つがセッションモジュールのセッションアダプション(Session Adoption)脆弱性です。この脆弱性は現在広く利用されているWebアプリケーションの安全性に、非常に大きな影響を与える脆弱性です。 セッションアダプション脆弱性とはセッション固定化攻撃を可能とする脆弱性の一種です。セッションアダプションに脆弱なセッション管理システムは、ユーザ(ブラウザ)が送信してきた未初期化のセッションIDを受け入れ、セッションを初期化してしまいます。PHPに限らず、RailsJavaのフレームワーク等、多くのWebフレームワークに発見されている脆弱性です。

    PHP:既知のセキュリティ脆弱性 – Session Adoption
    ockeghem
    ockeghem 2009/01/27
    Session Adoptionは騒ぐほどのものではない。攻撃者は正規サイトからセッションIDを取得して攻撃可能で,Session Fixationの問題に帰結される。Login前Session Fixationの対策は難しいが,Session Adoptionがなくても同じこと
  • PHP4.4.9のセキュリティ状態

    (Last Updated On: 2018年8月13日)PHP4のサポートは2008/8/8を持って終了しました。サポート終了に合わせて、最後のPHP4リリースとなる4.4.9がリリースされています。サポートが終了していますが、稼動中のPHPの半分はまだPHP4であるとる統計情報もあり、まだまだ現役です。 PHPプロジェクトのサポート終了したため、PHP 4.4.9のセキュリティ脆弱性はCVEなどでも報告されなくなりました。この為、普通にセキュリティ情報を収集していてもPHP4.4.9に対する脆弱性情報は入手できません。 PHP4セキュリティ保守サービスではPHP 4にも対応しています。サポートしている脆弱性の概要は、弊社のお知らせをご覧下さい。 まだまだ、SQLインジェクションが無くなっていない事は非常に残念です。PHP4で作られたWebアプリケーションはSJISやEUCを文字エンコー

    PHP4.4.9のセキュリティ状態
    ockeghem
    ockeghem 2009/01/22
    『商用サービスをPHP4で提供されて、もうしばらくPHP4を利用される予定でいる方は、ライセンスも緩く使いやすいのでSRA OSS IncのPHP4セキュリティ保守サービスを検討されてもよいかも知れません』<そうですね
  • 第0回 PHPのWeb開発フレームワーク | gihyo.jp

    PHPは構文も容易で、開発者が言語を習得するのは非常に簡単です。また、性能もよいためWebアプリケーション構築に幅広く利用されています。 PHPが開発され始めた頃は、WebアプリケーションといえばCGIインターフェースを利用し、既存の汎用言語でプログラミングするのが一般的でした。PHPは、URIやPOSTリクエストのデコードや、HTTPセッション管理を標準機能として持っています。埋め込み型言語であるので、PHP自体がテンプレートとも言えます。PHPは汎用プログラミング言語としても利用できますが、簡易版のWeb開発フレームワーク(以下フレームワーク)と言えます。 筆者はこれがPHPが非常に人気の高い言語になった理由の一つだと考えています。しかし、PHP体のフレームワーク的な機能は現在のフレームワークとしては不十分です。このため、PHP用のフレームワークが多数開発されています。 連載は、Z

    第0回 PHPのWeb開発フレームワーク | gihyo.jp
  • 第21回 文字エンコーディングとセキュリティ(3) | gihyo.jp

    前回に引き続き、今回も文字エンコーディングとセキュリティをテーマに解説します。前回は壊れた文字エンコーディングを利用した攻撃、文字エンコーディングを誤認識させる攻撃を紹介しました。今回はSJIS特定の問題を簡単に紹介します。 文字エンコーディングのエスケープ方式を利用する方法 ほとんどの文字エンコーディングは、マルチバイト文字の中に“⁠\⁠”などの特殊文字を含みません。しかし、例外があります。Shift_JISでは“⁠\⁠”がマルチバイト文字に含まれるので、これが原因で脆弱性が発生する場合あります。 SJISの“⁠表” <?php echo rawurlencode(mb_convert_encoding('表', 'SJIS', 'UTF-8')); ?> 出力 %95%5C “%5C⁠”は“⁠\⁠”です。“⁠\⁠”は文字列のエスケープなどに利用される特殊文字です。addslashes関

    第21回 文字エンコーディングとセキュリティ(3) | gihyo.jp
    ockeghem
    ockeghem 2009/01/16
    サンプルを試験していないことがバレバレ。『<div height="<?php addslashes($height)?>" width="<?php addslashes($width)?>"> 』は正常系で動作しない。また「表」を使わなくても普通にXSSとなる /ブログ書いたhttp://d.hatena.ne.jp/ockeghem/20090116/p1
  • 現行版のPHPに任意メモリ参照バグ – 攻撃コード付き

    (Last Updated On: 2018年8月13日)随分前から共有型Webホスティングサービスでは安全性を確保できないので、安全性を重視するサイト(ECなど)は最低限でも仮想ホスト型の共有サービスを利用すべきである、と言っています。 今回のエントリはPHPをApacheモジュールで共有型ホスティングサービスを利用しているユーザに影響します。SSLを利用している場合は秘密鍵を盗まれます。このバグはPHP 5.2.8でも修正されていません。当然ですがPHP 4.4.9でも修正されていません。 Milw0rmのアドバイザリ http://www.milw0rm.com/exploits/7646 には、そのまま使える、任意のアドレスのデータを参照するコードまで付いています。秘密鍵を盗むことは簡単です。 誤解してはならない事ですが、これはPHPに限った問題ではありません。PHPでは度々このよ

    現行版のPHPに任意メモリ参照バグ – 攻撃コード付き
    ockeghem
    ockeghem 2009/01/05
    『PHPをApacheモジュールで共有型ホスティングサービスを利用しているユーザに影響します。SSLを利用している場合は秘密鍵を盗まれます』<共有サーバーの危険性を訴えたいのであれば事例が適切でないような