Slide 1

Slide 1 text

脆弱性検査ツール『OWASP ZAP』 ハンズオン in 大阪 [OWASP Kansai主催] 2015/02/10 亀田 勇歩 @YuhoKameda

Slide 2

Slide 2 text

Profile(プロフィール) 亀田 勇歩 - @YuhoKameda [活動] ZAP Evangelist 『OWASP Zed Attack Proxy 運用マニュアル』執筆協力 ZAP Hands-on Training in AppSec APAC2014 脆弱性診断士(Web アプリケーション)スキルマップ執筆 [業務] Web/PF脆弱性診断 インシデントレスポンス全般

Slide 3

Slide 3 text

ZAP Evangelist

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

IPAテクニカルウォッチ 「ウェブサイトにおける脆弱性検査手法の紹介」の公開 https://www.ipa.go.jp/about/technicalwatch/20131212.html

Slide 6

Slide 6 text

『OWASP Zed Attack Proxy 運用マニュアル』執筆協力 • Ver 2.1.0版にて作成 • インストール手順から各 種メニューまで

Slide 7

Slide 7 text

診断を始める前に

Slide 8

Slide 8 text

診断時の注意 • 自分の管理する範囲内のサーバのみスキャン を行うようにしてください。 • データへの影響や診断文字列の残存、診断対 象へ一定の負荷があるため、本番環境へ診 断をすることは可能な限り避けてください。 • アンチウィルスソフトが攻撃と判断し通信を遮 断する可能性があります。

Slide 9

Slide 9 text

準備するもの • OWASP ZAP 2.3.1 • OWASP BWA 1.1.1 • VMware Player ※OSやバージョンの差異によって、資料と一致しない 箇所がある可能性があります。

Slide 10

Slide 10 text

ZAPの準備 • OWASP Zed Attack Proxyのダウンロード – 下記のページへアクセスし、環境に合わせてダウンロードす る – https://code.google.com/p/zaproxy/wiki/Downloads 安定版 開発版 (週次リリース)

Slide 11

Slide 11 text

BWAの準備 • OWASP Broken Web Applicationのダウンロード – OWASP Broken Web Applicationのサイトへアクセスする – http://sourceforge.net/projects/owaspbwa/files/ • 環境に合わせてダウンロードしてください – http://sourceforge.net/projects/owaspbwa/files/

Slide 12

Slide 12 text

BWAの準備 • .ovaをダウンロードした場合 – 「.ova」ファイルを開く – 「インポート」を選択する

Slide 13

Slide 13 text

BWAの準備 • .zipをダウンロードした場合 – 「.vmx」ファイルを開く – 「コピーしました」を 選択する

Slide 14

Slide 14 text

仮想マシン操作時の注意事項 • BWAのアカウントは下記の通りです。 – User Name : root – Password : owaspbwa • 仮想マシンを操作後、自分のマシンへカーソルを戻し たい場合、下記の操作を行ってください。 – [VM Playerの場合] Ctrl + Altボタン – [Virtual Boxの場合] 右Ctrlボタン

Slide 15

Slide 15 text

ZAPを使用するための準備

Slide 16

Slide 16 text

設定(オプション) • ローカルプロキシに利用するポート番号

Slide 17

Slide 17 text

設定(オプション) • プロキシツール使用時のブラウザ設定(IE)

Slide 18

Slide 18 text

設定(オプション) • プロキシツール使用時のブラウザ設定(IE)

Slide 19

Slide 19 text

設定(オプション) • プロキシツール使用時のブラウザ設定(Firefox)

Slide 20

Slide 20 text

設定(オプション) • スキャンのスレッド数/階層の深さ – スパイダー – 動的スキャン – 強制ブラウズ – ポートスキャン 負荷を考慮し設定すること

Slide 21

Slide 21 text

設定(オプション) • クライアント証明書の導入

Slide 22

Slide 22 text

設定(オプション) • セッションIDの設定 使用するセッションIDが無い場合は「追加」

Slide 23

Slide 23 text

ZAPを用いた自動診断手法

Slide 24

Slide 24 text

クイックスタート • 開始URLを指定し検査を行う • 操作が簡単 「スパイダー => 動的スキャン」

Slide 25

Slide 25 text

各種モード説明 Safe mode : 検査不可(閲覧モード) Protected mode : スコープ内のみ検査可(推奨) Standard mode : どこでも検査可 ATTACK mode : スコープ変更時に全自動スキャン (Ver2.4.0実装予定) うまくスコープが設定できない場合、Standard modeで検査を!

Slide 26

Slide 26 text

コンテキスト設定 • スコープを指定 – 診断対象を明示 • 設定することにより、診 断したいサイトへのみス キャンを行うようにする

Slide 27

Slide 27 text

除外設定 • (必要がある場合、)検査に 不要なリクエストを除外

