概要
項目 | 内容 |
---|---|
日程 | 2014年04月25日(金) 19:30 – 21:30 |
会場 | 株式会社グルーヴノーツ |
公式ページ | https://www.facebook.com/groups/355557634510818/ |
PHP Security @cakephper
パーフェクトPHPのp376〜p383を参照
変数汚染攻撃
PHPでは配列のキーを変数名として展開する場合があり、脆弱性が入り込む
攻撃URL例)test.php?_server[REMOTE_ADDR]=hogehoge
foreach($_GET as $key => $val) {
$$key = $val; // ここでキー名を変数名として展開している
}
もしくは、extract() 関数を利用する
extract($_GET);
このようにすると、本来は上書きできない変数に値を注入することができてしまう
本来は使わないほうが良いが、フレームワークなどでも利用されていることが多い。
使わざるを得ない場合は、事前に配列のキーが問題ないかどうかをちゃんとチェックすること。
nullバイト攻撃
文字列の途中でヌル文字(¥0, 終端文字列)が入ってしまった場合、バイナリセーフではない関数で利用されると問題が発生しうる
攻撃URL例)test.php?file=/etc/passwd%00.txt
// null文字以降を無視するバイナリセーフな関数と、バイナリセーフでない関数を混ぜて使ってしまうと問題
if(file_exists($_GET["file"]) && substr($_GET["file"], -3, 4) == "txt") {
print file_get_contents($_GET["file"] );
}
※ 確かこんなコードだったと思うのだけど、手元だと再現しない。なぞ
※ 市川さんに再現するコードを教えてもらいました。PHP4.3だと再現、PHP5.4だと再現しない?
Null文字は事前にチェックして削除しておく。また、関数はバイナリセーフなものを利用すること
SecurePHP
市川さんが作成したライブラリの紹介、以下の様な機能がある。
・Null文字、制御コードの削除
・配列のキーのチェックと削除
seh. SecurePHP
Webアプリケーションの脆弱性診断 @y_maehira
どのように脆弱性を見つけるか?チェックを自動化するか?
オープンソースの脆弱性診断ツール
[OWASP ZAP][]
: Java製。GUIで操作する。ローカルプロキシとして利用可能
: ログインのセッションも利用できるが、ローカルプロキシとしては微妙
Arachni
: Ruby製。GUI、CUI。
: Web Apprication Security Saner Frameworkに則っているため、カスタムズもできる。YamlでPOSTの内容なども指定できる
: ログインのセッションを利用する機能などはなし
ツールでチェックして問題ないからと言って、安全とは限らない
誤検知と見逃しの両方をゼロにすることはできない。(※ 精度と再現率のようなもの)
・False Positive : 誤検知
・False Negative : 見逃し
また、チェックする場合は、以下の点に気をつけること
・大量のアクセスが発生する
・攻撃のコードが実際に飛んでしまうため、万が一通ってしまうとデータの破壊などが起こりうること
・自サイト、自サーバに以外には試さないこと
・クラウド(AWSなど)の場合は、事前に要確認のこと
OSコマンドインジェクションに関するチェックでは、escapeshellcmd() は使わないこと
seh. PHPのescapeshellcmdの危険性
Proxy toolを用いた自己診断 @greenz_greenz
診断の目的は脆弱性を発見することではなく、安全な状態に持って行くこと
診断の種類
・インフラ系
・Web アプリ系
・White Box : CxSuite, LAPSE+, RIPS, PHP-Sat
・Black Box : Fiddler, Burp Proxy, [OWASP ZAP]
※ WhiteBoxは、内部の状態が分かっていてチェックすること
※ BlackBoxは、内部の状態を考慮せずチェックすること
※ ツールでは、わからないものもある
Burp Suite Free Edition
・Java製。有料だが、フリー版もある
・ローカルプロ式として動作する
・日本語は文字化けする
・パラメータを手動で調整可能なので便利
プロキシの切り替えには、Chromeなら 拡張機能 Proxy SwitchySharp が便利
入力値だけではなく、出力時の対策も必要
参考資料
・OWASP Cheat Sheet Series
・IPA 安全なWebサイトの作り方
・体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
Webセキュリティ入門 @Eidwinds
IPAのテクニカルウォッチによると、脆弱性の報告のうち、約55%がXSS、続いてSQLインジェクションが多い
XSS
・パラメータのエスケープなどの対策が必要
・保険的対策として
・CookieにHTTP-Onlyを追加する
・Traceメソッドを無効にするなど
SQLインジェクション
・プレースホルダーを利用し、SQLの書式を正しく構成する
・保険的対策として
・エラーメッセージをそのまま表示しない
・データベースの権限を正しく設定するなど
脆弱性の確認のためのやられサイトとツールについて
Web Security Dojoといったところで、やられサイトのイメージ(VirtualBox)やツール、解説を公開している。カジノのポーカーサイトの例では、他人になりすましてログインしたり、無限にコインを増やしたり、役を確定させたりなど色々できる。
使い方、デモについての動画も公開されている。seh. https://www.youtubh.com/user/MavenSecurity
そのほかOWASPbwaなども
質疑
WebAPIの脆弱性の考え方について
・基本的にWebアプリの考え方と変わらない
・FormがないのでURLを基準にチェックする
・ブラウザからアクセスされないと思わずにチェックする
Webサーバの脆弱性を診断するには?
有料のものならばあるが、無料のものはあまりない
[OWASP ZAP] : https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project