$30 off During Our Annual Pro Sale. View Details »

OWASP ZAP Hands-on In Osaka (2015-02-10)

Yuho Kameda
February 10, 2015

OWASP ZAP Hands-on In Osaka (2015-02-10)

《無償で使える!脆弱性検査ツール『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

Yuho Kameda

February 10, 2015
Tweet

More Decks by Yuho Kameda

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. ZAP Evangelist

    View Slide

  4. 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

    View Slide

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

    View Slide

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

    View Slide

  7. 診断を始める前に

    View Slide

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

    View Slide

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

    View Slide

  10. ZAPの準備
    • OWASP Zed Attack Proxyのダウンロード
    – 下記のページへアクセスし、環境に合わせてダウンロードす

    – https://code.google.com/p/zaproxy/wiki/Downloads
    安定版
    開発版
    (週次リリース)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. ZAPを使用するための準備

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. ZAPを用いた自動診断手法

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. スパイダーの仕組み

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  47. 診断環境への検査

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  71. Ajax Spider
    71

    View Slide

  72. 検査結果の確認

    View Slide

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

    View Slide

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

    View Slide

  75. よく検知する脆弱性
    • [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ヘッダが設定されていない

    View Slide

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

    ② ③
    ①’

    View Slide

  77. ZAPコミュニティの紹介

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide