Slide 1

Slide 1 text

開発者・運用担当者に向けた、 OWASP ZAPを用いた脆弱性診断手法 Penetration Testing by OWASP ZAP for Developer / Operator 2017年9月30日 @YuhoKameda

Slide 2

Slide 2 text

自己紹介 亀田 勇歩 - SCSK株式会社 セキュリティサービス部 - @YuhoKameda [業務] Web/PF脆弱性診断 インシデントレスポンス全般 [活動] ZAP Evangelist 『OWASP Zed Attack Proxy 運用マニュアル』執筆協力 ZAP Hands-on Training in AppSec APAC2014 Webシステム/Webアプリケーションセキュリティ要件書 2.0 執筆 脆弱性診断士(Web アプリケーション)ガイドライン 執筆 OSINT CTF 8位入賞 (DEFCON 25)

Slide 3

Slide 3 text

Agenda • OWASP ZAPとは? • ZAPの利用想定事例 • 役に立つ関連OWASPプロジェクト – OWASP Top 10 – OWASP Cheat Sheet – Pentester Skillmap Project JP • OWASP トップ10に対応するZAP機能の紹介 • 振り返り

Slide 4

Slide 4 text

本トレーニングについて • 概要 – OWASP ZAPを使用して、開発中のアプリや納品時の受け入れテスト時に、脆弱性診断を行うことを 目的としたトレーニングを実施します。 • 目的 – 開発を行いながら脆弱性を作りこんでいないか簡易的に診断を行うことができる – 受け入れ時に簡易的に診断を行うことができる – ZAPを使ったことがあるが、簡易的に診断を行うためのより詳しい使い方やコツを知ることができる – ZAPを使って「Webアプリケーション脆弱性診断ガイドライン」を利用する方法を知ることができる • 主な対象者 – ZAPを利用したことがある、ZAPの基本的な操作を理解している – 開発中や受け入れ時に診断を行いたいと考えている開発者や受け入れ担当者 • 関連プロジェクト – OWASPトップ10 – OWASPチートシート – Pentester Skillmap Project JP

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

OWASP ZAPとは?

Slide 7

Slide 7 text

OWASP ZAPとは? • OWASP Zed Attack Proxy(ZAP) • 全世界的に使用されている無料のペネトレー ションテストツール • Webアプリケーションに対して自動診断を行う • 腕を磨けば手動での診断にも利用できる

Slide 8

Slide 8 text

OWASP ZAPとは? •画面イメージ

Slide 9

Slide 9 text

2.0.0以降のZAP年表 2013 2013/01/30 ver 2.0.0 2013/04/18 ver 2.1.0 2013/09/11 ver 2.2.0 2013/09/27 ver 2.2.2 2013/11/04 ZAP Evangelist制度開始 2014 2014/03/17 AppSec APACにてハンズオントレーニング 2014/03/27 ZAP Evangelistに日本人初の登録 2014/04/10 ver 2.3.0 2014/05/21 ver 2.3.1 2015 2015/04/14 ver 2.4.0 2015/07/30 ver 2.4.1 2015/08 ZAPスクリプトコンテスト 2015/09/07 ver 2.4.2 2015/12/04 ver 2.4.3 2016 2016/06/03 ver 2.5.0 2016/06/03 bugcrowdでバグバウンティプログラム開始 2017 2017/03/29 ver 2.6.0

Slide 10

Slide 10 text

ZAPの役に立つ情報ソース • Twitter (ZAPに関するアナウンス) – https://twitter.com/zaproxy • ZAP Blog (定期的な情報発信) – https://zaproxy.blogspot.jp/ • ZAP User Guide (コア機能に関するマニュアル) – https://github.com/zaproxy/zap-core-help/wiki • ZAP Introduction Wiki (詳細なオンラインマニュアル) – https://github.com/zaproxy/zaproxy/wiki/Introduction • ZAP User Group (ユーザコミュニティ) – https://groups.google.com/group/zaproxy-users • Crowdin ZAP GUI translation (GUI翻訳グループ) – https://crowdin.com/project/owasp-zap • Crowdin ZAP User Guide Translation (User Guide 翻訳グループ) – https://crowdin.com/project/owasp-zap-help • Open Hub (OSS 開発コミュニティサイト) – https://www.openhub.net/p/zaproxy • Bountysource (ZAP バグバウンティプログラム) – https://www.bountysource.com/teams/zap/issues • ZAP日本語マニュアル Ver.2.1.0版 (日本語) – https://docs.google.com/file/d/0B1e1Cma1GUllazNUNVp6OWdGYzg/edit

