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

F9b27b006dc2c4f3ca6613073c661834?s=47 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

F9b27b006dc2c4f3ca6613073c661834?s=128

Yuho Kameda

February 10, 2015
Tweet

Transcript

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

    @YuhoKameda
  2. Profile(プロフィール) 亀田 勇歩 - @YuhoKameda [活動] ZAP Evangelist 『OWASP Zed

    Attack Proxy 運用マニュアル』執筆協力 ZAP Hands-on Training in AppSec APAC2014 脆弱性診断士(Web アプリケーション)スキルマップ執筆 [業務] Web/PF脆弱性診断 インシデントレスポンス全般
  3. ZAP Evangelist

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

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

    種メニューまで
  7. 診断を始める前に

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

    断する可能性があります。
  9. 準備するもの • OWASP ZAP 2.3.1 • OWASP BWA 1.1.1 •

    VMware Player ※OSやバージョンの差異によって、資料と一致しない 箇所がある可能性があります。
  10. ZAPの準備 • OWASP Zed Attack Proxyのダウンロード – 下記のページへアクセスし、環境に合わせてダウンロードす る –

    https://code.google.com/p/zaproxy/wiki/Downloads 安定版 開発版 (週次リリース)
  11. BWAの準備 • OWASP Broken Web Applicationのダウンロード – OWASP Broken Web

    Applicationのサイトへアクセスする – http://sourceforge.net/projects/owaspbwa/files/ • 環境に合わせてダウンロードしてください – http://sourceforge.net/projects/owaspbwa/files/
  12. BWAの準備 • .ovaをダウンロードした場合 – 「.ova」ファイルを開く – 「インポート」を選択する

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

  14. 仮想マシン操作時の注意事項 • BWAのアカウントは下記の通りです。 – User Name : root – Password

    : owaspbwa • 仮想マシンを操作後、自分のマシンへカーソルを戻し たい場合、下記の操作を行ってください。 – [VM Playerの場合] Ctrl + Altボタン – [Virtual Boxの場合] 右Ctrlボタン
  15. ZAPを使用するための準備

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

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

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

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

  20. 設定(オプション) • スキャンのスレッド数/階層の深さ – スパイダー – 動的スキャン – 強制ブラウズ –

    ポートスキャン 負荷を考慮し設定すること
  21. 設定(オプション) • クライアント証明書の導入

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

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

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

  25. 各種モード説明 Safe mode : 検査不可(閲覧モード) Protected mode : スコープ内のみ検査可(推奨) Standard

    mode : どこでも検査可 ATTACK mode : スコープ変更時に全自動スキャン (Ver2.4.0実装予定) うまくスコープが設定できない場合、Standard modeで検査を!
  26. コンテキスト設定 • スコープを指定 – 診断対象を明示 • 設定することにより、診 断したいサイトへのみス キャンを行うようにする

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

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

  29. スパイダーの仕組み

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

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

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

  33. 動的スキャン • 指定する領域の選び方 – All In Scope : コンテキストの設定範囲内へスキャン実行 –

    Site Scan : 対象ドメインへスキャン実行 – Subtree : 対象ディレクトリ配下へスキャン実行 – Single URL Scan : 対象URLのみへスキャン実行
  34. 動的スキャン • 動的スキャンの進捗を確認

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

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

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

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

    – URL エンコード/デコード – ASCII→16進数 – HTML エンコード/デコード – Javascript エンコード/デコード
  39. エンコーダ/デコーダ • 文字列を指定して変換

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

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

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

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

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

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

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

  47. 診断環境への検査

  48. 診断環境への検査 (Bodge It) • 管理ページの公開 • 反射型クロスサイト・スクリプティング • SQLインジェクション •

    商品購入時の購入数を改ざん • 持続型クロスサイト・スクリプティング • クッキーの改ざん
  49. 診断環境への検査 (Bodge It)

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

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

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

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

  55. Fuzz • 攻撃文字列を連続試行 • 「Reflected」で簡単判別 • レスポンスで、すぐ確認 可能 • 試行パターンが豊富

    – Format String Payloads – SQL Injection – Cross Site Scripting – など
  56. Fuzzの使い方 Part1 (文字列置換) username=‘ or ‘1’=‘1&password= username=‘ union select&password= …

  57. Fuzzの使い方 Part2 (文字列追加) username=test@thebodgeitstore.com‘ or ‘1’=‘1&password= username=test@thebodgeitstore.com‘ union select&password= …

  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]
  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]
  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]
  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]
  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] ログインしている状態 ログインしていない状態
  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]
  64. ログイン状態の設定(フォーム編) 6. ログイン時のユーザ情報を登録 7. ユーザを選択 8. ユーザモードをONにする

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

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

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

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

  69. ZAP Script • 様々な状況下でスクリプトを実行 – Passive Rules • パッシブスキャン実行時に実行 –

    Active Rules • 動的スキャン実行時に実行 – プロキシ • ZAPをプロキシとして使用する時 に実行 – Stand Alone • 手動で実行 – Targeted • 指定したURLに対して実行
  70. Plug-n-Hack • Firefoxのアドオン • 有効にした後、Shift+F2で起動 • コマンドでZAP操作 – zap http-session

    – zap record – zap scan – zap session – zap spider – …
  71. Ajax Spider 71

  72. 検査結果の確認

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

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

    [Lv3]OWASP TOP10の脆弱性なら理解できる! – 検出した脆弱性が正しいか確認しましょう
  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ヘッダが設定されていない
  76. データの保存 HSQL (JavaのRDB) - Persist Session - Snapshot Session ZAP起動直後

    (保存無し) Persist Session (継続保存) Snapshot Session (スナップショット) Snapshot Session (スナップショット) ZAP終了 (自動保存) ① ② ③ ①’
  77. ZAPコミュニティの紹介

  78. Google Group • OWASP ZAP Developer Group – メンバー数:434人 –

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

    – 主な内容 • ZAPスクリプトを共有するためのグループ
  80. Translations for the OWASP ZAP (https://crowdin.net/project/owasp- zap) • ZAP翻訳プロジェクト •

    日本語翻訳度は30% (2015/2/10現在) • だれでも参加可能
  81. 日本語コミュニティ開設 沖縄で開催された Hardening 10 Evolution にて立ち上げ! OWASP ZAP Japan Group

    メンバー数:55人 http://bit.ly/zapjapan
  82. Any Question? • Social Account – Twitter : @YuhoKameda •

    URL – https://www.owasp.org/index.php/User:Yuho_Kameda • E-mail – yuho.kameda@owasp.org