Slide 28

Slide 28 text

スパイダー検索 • 開始URLを選択し、スパイダー検索を行う • リンクを辿って対象のページを抽出する

Slide 29

Slide 29 text

スパイダーの仕組み

Slide 30

Slide 30 text

スパイダーの仕組み home.jsp about.jsp contact.jsp login.jsp login.jsp search.jsp product.jsp ?typeid=XX product.jsp ?prodid=XX

Slide 31

Slide 31 text

スパイダーの仕組み home.jsp about.jsp contact.jsp login.jsp login.jsp search.jsp ページ内のリンクを順に 辿ってページ収集する機能

Slide 32

Slide 32 text

動的スキャン • 開始URLを選択し、動的スキャンを行う • ページアクセス時のリクエストを改ざんし検査

Slide 33

Slide 33 text

動的スキャン • 指定する領域の選び方 – All In Scope : コンテキストの設定範囲内へスキャン実行 – Site Scan : 対象ドメインへスキャン実行 – Subtree : 対象ディレクトリ配下へスキャン実行 – Single URL Scan : 対象URLのみへスキャン実行

Slide 34

Slide 34 text

動的スキャン • 動的スキャンの進捗を確認

Slide 35

Slide 35 text

動的スキャンの仕組み 問い合わせフォームにある 投稿する機能に脆弱性は無いか検査する場合

Slide 36

Slide 36 text

動的スキャンの仕組み 対象URLへのみ動的スキャンを行う パラメータは3個

Slide 37

Slide 37 text

動的スキャンの仕組み 1つ目のパラメータへ診断 2つ目のパラメータへ診断 3つ目のパラメータへ診断

Slide 38

Slide 38 text

エンコーダ/デコーダ • 文字列をエンコード/デコードする機能 • 文字列をハッシュ計算する機能 • 変換出来る種類 – Base64 エンコード/デコード – URL エンコード/デコード – ASCII→16進数 – HTML エンコード/デコード – Javascript エンコード/デコード

Slide 39

Slide 39 text

エンコーダ/デコーダ • 文字列を指定して変換

Slide 40

Slide 40 text

ブレーク機能 • リクエストをブレーク • レスポンスをブレーク • 特定条件(カスタム)の場合 にブレーク

Slide 41

Slide 41 text

ブレーク機能の利用 • 1.「⇒」で、リクエストを中断させる • 2.中断したリクエストを改ざんする

Slide 42

Slide 42 text

ブレーク機能の利用 • 3.改ざんしたリクエストを送信する • 3’送信直後にレスポンスを表示する

Slide 43

Slide 43 text

再送信 • 指定したリクエストを再送信する コメントを入力し、投稿

Slide 44

Slide 44 text

再送信 • 記録されたリクエストを再送信する

Slide 45

Slide 45 text

再送信 • リクエストを改ざん後に送信できる

Slide 46

Slide 46 text

再送信 • 再度書き込みが完了する

Slide 47

Slide 47 text

診断環境への検査

Slide 48

Slide 48 text

診断環境への検査 (Bodge It) • 管理ページの公開 • 反射型クロスサイト・スクリプティング • SQLインジェクション • 商品購入時の購入数を改ざん • 持続型クロスサイト・スクリプティング • クッキーの改ざん

Slide 49

Slide 49 text

診断環境への検査 (Bodge It)

Slide 50

Slide 50 text

診断環境への検査 (Bodge It) • 脆弱性が見つけられたかチェック

Slide 51

Slide 51 text

ZAPのその他の主な機能紹介

Slide 52

Slide 52 text

CSRFトークン • トークンに用いられるパラ メータを指定 • 使用する場合、オプションに て設定

Slide 53

Slide 53 text

強制ブラウズ • ディレクトリ調査 • カスタマイズも可能 • 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件 収録

Slide 54

Slide 54 text

Fuzzの使い方 • 機能 – 指定箇所に特定の文字列を順に埋め込み、リク エスト送信する機能 • 主な使い方 – 特定パラメータに攻撃文字列を埋め込みたい

Slide 55

Slide 55 text

Fuzz • 攻撃文字列を連続試行 • 「Reflected」で簡単判別 • レスポンスで、すぐ確認 可能 • 試行パターンが豊富 – Format String Payloads – SQL Injection – Cross Site Scripting – など

Slide 56

Slide 56 text

Fuzzの使い方 Part1 (文字列置換) username=‘ or ‘1’=‘1&password= username=‘ union select&password= …

Slide 57

Slide 57 text

Fuzzの使い方 Part2 (文字列追加) [email protected]‘ or ‘1’=‘1&password= [email protected]‘ union select&password= …

Slide 58

Slide 58 text

ログイン状態の設定(フォーム編) 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]

Slide 59

Slide 59 text

ログイン状態の設定(フォーム編) 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]

Slide 60