Slide 11

Slide 11 text

ZAP最新版を入手 • OWASP Zed Attack Proxy Project – https://www.owasp.org/index.php/OWASP_Zed_ Attack_Proxy_Project ここから ダウンロード!

Slide 12

Slide 12 text

Proxyツールとしての機能 • ZAPをProxyとして機能させて、リクエストを改竄し、レ スポンスを評価します。Proxyのブレーク機能を用い た手動検査の方法を紹介する。 ①通常のリクエスト ブラウザ等で、Webページを閲覧 ③Proxyにより 改ざんされたリクエスト ④サーバからのレスポンス ⑤ログの記録 必要により、レスポンス の改ざんを行う Proxy 検査対象 ②Proxyによる改ざん GET/POST/Cookie他、 ヘッダを不正な値に変更する ⑥Proxyを通過したレスポンス

Slide 13

Slide 13 text

ZAP基本機能の振り返り • Active Scan • Passive Scan • ブレークポイント • スパイダー • AJAXスパイダー • 強制ブラウズ • スキャンポリシー • 証明書 • エンコード/デコード • レポート生成 • 拡張機能 • Fuzzer • Web Sockets • Replacer • Zest • スクリプト

Slide 14

Slide 14 text

ZAPの利用想定事例

Slide 15

Slide 15 text

ZAPの利用想定事例 要件定義 設計/開発 • 開発中の動 作確認 テスト/検証 • 受け入れテ スト 運用/保守 • 脆弱性診断 の実施

Slide 16

Slide 16 text

ZAPの利用想定事例 • (設計/開発)開発中の動作確認 – デバッグや簡単な脆弱性確認に利用 • (テスト/検証)受け入れテスト – 納品されたWebアプリの受け入れテストに利用 • (運用/保守)脆弱性診断の実施 – 機能リリース等による脆弱性診断に利用

Slide 17

Slide 17 text

ZAPの利用想定事例 • (設計/開発)開発中の動作確認 – デバッグや簡単な脆弱性確認に利用 • (テスト/検証)受け入れテスト – 納品されたWebアプリの受け入れテストに利用 • (運用/保守)脆弱性診断の実施 – 機能リリース等による脆弱性診断に利用 デバッグしながら脆弱性が無いことを確認 確認すべき検査項目を元に診断を実施 自動診断による網羅的な診断 手動診断による自動診断で漏れる検査の実施

Slide 18

Slide 18 text

役に立つ関連OWASPプロジェクト

Slide 19

Slide 19 text

役に立つ関連OWASPプロジェクト • OWASPトップ10 • OWASPチートシート • Pentester Skillmap Project JP

Slide 20

Slide 20 text

役に立つ関連OWASPプロジェクト • OWASP トップ10 (ZAPpingTheTop10) – ZAPでOWASP トップ10を診断しようとした際のマッピング – 自動診断 (Active Scan Rule / Passive Scan Rule) • A1 : Injection • A3 : Cross-Site Scripting (XSS) • A5 : Security Misconfiguration • A6 : Sensitive Data Exposure • A8 : Cross-Site Request Forgery (CSRF) • A9 : Using Components with Known Vulnerabilities • A10 : Unvalidated Redirects and Forwards – 手動診断 • A6(機密データの露出)以外全般 https://www.owasp.org/index.php/ZAPpingTheTop10

Slide 21

Slide 21 text

役に立つ関連OWASPプロジェクト • OWASP トップ10 (ZAPpingTheTop10) – 自動診断では見つからない項目 • A2 : Broken Authentication and Session Management – 有効なZAPの機能例 : Httpセッション • A4 : Insecure Direct Object References – 有効なZAPの機能例 : パラメータ タブ • A7 : Missing Function Level Access Control – 有効なZAPの機能例 : スパイダー / AJAXスパイダー – 今後期待なZAPの機能 : Access Control

Slide 22

Slide 22 text

