読者です 読者をやめる 読者になる 読者になる

Fukuoka.php Vol.13に参加してきた

概要

項目 内容
日程 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製。GUICUI
: 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