• 間違いだらけのHTTPセッション管理とその対策

    HTTPセッション管理はWebセキュリティの中核と言える機能です。Webセキュリティの中核であるHTTPセッション管理に設計上のバグがある事は少なくありません。今回のエントリはPHP Webアプリ開発者ではなく、主にWebフレームワーク側の開発者、つまりPHP本体の方に間違いがあるという話しです。Webアプリ開発者の回避策も紹介します。

    まずセキュリティの基本として「入力のバリデーションを行い、正当な入力のみを受け入れる」があります。しかし、PHPに限らず多くのセッション管理機構は当たり前の「入力のバリデーションを行い、正当な入力のみを受け入れる」を行っていません。セッションIDの再生成(リセット)も不完全な物が多いと思います。

    参考:

    (さらに…)

  • SSL暗号を無効化する仕組み – BREACH, CRIME, etc

    CRIMEBREACHといったSSL暗号を無効化する攻撃を知っている方は多いと思います。しかし、その仕組みや攻撃方法は広くは理解されていないようです。Webシステムに関わる方であれば、BREACH攻撃の原理と対策を理解しておいて損はありません。BREACHや類似の攻撃は全く難しくありません。直ぐに理解できると思います。原理は簡単です!
    (さらに…)

  • PHP本体でタイミング攻撃を防御できるようになります

    PHP 5.6からタイミング攻撃に対する対策が導入されます。メジャーなアプリケーションはタイミング攻撃対策が導入されていますが、PHP 5.6から簡単に対策できるようになります。

    タイミングセーフな文字列比較関数はhash_equalsとして実装されました。
    http://php.net/manual/es/function.hash-equals.php

    (さらに…)
  • PHPのOpenSSL関数を利用して暗号化する例

    色々やることがあってブログを更新できていませんでした。久々のブログはPHPのOpenSSL関数を使ってAES-256-CBCを使って暗号化する例です。今時のハードウェアとソフトウェアならハードウェアAESが利用できるので普通はAES-256-CBCで構わないでしょう。

    (さらに…)
  • メール送信のセキュリティ

    昨日はHTTPヘッダーのセキュリティについて解説しました。SMTPはHTTPと似た構造を持つため、メールを送信する場合も似たようなヘッダーインジェクション問題が発生します。
    (さらに…)

  • HTTPヘッダーインジェクション

    テキストインターフェース処理の基本でもう書いてしまいましたが、今回はHTTPヘッダーインジェクションの解説です。
    (さらに…)

  • テキストインターフェース処理の基本

    Webアプリは基本的にテキストインターフェースを利用して構築します。HTML、JSON、SQL、XML、XPath/LDAPクエリ、HTTP、SMTP、これら全てテキストインターフェースです。

    今日はインターフェースとテキストインターフェースの基本を紹介します。

    (さらに…)

  • 情報セキュリティ教育の実験

    情報セキュリティ教育で必要な物は既に判っています。基礎的なセキュリティ対策ではSANS TOP 25のMonster Mitigationsだと思います。(この他に概念の話も必要です)

    情報セキュリティに関わっている人で、入力と出力のセキュリティ対策の重要性を解ってない人は居ないはずです。問題なのは広く認知されていない状況にあります。そして効果的な方法はどのような方法であるか、を見つける事でしょう。
    (さらに…)

  • 情報セキュリティの概念・用語

    基礎、基本が大切です、とブログに書いてきました。しかし、情報セキュリティを語る上で最も基礎的と言える情報セキュリティの概念について、まだ書いていません。今日は情報セキュリティの用語の定義、概念を紹介します。

    用語の定義、概念レベルで認識の違いがあると、コミュニケーションはなかなか成り立ちません。情報エンジニアは次々に現れる新技術や日々の業務に追われ、情報セキュリティの概念について学ぶ機会はなかったと思います。一般の教育機関は勿論、情報セキュリティ教育・対策を専門で行う組織であっても目の前にある個々の脆弱性対策教育に追われ概念の解説を行えない状況でしょう。

    この結果、異なるITセキュリティの概念が幾つも生まれ、コミュニケーション自体が難しくなっている状況にあると思います。特に情報セキュリティ対策の定義は重要であるにも関わらず、あまり浸透していないように思えます。このエントリが少しでもこの状況を改善する一助となれば幸いです。
    (さらに…)

  • インジェクション対策、基礎の基礎

    インジェクション攻撃には様々な手法があります。メモリ管理をプログラマが行うC言語などではメモリにインジェクションするバッファローオーバーフロー/アンダーフロー、テキストベースのインターフェースではテキストインジェクション(JavaScriptインジェクション、SQLインジェクションなど)があります。

    これらのインジェクション脆弱性はなぜ発生するのでしょうか?

    今回は「インジェクション対策、基礎の基礎」の話です。

    (さらに…)

  • サニタイズは絶対的な悪か?

    いつも堅苦しく「こうするほうが良い」とばかり書いているので、たまには「あまり良くない」と言われているセキュリティ対策も、有用かつ必要である例を紹介します。サニタイズの話です。

    サニタイズ(Sanitize)とは消毒、汚れた物を綺麗にする事を意味します。汚れた物、つまり悪い物を除去・変換して綺麗にする処理がサニタイズ処理と言われています。悪い物を定義し排除する典型的なブラックリスト型の処理です。ブラックリスト型の処理を行うと「悪い物」の指定に「漏れ」が発生しやすく、間違いの元なのでセキュリティ処理では基本的に使わないことが推奨されています。

    「サニタイズはするな!」これはほとんどの状況でサニタイズしない方が安全になる可能性が高くなるので正しいと言えます。しかし、これは全ての状況で正しいでしょうか?

    (さらに…)

  • 開発者は必修、CWE/SANS TOP 25の怪物的なセキュリティ対策

    SANS TOP 25 の解説はもっと後で行うつもりでした。しかし、現在のアプリケーション開発者向け教育に対する疑念のエントリへの反響が大きいようなので書くことにしました。

    やるべきセキュリティ対策には優先順位があります。効果が大きい対策から行うべきです。セキュリティ対策は全体的に行うべきものですが、最も効果的な対策を除いて対策を行うようでは全体的な対策など行えません。
    (さらに…)

  • OSコマンドのエスケープ – シェルの仕様とコマンドの実装

    OSコマンドのエスケープの続きです。OSコマンドインジェクションを防ぐための、OSコマンドのエスケープはSQLのエスケープに比べるとかなり難しいです。

    難しくなる理由は多くの不定となる条件に依存する事にあります。
    (さらに…)

  • OSコマンドのエスケープ

    プログラムからOSコマンドを実行する場合、エスケープ処理を行わないと任意コマンドが実行される危険性があります。

    今回はOSコマンドのエスケープについてです。

    (さらに…)

  • そもそもエスケープとは何なのか?

    まずエスケープ処理について全て書こう、ということでPHP Securityカテゴリで様々なエスケープ処理について書いてきました。しかし、「エスケープ処理とは何か?」を解説していなかったので解説します。

    エスケープ処理は文字列処理の基本中の基本です。

    「エスケープは要らない、知る必要もない」という意見を稀に聞きますが、プログラムに於ける文字列処理とその重要性を理解していないからでしょう。全ての開発者はエスケープ処理の必要性を理解し、確実かつ適切にエスケープできなければなりません。
    (さらに…)