Slide 60 text

ログイン状態の設定(フォーム編) 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]

Slide 61

Slide 61 text

ログイン状態の設定(フォーム編) 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]

Slide 62

Slide 62 text

ログイン状態の設定(フォーム編) 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] ログインしている状態 ログインしていない状態

Slide 63

Slide 63 text

ログイン状態の設定(フォーム編) 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]

Slide 64

Slide 64 text

ログイン状態の設定(フォーム編) 6. ログイン時のユーザ情報を登録 7. ユーザを選択 8. ユーザモードをONにする

Slide 65

Slide 65 text

ログイン状態の設定(フォーム編) 6. ログイン時のユーザ情報を登録 7. ユーザを選択 8. ユーザモードをONにする

Slide 66

Slide 66 text

ログイン状態の設定(フォーム編) 6. ログイン時のユーザ情報を登録 7. ユーザを選択 8. ユーザモードをONにする

Slide 67

Slide 67 text

ログイン状態の設定(フォーム編) 6. ログイン時のユーザ情報を登録 7. ユーザを選択 8. ユーザモードをONにする

Slide 68

Slide 68 text

ログイン状態の設定(フォーム編) ログインした状態を維持し続けることが可能

Slide 69

Slide 69 text

ZAP Script • 様々な状況下でスクリプトを実行 – Passive Rules • パッシブスキャン実行時に実行 – Active Rules • 動的スキャン実行時に実行 – プロキシ • ZAPをプロキシとして使用する時 に実行 – Stand Alone • 手動で実行 – Targeted • 指定したURLに対して実行

Slide 70

Slide 70 text

Plug-n-Hack • Firefoxのアドオン • 有効にした後、Shift+F2で起動 • コマンドでZAP操作 – zap http-session – zap record – zap scan – zap session – zap spider – …

Slide 71

Slide 71 text

Ajax Spider 71

Slide 72

Slide 72 text

検査結果の確認

Slide 73

Slide 73 text

• 検知した情報をアラートで確認 アラートの見方 送信時のリクエストも 再現可能

Slide 74

Slide 74 text

レベル別精査手法 • [Lv1]脆弱性?リスク分析?良く分からない・・・ – 検出した高い脆弱性を意識しましょう • [Lv2]プログラムは書ける!でも脆弱性はあまり・・・ – 検出した脆弱性が発生する原理を理解しましょう • [Lv3]OWASP TOP10の脆弱性なら理解できる! – 検出した脆弱性が正しいか確認しましょう

Slide 75

Slide 75 text

よく検知する脆弱性 • [High]Cross Site Scripting(Reflected) 反射型クロスサイト・スクリプティング • [High]Cross Site Scripting(Persistent) 持続型クロスサイト・スクリプティング • [High]SQL Injection SQLインジェクション • [Medium]Application Error disclosure アプリケーションエラーの開示 • [Low]Cookie set without HttpOnly flag クッキーにHttpOnlyが設定されていない • [Low]Password Authentication in browser オートコンプリート機能の有効 • [Low]X-Content-Type-Option header missing X-Content-Type-Optionsヘッダの未設定 • [Info]X-Frame-Options header not set X-Frame-Optionsヘッダが設定されていない

Slide 76

Slide 76 text

データの保存 HSQL (JavaのRDB) - Persist Session - Snapshot Session ZAP起動直後 (保存無し) Persist Session (継続保存) Snapshot Session (スナップショット) Snapshot Session (スナップショット) ZAP終了 (自動保存) ① ② ③ ①’

Slide 77

Slide 77 text

ZAPコミュニティの紹介

Slide 78

Slide 78 text

Google Group • OWASP ZAP Developer Group – メンバー数:434人 – 開始日:2010/08/17 – 主な内容 • ZAP開発に関すること • Extensionの開発 • バグ修正 • OWASP ZAP User Group – メンバー数:431人 – 開始日:2012/05/22 – 主な内容 • 使い方の質問 • 実装してほしいリクエスト

Slide 79

Slide 79 text

Google Group • OWASP ZAP Scripts – メンバー数:30人 – 開始日:2014/03/26 – 主な内容 • ZAPスクリプトを共有するためのグループ

Slide 80

Slide 80 text

Translations for the OWASP ZAP (https://crowdin.net/project/owasp- zap) • ZAP翻訳プロジェクト • 日本語翻訳度は30% (2015/2/10現在) • だれでも参加可能

Slide 81

Slide 81 text

日本語コミュニティ開設 沖縄で開催された Hardening 10 Evolution にて立ち上げ! OWASP ZAP Japan Group メンバー数:55人 http://bit.ly/zapjapan

Slide 82

Slide 82 text

Any Question? • Social Account – Twitter : @YuhoKameda • URL – https://www.owasp.org/index.php/User:Yuho_Kameda • E-mail – [email protected]