役に立つ関連OWASPプロジェクト • OWASP チートシート

Slide 23

Slide 23 text

役に立つ関連OWASPプロジェクト • OWASP チートシート(Assessment/Breakers) – Web Application Security Testing Cheat Sheet – 診断時に必要な項目のチェックリスト • (英語) – https://www.owasp.org/index.php/Web_Application_Security _Testing_Cheat_Sheet • (日本語) – https://jpcertcc.github.io/OWASPdocuments/CheatSheets/W ebApplicationSecurityTesting.html

Slide 24

Slide 24 text

役に立つ関連OWASPプロジェクト • Pentester Skillmap Project JP • 脆弱性診断士スキルマッププロジェクト • https://www.owasp.org/index.php/Pentester_Skillmap_Project_JP – 脆弱性診断士(Webアプリケーション)スキルマップ&シラバス – 脆弱性診断士(プラットフォーム)スキルマップ&シラバス • 脆弱性診断業務に必要な技術的な能力を明示(マネジメントやコミュニケー ションスキルは対象外) • 特定のツールや環境に依存しない • 各社提供の診断サービスの品質に対する指標は対象外 – Webアプリケーション脆弱性診断ガイドライン • 手動診断補助ツールを使った手動診断を推奨 • 能力差を埋めるため、最低限必要な診断項目や手順を定義 • 一定レベルの手動診断による脆弱性診断 ガイドラインを使ったハンズオントレーニングも実施!

Slide 25

Slide 25 text

Webアプリケーション脆弱性診断ガイ ドライン • OWASP JapanとISOG-Jの共同WGによる作成 • 脆弱性診断を行う個人の技術的な能力を具体的にする。 • 脆弱性診断を行う技術者(以下、脆弱性診断士)のスキル マップと学習の指針となるシラバス、脆弱性診断を行うため のガイドラインを整備。 • - 脆弱性診断士(Webアプリケーション) • - 脆弱性診断士(プラットフォーム)

Slide 26

Slide 26 text

Webアプリケーション脆弱性診断ガイ ドライン <主な対象者> • 自社のWebアプリケーションの脆弱性診断(受入れ検査) を行う方 • 脆弱性診断業務の従事を目指す方(学生など) <活用方法例> ✓ スキルマップ&シラバスを用いた、基礎知識の習得 ✓ 脆弱性診断ガイドラインを用いた、基礎的な受入れ検査実 施 ✓ 脆弱性診断ガイドラインを用いた、開発時の簡易「脆弱性 診断」実施

Slide 27

Slide 27 text

Webアプリケーション脆弱性診断ガイ ドライン • ガイドライン掲載の例 – 分類 : SQLインジェクション – 診断を実施すべき箇所 : すべて – ペイロード・検出パターン : ‘ (シングルクォート) – 操作を行う対象 : パラメーター – 診断方法 • パラメーターの値に検出パターンを挿入し、リクエストを送信 – 脆弱性がある場合 • DB関連のエラーが表示されるか、正常動作と挙動が異なる – 脆弱性がない場合 • DB関連のエラーは表示されない どの箇所に何を 埋め込むか どう診断したときに、どのように動作したか

Slide 28

Slide 28 text

ZAPの利用想定事例 • (設計/開発)開発中の動作確認 – デバッグや簡単な脆弱性確認に利用 • (テスト/検証)受け入れテスト – 納品されたWebアプリの受け入れテストに利用 • (運用/保守)脆弱性診断の実施 – 機能リリース等による脆弱性診断に利用 デバッグしながら脆弱性が無いことを確認 確認すべき検査項目を元に診断を実施 自動診断による網羅的な診断 手動診断による自動診断で漏れる検査の実施

Slide 29

Slide 29 text

OWASPプロジェクトを活かした ZAPの利用想定事例 • (設計/開発)開発中の動作確認 – デバッグや簡単な脆弱性確認に利用 • (テスト/検証)受け入れテスト – 納品されたWebアプリの受け入れテストに利用 • (運用/保守)脆弱性診断の実施 – 機能リリース等による脆弱性診断に利用 デバッグを兼ねたローカルプロキシツール 脆弱性診断ガイドラインに沿った診断実施 OWASP トップ10に対応した自動 / 手動診断

Slide 30

Slide 30 text

