《無償で使える!脆弱性検査ツール『OWASP ZAP』ハンズオンin 大阪》 2015/02/10 15:00 - 18:00 in Osaka. OWASP Kansai主催によるOWASP ZAPハンズオンで使用した資料です。 OWASP ZAP 2.3.1をベースに解説しています。 http://owasp-kansai.doorkeeper.jp/events/19613
脆弱性検査ツール『OWASP ZAP』ハンズオン in 大阪[OWASP Kansai主催]2015/02/10亀田 勇歩@YuhoKameda
View Slide
Profile(プロフィール)亀田 勇歩- @YuhoKameda[活動]ZAP Evangelist『OWASP Zed Attack Proxy 運用マニュアル』執筆協力ZAP Hands-on Training in AppSec APAC2014脆弱性診断士(Web アプリケーション)スキルマップ執筆[業務]Web/PF脆弱性診断インシデントレスポンス全般
ZAP Evangelist
OWASP ZAP• Paros version:3.2.13をフォークしたもの• 簡単に使える、Webアプリケーションの脆弱性を発見するための統合ペネトレーションツール• https://code.google.com/p/zaproxy/• https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
IPAテクニカルウォッチ 「ウェブサイトにおける脆弱性検査手法の紹介」の公開https://www.ipa.go.jp/about/technicalwatch/20131212.html
『OWASP Zed Attack Proxy運用マニュアル』執筆協力• Ver 2.1.0版にて作成• インストール手順から各種メニューまで
診断を始める前に
診断時の注意• 自分の管理する範囲内のサーバのみスキャンを行うようにしてください。• データへの影響や診断文字列の残存、診断対象へ一定の負荷があるため、本番環境へ診断をすることは可能な限り避けてください。• アンチウィルスソフトが攻撃と判断し通信を遮断する可能性があります。
準備するもの• OWASP ZAP 2.3.1• OWASP BWA 1.1.1• VMware Player※OSやバージョンの差異によって、資料と一致しない箇所がある可能性があります。
ZAPの準備• OWASP Zed Attack Proxyのダウンロード– 下記のページへアクセスし、環境に合わせてダウンロードする– https://code.google.com/p/zaproxy/wiki/Downloads安定版開発版(週次リリース)
BWAの準備• OWASP Broken Web Applicationのダウンロード– OWASP Broken Web Applicationのサイトへアクセスする– http://sourceforge.net/projects/owaspbwa/files/• 環境に合わせてダウンロードしてください– http://sourceforge.net/projects/owaspbwa/files/
BWAの準備• .ovaをダウンロードした場合– 「.ova」ファイルを開く– 「インポート」を選択する
BWAの準備• .zipをダウンロードした場合– 「.vmx」ファイルを開く– 「コピーしました」を選択する
仮想マシン操作時の注意事項• BWAのアカウントは下記の通りです。– User Name : root– Password : owaspbwa• 仮想マシンを操作後、自分のマシンへカーソルを戻したい場合、下記の操作を行ってください。– [VM Playerの場合] Ctrl + Altボタン– [Virtual Boxの場合] 右Ctrlボタン
ZAPを使用するための準備
設定(オプション)• ローカルプロキシに利用するポート番号
設定(オプション)• プロキシツール使用時のブラウザ設定(IE)
設定(オプション)• プロキシツール使用時のブラウザ設定(Firefox)
設定(オプション)• スキャンのスレッド数/階層の深さ– スパイダー– 動的スキャン– 強制ブラウズ– ポートスキャン負荷を考慮し設定すること
設定(オプション)• クライアント証明書の導入
設定(オプション)• セッションIDの設定使用するセッションIDが無い場合は「追加」
ZAPを用いた自動診断手法
クイックスタート• 開始URLを指定し検査を行う• 操作が簡単「スパイダー => 動的スキャン」
各種モード説明Safe mode : 検査不可(閲覧モード)Protected mode : スコープ内のみ検査可(推奨)Standard mode : どこでも検査可ATTACK mode : スコープ変更時に全自動スキャン(Ver2.4.0実装予定)うまくスコープが設定できない場合、Standard modeで検査を!
コンテキスト設定• スコープを指定– 診断対象を明示• 設定することにより、診断したいサイトへのみスキャンを行うようにする
除外設定• (必要がある場合、)検査に不要なリクエストを除外
スパイダー検索• 開始URLを選択し、スパイダー検索を行う• リンクを辿って対象のページを抽出する
スパイダーの仕組み
スパイダーの仕組みhome.jspabout.jspcontact.jsp login.jsp login.jsp search.jspproduct.jsp?typeid=XX product.jsp?prodid=XX
スパイダーの仕組みhome.jspabout.jspcontact.jsp login.jsp login.jsp search.jspページ内のリンクを順に辿ってページ収集する機能
動的スキャン• 開始URLを選択し、動的スキャンを行う• ページアクセス時のリクエストを改ざんし検査
動的スキャン• 指定する領域の選び方– All In Scope : コンテキストの設定範囲内へスキャン実行– Site Scan : 対象ドメインへスキャン実行– Subtree : 対象ディレクトリ配下へスキャン実行– Single URL Scan : 対象URLのみへスキャン実行
動的スキャン• 動的スキャンの進捗を確認
動的スキャンの仕組み問い合わせフォームにある投稿する機能に脆弱性は無いか検査する場合
動的スキャンの仕組み対象URLへのみ動的スキャンを行うパラメータは3個
動的スキャンの仕組み1つ目のパラメータへ診断2つ目のパラメータへ診断3つ目のパラメータへ診断
エンコーダ/デコーダ• 文字列をエンコード/デコードする機能• 文字列をハッシュ計算する機能• 変換出来る種類– Base64 エンコード/デコード– URL エンコード/デコード– ASCII→16進数– HTML エンコード/デコード– Javascript エンコード/デコード
エンコーダ/デコーダ• 文字列を指定して変換
ブレーク機能• リクエストをブレーク• レスポンスをブレーク• 特定条件(カスタム)の場合にブレーク
ブレーク機能の利用• 1.「⇒」で、リクエストを中断させる• 2.中断したリクエストを改ざんする
ブレーク機能の利用• 3.改ざんしたリクエストを送信する• 3’送信直後にレスポンスを表示する
再送信• 指定したリクエストを再送信するコメントを入力し、投稿
再送信• 記録されたリクエストを再送信する
再送信• リクエストを改ざん後に送信できる
再送信• 再度書き込みが完了する
診断環境への検査
診断環境への検査(Bodge It)• 管理ページの公開• 反射型クロスサイト・スクリプティング• SQLインジェクション• 商品購入時の購入数を改ざん• 持続型クロスサイト・スクリプティング• クッキーの改ざん
診断環境への検査(Bodge It)
診断環境への検査(Bodge It)• 脆弱性が見つけられたかチェック
ZAPのその他の主な機能紹介
CSRFトークン• トークンに用いられるパラメータを指定• 使用する場合、オプションにて設定
強制ブラウズ• ディレクトリ調査• カスタマイズも可能• directory-list-1.0.txt 141,694件 収録• directory-list-2.3-big.txt 1,273,819件 収録• directory-list-2.3-medium.txt 220,546件 収録• directory-list-2.3-small.txt 87,650件 収録• directory-***2.3-big.txt 1,185,240件 収録• directory-***2.3-medium.txt 207,619件 収録• directory-***2.3-small.txt 81,643件 収録
Fuzzの使い方• 機能– 指定箇所に特定の文字列を順に埋め込み、リクエスト送信する機能• 主な使い方– 特定パラメータに攻撃文字列を埋め込みたい
Fuzz• 攻撃文字列を連続試行• 「Reflected」で簡単判別• レスポンスで、すぐ確認可能• 試行パターンが豊富– Format String Payloads– SQL Injection– Cross Site Scripting– など
Fuzzの使い方Part1 (文字列置換)username=‘ or ‘1’=‘1&password=username=‘ union select&password=…
Fuzzの使い方Part2 (文字列追加)[email protected]‘ or ‘1’=‘1&password=[email protected]‘ union select&password=…
ログイン状態の設定(フォーム編)1. ログイン処理を行うリクエストを探す2. ログイン処理を登録する[右クリック > Flags as Context> 1: form-based Auth Login Request]3. Username/Passwordのパラメータを設定する4. ログイン状態で(ある/はない)文字列を探す5. 4の箇所をどちらか登録する[右クリック > Flag as Context> 1: Auth Logged-in/out indicator]
ログイン状態の設定(フォーム編)1. ログイン処理を行うリクエストを探す2. ログイン処理を登録する[右クリック > Flasg as Context> 1: form-based Auth Login Request]3. Username/Passwordのパラメータを設定する4. ログイン状態で(ある/はない)文字列を探す5. 4の箇所をどちらか登録する[右クリック > Flag as Context> 1: Auth Logged-in/out indicator]
ログイン状態の設定(フォーム編)1. ログイン処理を行うリクエストを探す2. ログイン処理を登録する[右クリック > Flasg as Context> 1: form-based Auth Login Request]3. Username/Passwordのパラメータを設定する4. ログイン状態で(ある/はない)文字列を探す5. 4の箇所をどちらか登録する[右クリック > Flag as Context> 1: Auth Logged-in/out indicator]ログインしている状態ログインしていない状態
ログイン状態の設定(フォーム編)6. ログイン時のユーザ情報を登録7. ユーザを選択8. ユーザモードをONにする
ログイン状態の設定(フォーム編)ログインした状態を維持し続けることが可能
ZAP Script• 様々な状況下でスクリプトを実行– Passive Rules• パッシブスキャン実行時に実行– Active Rules• 動的スキャン実行時に実行– プロキシ• ZAPをプロキシとして使用する時に実行– Stand Alone• 手動で実行– Targeted• 指定したURLに対して実行
Plug-n-Hack• Firefoxのアドオン• 有効にした後、Shift+F2で起動• コマンドでZAP操作– zap http-session– zap record– zap scan– zap session– zap spider– …
Ajax Spider71
検査結果の確認
• 検知した情報をアラートで確認アラートの見方送信時のリクエストも再現可能
レベル別精査手法• [Lv1]脆弱性?リスク分析?良く分からない・・・– 検出した高い脆弱性を意識しましょう• [Lv2]プログラムは書ける!でも脆弱性はあまり・・・– 検出した脆弱性が発生する原理を理解しましょう• [Lv3]OWASP TOP10の脆弱性なら理解できる!– 検出した脆弱性が正しいか確認しましょう
よく検知する脆弱性• [High]Cross Site Scripting(Reflected)反射型クロスサイト・スクリプティング• [High]Cross Site Scripting(Persistent)持続型クロスサイト・スクリプティング• [High]SQL InjectionSQLインジェクション• [Medium]Application Error disclosureアプリケーションエラーの開示• [Low]Cookie set without HttpOnly flagクッキーにHttpOnlyが設定されていない• [Low]Password Authentication in browserオートコンプリート機能の有効• [Low]X-Content-Type-Option header missingX-Content-Type-Optionsヘッダの未設定• [Info]X-Frame-Options header not setX-Frame-Optionsヘッダが設定されていない
データの保存HSQL (JavaのRDB)- Persist Session- Snapshot SessionZAP起動直後(保存無し)PersistSession(継続保存) SnapshotSession(スナップショット)SnapshotSession(スナップショット)ZAP終了(自動保存)①② ③①’
ZAPコミュニティの紹介
Google Group• OWASP ZAPDeveloper Group– メンバー数:434人– 開始日:2010/08/17– 主な内容• ZAP開発に関すること• Extensionの開発• バグ修正• OWASP ZAP UserGroup– メンバー数:431人– 開始日:2012/05/22– 主な内容• 使い方の質問• 実装してほしいリクエスト
Google Group• OWASP ZAP Scripts– メンバー数:30人– 開始日:2014/03/26– 主な内容• ZAPスクリプトを共有するためのグループ
Translations for the OWASP ZAP(https://crowdin.net/project/owasp-zap)• ZAP翻訳プロジェクト• 日本語翻訳度は30%(2015/2/10現在)• だれでも参加可能
日本語コミュニティ開設沖縄で開催されたHardening 10 Evolutionにて立ち上げ!OWASP ZAP Japan Groupメンバー数:55人http://bit.ly/zapjapan
Any Question?• Social Account– Twitter : @YuhoKameda• URL– https://www.owasp.org/index.php/User:Yuho_Kameda• E-mail– [email protected]