利用想定事例にあった施策 • デバッグを兼ねたローカルプロキシツール • 脆弱性診断ガイドラインに沿った診断実施 – 「Webアプリケーション脆弱性診断ガイドライン利用 のためのドキュメント」を読む • ブラウザの通信がZAPを通してアクセスできていることを確 認 • 診断項目を確認 • 脆弱性がない場合を確認 • 診断を実施 • 脆弱性がある場合の結果を確認 • 再送信せずに、ブレークして診断を実施 https://docs.google.com/document/d/1-eZqWf2TqfEwc9f-OZr6bY24VjvNMUwS9zzAejpZQ64/

Slide 31

Slide 31 text

利用想定事例にあった施策 • OWASP トップ10に対応した自動 / 手動診断 – 自動診断 (A1, A3, A5, A6, A8, A9, A10) • Active Scan Rule • Passive Scan Rule – 手動診断 (A2, A4, A7) • Httpセッション • パラメータ タブ • スパイダー / AJAXスパイダー • Access Control

Slide 32

Slide 32 text

OWASP トップ10に対応する ZAP機能の紹介

Slide 33

Slide 33 text

Active Scan Rule • 動的スキャンのルール集 • Release / Beta / Alpha – Releaseのみデフォルトでインストール – Beta以降は、より複雑なペイロードを含む – 基本的な脆弱性を見つける場合、Releaseを推奨

Slide 34

Slide 34 text

Active Scan Rule • 使用可能なActive Scan Rulesを確認 どちらの選択画面でも 確認できます。

Slide 35

Slide 35 text

Active Scan Rule • 「ポリシー」で、ステータスごとに表示が異なる • 使用したいテスト名のみ選択可能

Slide 36

Slide 36 text

Passive Scan Rule • 静的(パッシブ)スキャンのルール集 • Release / Beta / Alpha – Releaseのみデフォルトでインストール – Beta以降は、より珍しい検出文字列が増える – 過検知が増えるような検出文字列が増える – 基本的な脆弱性を見つける場合、Releaseを推奨

Slide 37

Slide 37 text

Passive Scan Rule • オプションの「静的スキャンルール」で確認

Slide 38

Slide 38 text

Httpセッション • 特定の条件にマッチした文字列をセッション 情報として格納 • 必要に応じてセッションを切り替えて使用

Slide 39

Slide 39 text

Httpセッション • 「オプション」で、使用するセッション名を検出 するよう設定

Slide 40

Slide 40 text

Httpセッション • セッションを使い分けて検査を行うことが可能

Slide 41

Slide 41 text

パラメータ タブ • 様々なパラメータの値を整理して表示 • デフォルトのタブ列に表示されていない場合、 「+」ボタンから「パラメータ」タブを追加

Slide 42

Slide 42 text

パラメータ タブ • サイトごとにパラメータの一覧が表示 • 1つ1つレスポンスを見なくても一挙に確認 • 手動操作やスパイダーで遷移させた後に確 認すると、存在する値を見逃さない

Slide 43

Slide 43 text

スパイダー / AJAXスパイダー • 指定ページから遷移可能なページを探索 • 認証があるサイトにおいて、「認証無し」と「認 証時」の設定を行うことによって、それぞれ 違った画面遷移を記録することが可能 「ログイン状態の設定(フォーム編)」については、 OWASP ZAP Hands-on In Osaka (2015-02-10) (P.58)を参照 https://speakerdeck.com/ykame/owasp-zap-hands-on-in-osaka-2015-02-10

Slide 44

Slide 44 text

Access Control • 次リリースで実装予定(Weekly実装済)

Slide 45

Slide 45 text

Access Control • 設定ユーザごとのアクセス制御を確認

Slide 46

Slide 46 text

振り返り • OWASP ZAPとは? • ZAPの利用想定事例 • 役に立つ関連OWASPプロジェクト – OWASP Top 10 – OWASP Cheat Sheet – Pentester Skillmap Project JPについて • OWASP トップ10に対応するZAP機能の紹介

Slide 47

Slide 47 text

Profile • Mail : [email protected] • Twitter : @YuhoKameda • WebSite (過去の発表資料) : – https://www.owasp.org/index.php/User:Yuho_Kameda – https://speakerdeck.com/ykame