OWASP ZAP2.9.0を使ってOWASP Top 10を検証する

この記事について、公式ドキュメントのZAPping the OWASP Top 10を参考にしています。このページを見てわからないことがあれば、公式ドキュメントを参照してください。

公式サイト：https://www.zaproxy.org/
ドキュメント：https://www.zaproxy.org/docs/
ZAPping the OWASP Top 10：https://www.zaproxy.org/docs/guides/zapping-the-top-10/

# OWASP Zed Attack Proxy (ZAP)とは
オープンソースのWebアプリケーション脆弱性診断ツールです。無料で使えて、世界で最も広く使われていると言われています。

なお、この記事ではOWASP ZAP2.9.0を使っています。

# OWASP Top 10とは
OWASPが数年に１度発表する「最も重大なWebアプリケーションリスクトップ10」です。多くの実在するアプリケーションやAPIから集められた脆弱性のデータが基になっています。この蔓延度合いを反映しているデータにしたがって、悪用
のしやすさ、検知のしやすさ、および影響について、推計を組み合わせた上で、優先順位を付けられTop10が決定します。以降、OWASP Top 10の各説明は、[OWASP Top 10-2017（日本語）](https://owasp.org/www-pdf-archive/OWASP_Top_10-2017(ja).pdf)を参考にしています。

OWASP Top 10-2017（日本語）：https://owasp.org/www-pdf-archive/OWASP_Top_10-2017(ja).pdf

- A1 インジェクション
- A2 認証の不備
- A3 機微な情報の露出
- A4 XML 外部エンティティ参照 (XXE)
- A5 アクセス制御の不備
- A6 不適切なセキュリティ設定
- A7 クロスサイトスクリプティング (XSS)
- A8 安全でないデシリアライゼーション
- A9 既知の脆弱性のあるコンポーネントの使用
- A10 不十分なロギングとモニタリング

# OWASP ZAP2.9.0を使ってテストする
ZAPの簡単な使い方は、公式ドキュメントの[Getting Started](https://www.zaproxy.org/getting-started/)を参考にしてください。また、私なりにまとめた[OWASP ZAP2.9.0で脆弱性診断をする - Getting Started](https://qiita.com/koujimatsuda11/items/3d5b7eac5f9455015ba6)も見ていただける幸いです。

ZAPping the OWASP Top 10に、Top10をテストする時に使うことを推奨するコンポーネントが記載されています。
なお、OWASP Top 10は完全に自動化されたツールでテストすることは不可能です。もちろん、ZAPだけで完全にテストすることもできませんのでご注意ください。

## 共通コンポーネント
共通コンポーネントは、Top10の全てで役に立つ物です。

| 自動/手動 | 項目 |
|:--|:--|
| 手動 | Man-in-the-middle proxy |
| 手動 | Manual request / resend |
| 手動 | Scripts |
| 手動 | Search |

### Man-in-the-middle proxy（中間者プロキシ）
ZAPは中間者プロキシです。ブラウザとWebアプリの間に位置し、プロキシを通じて送信した全てのリクエストとレスポンスを確認することができます。詳細は、[Man-in-the-middle proxy（中間者プロキシ）](https://qiita.com/koujimatsuda11/private/ecb5384a74e1768815cf)を参照してください。

breakpointsを使うことで、リクエスト内容を変更しアラート内容が実際に再現可能かどうかをチェックすることで、あらゆる脆弱性のテストに役立ちます。

### Manual request / resend
breakpointsと同じような機能です。過去に探索したリクエストを、手動で編集して送ることができます。
詳細は、[Manual request / resend](https://qiita.com/koujimatsuda11/private/0406790fd88731cdb6ce)を参照してください。

### Scripts
ZAPでは、カスタムスクリプトを作成し実行することができます。ZAPに埋め込むことができ、内部ZAPデータ構造にアクセスできるスクリプトを実行できます。

詳しくは、[Script Console](https://www.zaproxy.org/docs/desktop/addons/script-console/)を参照してください。

### Search
ZAPでは、強力な検索機能があります。URL、リクエスト、レスポンス、ヘッダ、アドオンによって提供されたその他の機能の全てを正規表現で検索できます。

使い方は、[Seach](https://qiita.com/koujimatsuda11/private/bb9b81b8f656e0236364)を参照してください。

検索機能は、レスポンスの検索に役立ちます。レスポンス内容を検索して見つけることができるので、テスト結果の検証時に使うことができます。

## A1 インジェクション
インジェクションと一口にいってもいっぱいあります。一般的には、SQL、NoSQL、OSコマンド、オブジェクト・リレーショナル・マッピング（ORM）、LDAP、およびEL式（Expression Language）またはOGNL式（Object Graph　Navigation Library）のインジェクションがあります。

| 自動/手動 | 項目 |
|:--|:--|
| 自動 | Active Scan Rules (Release, Beta, and Alpha) |
| 自動 | Advanced SQLInjection Scanner (Based on SQLMap) |
| 手動 | Fuzzer, combined with the FuzzDb and SVN Digger files |

### Active Scan Rules(Release, Beta, and Alpha)
インジェクションの脆弱性を検知するためには、Active Scanを行います。ただし、デフォルトではActive ScanのルールはReleaseしか入っておらず、BetaとAlphaのルールについては追加する必要があります。

追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照してください。

BetaをAlphaを加えるとインジェクションだけで、下記になります。
<img width="862" alt="スクリーンショット 2020-05-07 23.13.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343282/cd01cb81-d29f-9da5-0625-f3f396b8b574.png">

詳しいルールは下記を参照してください。
[Active Scan Rules](https://www.zaproxy.org/docs/desktop/addons/active-scan-rules/)
[Active Scan Rules - Alpha](https://www.zaproxy.org/docs/desktop/addons/active-scan-rules-alpha/)
[Active Scan Rules - Beta](https://www.zaproxy.org/docs/desktop/addons/active-scan-rules-beta/)


ルールが多すぎると1回のスキャンに時間がかかりますので、スキャンポリシーを設定することで適切な時間で終わるよう調整してください。

1. ヘッダ部分のスキャンポリシーアイコンをクリックします
2. 表示されたダイアログで追加をクリックします
3. 任意のポリシー名を入力し、各ルールのしきい値と強度を設定することでルールを調整します

<img width="1118" alt="スクリーンショット 2020-05-07 23.03.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343282/16ded635-b0ea-d8d7-3c38-d455b4df8313.png">
<img width="862" alt="スクリーンショット 2020-05-07 23.17.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343282/acd1c6d6-6910-73f7-a22e-81b84bc7d3d1.png">

しきい値について
「既定」は、デフォルトのしきい値です。スキャンポリシーの設定画面で既定を「低」「中」「高」から選択できます
「オフ」は、そのルールのスキャンが実行されません
「低」は、しきい値が下がるため検出する数が増えますが、その分誤検知も増加します
「高」は、しきい値が上がるため検出する数が減りますが、その分見落としが増える可能性があります

強度について、
「既定」は、デフォルトのしきい値です。スキャンポリシーの設定画面で既定を「低」「中」「高」から選択できます
「低」は、強度が下がるため、攻撃が少なくなります。高速になりますが、その分見落としが増える可能性があります
「高」は、強度が上がるため、時間はかかるが多くの攻撃をし、より多くの問題を見つけることができます

例えば、インジェクションだけをチェックしたい場合、インジェクション以外の項目については、しきい値を「オフ」にすることで絞ることができます。

### Advanced SQLInjection Scanner (Based on SQLMap)
Active Scan RulesのBetaやAlphaと同様にデフォルトでインストールされていないアドオンです。同様の手順でインストールしましょう。

追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照ください。

このルールを追加するとActive Scanのルールの中に、高度なSQLインジェクションというルールが追加されます。

<img width="862" alt="スクリーンショット 2020-05-08 23.19.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343282/02ff034e-bb50-7de2-1faa-e2d683dd7501.png">

Active Scanの前に追加しておきましょう。

### Fuzzer, combined with the FuzzDb and SVN Digger files
FuzzDbとSVN Digger filesは、Fuzzerで使うことができるpayloadのリストファイルです。デフォルトではインストールされていませんので、追加しましょう。

追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照ください。

Fuzzer（ファジング）とは、無効なデータや予期しないデータを大量にターゲットに送信する手法です。ZAPでの使い方は、[Fuzzer](https://qiita.com/koujimatsuda11/private/46f77f3fa5ab3e646312)を参照してください。

injection関連のpayloadは下記ぐらいかと思います。使い方でも記載しましたが、一度に全て実行すると結果が見づらくなりますし、そもそも結果が見辛いので、Active ScanやPassive Scanでアラートが検出された箇所を対象にすると良いと思います。

- fuzzdb
    - attack
        - ldap
        - no-sql-injection
        - os-cmd-execution
        - sql-injection
        - xml
        - xpath

## A2 Broken Authentication
認証の不備です。認証やセッション管理に関する不適切に実装により攻撃者に、パスワード、鍵、セッショントークンを盗難され、一時的または永続的にユーザの認証情報を取得されます。

認証に関連した攻撃を防ぐためには、ユーザ認証、セッション管理の設計・実装を確認することが重要です。アプリケーションが下記の条件を満たす場合、認証の設計・実装に不備があるかもしれません。

下記は、[OWASP Top 10のドキュメント](https://owasp.org/www-pdf-archive/OWASP_Top_10-2017(ja).pdf)より抜粋した「脆弱性発見のポイント」です。

1. 有効なユーザ名とパスワードのリストを持つ攻撃者によるアカウントリスト攻撃のような自動化された攻撃が成功する。
2. 総当たり攻撃や、その他の自動化された攻撃が成功する。
3. "Password1"や"admin/admin"のような初期設定と同じパスワード、強度の弱いパスワード、よく使われるパスワードを登録できる。
4. 安全に実装できない"秘密の質問"のように、脆弱または効果的でないパスワード復旧手順やパスワードリマインダを実装している。
5. 平文のパスワード、暗号化したパスワード、または脆弱なハッシュ関数でハッシュ化したパスワードを保存している
6. 多要素認証を実装していない、または効果的な多要素認証を実装していない。
7. URLからセッションIDが露出している(例: URL書き換え)。
8. ログインに成功した後でセッションIDが変更されない。
9. セッションIDが適切に無効にならない。ログアウトまたは一定時間操作がないとき、ユーザのセッションや認証トークン(特に、シングルサインオン(SSO)トークン)が適切に無効にならない。

多くがZAPで検出するのは難しい内容です。手動でご自身で見つけるしか方法がないです。また、3の項目は、FuzzDbによくあるパスワードのリストが存在するので、テストに使ってもいいかもしれません。

| 自動/手動 | 項目 |
|:--|:--|
| 手動 | HTTP Sessions |
| 手動 | Spider |
| 手動 | Forced Browse |
| 手動 | Token Generator |
| 自動 | Access Control Testing |

### HTTP Sessions
このツールは、すべてのリクエストを特定のセッションに強制できるようにします。サイトのユーザーセッションを簡単に切り替えて、既存のセッションを「破壊」することなく新しいセッションを作成できます。

使い方は、[HTTP Sessions](https://qiita.com/koujimatsuda11/private/13d1118e085b3fce14ba)を参照ください。

### spider
スパイダーは、サイトをクロールして自動的に新しいリソース発見するためのツールです。シードと呼ばれる、アクセスするURLのリストから始まります。A2での使い方は、認証が必要なページが、認証なしで探索されないかなどを確認します。

使い方は、[spider](https://qiita.com/koujimatsuda11/private/39a8caa48b490c1fad11)を参照ください。

また、spiderは、contextメニューで設定したユーザを指定して探索することができます。逆に指定せずにまた、先のHTTP Sessionsにて、セッションを固定していない場合、未認証で探索することになりますので、その時に認証が必要なページを探索していないかチェックすることができそうです。

### Forced Browse
フォースブラウズは、隠されたディレクトリとファイルを検出するスキャンです。多数のファイル名とディレクトリ名を含む一連のファイルが提供されます。ZAPは、選択されたファイルにリストされているすべてのファイルとディレクトリに、直接アクセスしようとします。

使い方は、[Forced Browse](https://qiita.com/koujimatsuda11/private/c1e0b235c402e9a4df1b)を参照ください。

### Token Generation
Token Generationはデフォルトではインストールされていないアドオンです。このアドオンを使用すると、セッション処理やCSRF保護に使用されるトークンなどの疑似ランダムトークンを生成および分析できます。

追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照ください。

使い方は、[Token Generation](https://qiita.com/koujimatsuda11/private/84292358842319748859)を参照ください。

セッショントークンは、ランダム性が重要になります。ランダムに発行されていない場合は、推測されセッションの盗難につながります。なので、そのランダム性をテストします。

### Access Control Testing
Access Control Testingはデフォルトでインストールされていないアドオンです。ユーザごとに利用できるWebアプリケーションをテストし、潜在的なアクセス制御の問題を特定できます。アクセスルールを設定し、不正なユーザがアクセスできるWebアプリケーションを特定するための完全な攻撃が行われます。

追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照ください。

使い方は、[Access Control Testing](https://qiita.com/koujimatsuda11/private/1509cd8e92a733de2d48)を参照してください

どちらかと言うとA5をチェックするためのテストに近いです。

## A3 Sensitive Data Exposure
日本語に訳すと、機微な情報の露出です。機微な情報が見える必要のない人に見えていないことを確認します。

このA3をテストするためには、Webアプリケーションの扱うデータが機微な情報かどうかの見極めが必要です。例えば、パスワード、クレジットカード番号、健康記録、個人データやビジネス上の機密は特に保護する必要があります。また、データがプライバシー関連の法律や、PCI DSSなど金融の情報保護の要求があるような規定がある場合には、特に注意が必要です。

下記は、[OWASP Top 10のドキュメント](https://owasp.org/www-pdf-archive/OWASP_Top_10-2017(ja).pdf)より抜粋した「脆弱性発見のポイント」です。
データについて、以下を確認してください

1. どんなデータであれ平文で送信していないか。これは、HTTP、SMTP、FTPのようなプロトコルを使っている場合に該当する。内部からインターネットに送信する場合、特に危険である。また、ロードバランサ、ウェブサーバ、バックエンドシステムなどの内部の通信もすべて確認する。
2. バックアップも含め、機密データを平文で保存していないか。
3. 古いまたは弱い暗号アルゴリズムを初期設定のまま、または古いコードで使っていないか。
4. 初期値のままの暗号鍵の使用、弱い暗号鍵を生成または再利用、適切な暗号鍵管理または鍵のローテーションをしていない、これらの該当する箇所はないか。
5. ユーザエージェント（ブラウザ）のセキュリティに関するディレクティブやヘッダーが欠落しているなど、暗号化が強制されていない箇所はないか。
6. アプリ、メールクライアントなどのユーザエージェントが受信したサーバ証明書が正当なものか検証していない箇所はないか。

ZAPでテストできるのは、1、5またはSSL通信での3、4ぐらいです。それ以外は、手動でテストするしかありません。

| 自動/手動 | 項目 |
|:--|:--|
| 自動 | Active Scan Rules (Release, Beta, and Alpha) |
| 自動 | Passive Scan Rules (Release, Beta, and Alpha) |

上記に加えて、後述するHTTPS Infoも関連します。

### Active Scan Rules (Release, Beta, and Alpha)
BetaとAlphaのルールはデフォルトではインストールされていないので、追加する必要があります。
追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照ください。

### Passive Scan Rules (Release, Beta, and Alpha)
Relaseは、デフォルトでインストールされているルールですが、BetaとAlphaは別途インストールする必要があります。インストールすると自動でスキャンルールが追加されます。

追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照ください。

なお、追加されたスキャンルールの設定は、オプションの静的スキャンルールから設定できます。
各テスト名のしきい値の「中」をクリックすると、選択できます。
オフ：ルールは無視されます
低：アラートのしきい値が下がるので、誤検知の数が増える可能性があります。
高：アラートのしきい値が上がるので、見逃す可能性が増えます。
<img width="862" alt="スクリーンショット 2020-05-05 22.17.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343282/786f71a4-9f1d-8d44-6a72-f5e123d20bfd.png">

デフォルトのままでいいと思いますが、誤検知が多い場合などに調整してみてください。

## A4 XML External Entities (XXE)
XXEは、XMLデータを外部から受け取り解析する際に生じる脆弱性です。XML文書内の外部エンティティ参照により発生します。外部エンティティは、ファイルURIハンドラ、内部ファイル共有、内部ポートスキャン、リモートコード実行、DoS（サービス拒否）攻撃により、内部ファイルを漏えいさせます。

下記は、[OWASP Top 10のドキュメント](https://owasp.org/www-pdf-archive/OWASP_Top_10-2017(ja).pdf)より抜粋した「脆弱性発見のポイント」です。
アプリケーション、下記の条件を満たす場合、脆弱である可能性があります。

1. アプリケーションが、特に信頼できないソースからの直接またはアップロードによるXMLドキュメントを受け入れる。または、アプリケーションが信頼できないデータをXMLドキュメントに挿入し、XMLプロセッサによって解析される。
2. アプリケーションまたはSOAPベースのWebサービスのXMLプロセッサにおいて、ドキュメントタイプ定義（DTD）が有効になっている。なお、DTD処理を無効にする実際のメカニズムはXMLプロセッサによって異なるため、OWASP CheatSheet 'XXE Prevention'などの資料を参考にすると良い。
3. アプリケーションが統合されたセキュリティあるいはシングルサインオン（SSO）の目的でIDの処理にSAMLを使用する。SAMLはIDアサーションにXMLを使用しているため、脆弱である可能性がある。
4. アプリケーションがバージョン1.2より前のSOAPを使用する。XMLエンティティがSOAPフレームワークに渡されていると、XXE攻撃の影響を受けやすくなる。
5. XXE攻撃に対して脆弱であるということは、アプリケーションがBillion Laughs攻撃(XML爆弾を使う攻撃)のようなDoS攻撃に脆弱であるということと、ほぼ同義である。

| 自動/手動 | 項目 |
|:--|:--|
| 自動 | Active Scan Rules (Release, Beta, and Alpha) |

### Active Scan Rules (Release, Beta, and Alpha)
BetaとAlphaのルールはデフォルトではインストールされていないので、追加する必要があります。
追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照ください。

## A5 Broken Access Control
アクセス制御です。認可の制御の不備ですね。例えば、権限がある場合のみ表示できる画面、ファイル、データに関する表示制御ができていない状態です。攻撃者は、この脆弱性を悪用して、他のユーザのアカウントへのアクセス、機密ファイルの表示、他のユーザのデータの変更、アクセス権の変更など、権限のない機能やデータにアクセスします。

下記は、[OWASP Top 10のドキュメント](https://owasp.org/www-pdf-archive/OWASP_Top_10-2017(ja).pdf)より抜粋した「脆弱性発見のポイント」です。
この脆弱性は、以下のような場合に発生します。

1. アクセス制御のチェックを迂回して、隠れたリソースにアクセスできてしまう。
2. 主キー（購入履歴のIDなど）を他のユーザのレコードに変更することができ、他のユーザのアカウントを表示または編集できてしまう。
3. 権限昇格。ログインすることなしにユーザとして行動したり、一般ユーザとしてログインした時に管理者として行動できてしまう。
4. メタデータの操作。JSON Web Token（JWT）アクセス制御トークンや権限昇格するために操作されるCookieやhiddenフィールドを再生成または改ざんできたり、AJWTの無効化を悪用できるなど。
5. CORSの誤設定によって権限のないAPIアクセスが許可されてしまう。
6. 認証されていないユーザを要認証ページへ、一般ユーザを要権限ページへ強制ブラウズできてしまう。 POST、PUT、DELETEメソッドへのアクセス制御がないAPIへアクセスができてしまう。

1,2,3,6など、SpiderやAjax Spider、Access Control Testingなどを駆使してテストすることができます。

| 自動/手動 | 項目 |
|:--|:--|
| 手動 | Spider |
| 手動 | Ajax Spider |
| 手動 | Session comparison |
| 手動 | Access Control Testing |
| 手動 | HttpsInfo |

※ZAPのドキュメントでは、A6の方に記載されている内容ですが、A5の内容となっていると思われるのでA5に記載します。

### spider
A5ではspiderは不必要なコンテンツが公開されていないか探索するために使います。また、ユーザを指定することにより、そのユーザがアクセスできないコンテンツを探索されないかも同時に確認できます。

使い方は、[spider](https://qiita.com/koujimatsuda11/private/39a8caa48b490c1fad11)を参照ください。

### Ajax Spider
spiderと同様にサイトをクロールするアドオンです。spiderとの違いは、spiderは単純にリンクをたどりますが、Ajax Spiderはブラウザを起動した上で探索を行います。AJAXアプリケーションの場合は、spiderより多くのリクエストを検知できますが、探索スピードが遅いというデメリットがありますので。注意して使いましょう。

使い方は、[Ajax Spider](https://qiita.com/koujimatsuda11/private/ea971355e763e246960b)を参照してください

spider同様、ユーザを指定することにより、そのユーザがアクセスできないコンテンツを探索されないかも同時に確認できます。

### Session comparison
ZAPで保存したセッション（ZAPのデータのことです）を過去のセッションと比較することができます。主に保存されたURLの比較ができます。使い方としては、あるユーザでアクセスできるURLと別のユーザでアクセスできるURLを比較するために利用できるようです。

使い方は、[Session comparison](https://qiita.com/koujimatsuda11/private/a82127754a322ccea3f1)を参照してください

### Access Control Testing
A2にも出てきたアドオンです。基本的な使い方は同じなので割愛します。むしろ、このアドオンはA5の検知がメインだと思います。

使い方は、[Access Control Testing](https://qiita.com/koujimatsuda11/private/1509cd8e92a733de2d48)を参照してください

### HttpsInfo
デフォルトでインストールされていないアドオンです。このアドオンには、ターゲットサーバーのHTTPS証明書と提供されるSSL / TLS暗号スイートに関するさまざまな概要情報が表示されます。

使い方は、[HttpsInfo](https://qiita.com/koujimatsuda11/private/e178aa73824b640f8260)を参照してください

## A6 Security Misconfiguration
不適切なセキュリティ設定です。apacheやPHP、MySQL、アプリケーションフレームワーク、AWSなどのインフラなどの設定が安全でない場合に該当します。また、不適切な設定のHTTPヘッダ、機微な情報を含む冗長なエラーメッセージになどでも該当します。

下記は、[OWASP Top 10のドキュメント](https://owasp.org/www-pdf-archive/OWASP_Top_10-2017(ja).pdf)より抜粋した「脆弱性発見のポイント」です。

1. アプリケーションスタックのいずれかの部分におけるセキュリティ堅牢化の不足、あるいはクラウドサービスでパーミッションが不適切に設定されている。
2. 必要のない機能が有効、あるいはインストールされている(例えば、必要のないポートやサービス、ページ、アカウント、特権)。
3. デフォルトのアカウントとパスワードが有効になったまま変更されていない。
4. エラー処理がユーザに対して、スタックトレースやその他余計な情報を含むエラーメッセージを見せる。
5. アップグレードしたシステムでは、最新のセキュリティ機能が無効になっているか正しく設定されていない。
6. アプリケーションサーバやアプリケーションフレームワーク(例えば、Struts、Spring、 ASP.NET)、ライブラリ、データベース等のセキュリティの設定が、安全な値に設定されていない。
7. サーバがセキュリテイヘッダーやディレクティブを送らなかったり、安全な値に設定されていなかったりする。
8. ソフトウェアが古いか脆弱である (A9:2017-既知の脆弱性のあるコンポーネントの使用を参照)。

2,4,7,8などがZAPでテストできそうです。

| 自動/手動 | 項目 |
|:--|:--|
| 自動 | Active Scan Rules (Release, Beta, and Alpha) |
| 自動 | Passive Scan Rules (Release, Beta, and Alpha) |
| 自動 | Access Control Testing |
| 手動 | HttpsInfo |
| 手動 | Port Scanner |
| 手動 | Wappalyzer - Technology detection |

※ZAPのドキュメントでは、A5の方に記載されている内容ですが、A6の内容となっていると思われるのでA5に記載します。

### Active Scan Rules (Release, Beta, and Alpha)
A6では、サーバ・セキュリティ、一般、情報収集といったルールが対象になります。BetaとAlphaも入れておくといいと思います。

追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照ください。

### Passive Scan Rules (Release, Beta, and Alpha)
セキュリテイヘッダーの不備などを検出します。またアプリケーションエラーの開示やソースコードの開示など、Passive Scanで検出することが多い項目です。BetaとAlphaを入れておくといいと思います。

追加手順は、[add-onを追加する](https://qiita.com/koujimatsuda11/private/41bf1383e5cb50405052)を参照ください。

### Access Control Testing
A2にも出てきたアドオンです。基本的な使い方は同じなので割愛します。むしろ、このアドオンはA5の検知がメインだと思います。

使い方は、[Access Control Testing](https://qiita.com/koujimatsuda11/private/1509cd8e92a733de2d48)を参照してください

### HttpsInfo
デフォルトでインストールされていないアドオンです。このアドオンには、ターゲットサーバーのHTTPS証明書と提供されるSSL / TLS暗号スイートに関するさまざまな概要情報が表示されます。設定に不備がないかを確認します。

使い方は、[HttpsInfo](https://qiita.com/koujimatsuda11/private/e178aa73824b640f8260)を参照してください

### Port Scanner
デフォルトでインストールされていないアドオンです。このアドオンは、ターゲットサイトで開いているポートを示す基本的なポートスキャナです。

使い方は、[Port Scanner](https://qiita.com/koujimatsuda11/private/cd41720ee439b83673b0)を参照してください

必要のないポートが空いていないかを確認します。

### Wappalyzer - Technology detection
デフォルトでインストールされていないアドオンです。Webアプリケーションで使用されている技術要素を検出します。例外をのぞき、ブラウザの拡張機能とほぼ同じ動作をします。

使い方は、[Wappalyzer](https://qiita.com/koujimatsuda11/private/4b4d912dfa84ac66059c)を参照してください

Wappalyzerは、ブラウザのアドオンにもありますが、技術要素とバージョンまで検出できます。使っているフレームワークやミドルウェアのバージョンを確認し、脆弱性がないかを確認します。

## A7 Cross-Site Scripting (XSS)
XSSにより攻撃者は、被害者のブラウザでスクリプトを実行してユーザーセッションを乗っ取ったり、Webサイトを改ざんしたり、悪意のあるサイトにユーザーをリダイレクトします。

XSSには3種類のタイプが存在します

- 反射型　: ユーザ入力データを適切に検証およびエスケープせずに、HTML出力の一部として含めている場合に発生します。反射型の特徴は、ユーザ入力データを次のページで表示していることです。攻撃が成功すると、攻撃者は被害者のブラウザで任意のHTMLやJavaScriptを実行できます。
- 持続型（蓄積型）　: ユーザ入力データなどを無害化せずにDB格納し、別のページで、閲覧する場合に発生します。反射型と違い、ユーザ入力とは別のページで発生するため発見が難しいです。
- DOMベース: 反射型や持続型と違いサーバサイドでの出力時には問題なく、ブラウザ上でJavascriptが動作している時に発生します。攻撃者の制御可能なデータをJavascriptが取り込んでページに出力することにより、DOMベースXSS脆弱性となります。

典型的なXSS攻撃には、セッションの奪取、アカウントの乗っ取り、多要素認証(MFA)の回避、DOMノードの置換または改竄(トロイの木馬を介した偽のログイン画面挿入等)、悪質なソフトウェアのダウンロードやキーロギング等のユーザのブラウザに対する攻撃などが含まれます。

| 自動/手動 | 項目 |
|:--|:--|
| 自動 | Active Scan Rules (Release |
| 手動 | Fuzzer, combined with the FuzzDb files |
| 手動 | Plug-n-Hack |

### Active Scan Rules (Release
Releaseバージョンにクロスサイトスクリプティングのルールが存在しますので、そちらでチェックすることになります。
ただし、DOMベースは、Active Scanルールには、ありませんでした。

### Fuzzer, combined with the FuzzDb files
FuzzDbにもXSSが含まれておりますので、Active Scanで見つかった場合などに合わせて実行するといいと思います。

### Plug-n-Hack
Plug-n-Hackは、[Mozillaセキュリティチームから提案された標準](https://developer.mozilla.org/en-US/docs/Plug-n-Hack)であり、ZAPとFireFoxが連携するためのアドオンです。ただし、すでに"Archive of obsolete content"扱いなので、これを新規で使うことはなさそうです。

# A8 Insecure Deserialization
安全でないデシリアライゼーションです。この脆弱性が存在した場合、攻撃者より悪意を持ったまたは、改ざんされたオブジェクトをデシリアライズすることにより、アプリケーションロジックの変更または、任意のリモートコード実行をされる恐れがあります。

防止するために、シリアライズされたオブジェクトを信頼できないデータ供給元から受け入れないにする必要があります。なお、この問題は発見は困難です。ZAPのドキュメントでもGit hubのissueへのリンクになってます。

| 自動/手動 | 項目 |
|:--|:--|
| Automated | There are two outstanding issues that are relevant to this Top 10 entry: [Insecure deserialization active scanner](https://github.com/zaproxy/zaproxy/issues/4112) & [Java Serialization Handling](https://github.com/zaproxy/zaproxy/issues/4509) |

## A9 Using Components with Known Vulnerabilities
既知の脆弱性のあるコンポーネントの使用です。依存関係を含めて使用しているコンポーネントのバージョンを知らない場合や使っているバージョンに脆弱性が含まれる場合などの場合が該当します。また定期的に使用しているコンポーネントのセキュリティ情報をチェックし、タイムリーに修正またはアップグレードしていない場合に該当します。

| 自動/手動 | 項目 |
|:--|:--|
| Automated | Passive Scan Rules (Alpha) and Retire |
| Manual | Wappalyzer - Technology detection |

### Passive Scan Rules (Alpha) and Retire
Passive ScanのAlphaバージョンのルールであるIn Page Banner Information LeakやInsecure Componentなどが、A9の検知を手助けします。

また、[Retire.js](https://retirejs.github.io/retire.js/)（以前は、ZAPのアドオンにあった模様）で、Javascriptのフレームワークの脆弱性を検知できます。これは、Chromeのextensionなどで利用できます。

### Wappalyzer - Technology detection
同じくChromeのextensionでも使えるWappalyzerです。使っている技術要素とバージョンを教えてくれるので、そのバージョンに脆弱性があるか別途調べます。

使い方は、[Wappalyzer](https://qiita.com/koujimatsuda11/private/4b4d912dfa84ac66059c)を参照してください

## A10 Insufficient Logging & Monitoring
不十分なロギングとモニタリングです。これはZAPでテストするのは、不可能です。ブラックボックステストでは検出できません。ZAPのSpide、Active Scanner、Fuzzer、Access Control などで攻撃を行い、正しくログに書かれているかを確認するといった方法が取れます。

| 自動/手動 | 項目 |
|:--|:--|
| Automated / Manual | The Spider(s), Active Scanner, Fuzzer, and Access Control addon can all be used to generate traffic and “attacks” which are potential sources/causes for logging and alerting. |

# まとめ
ZAPを使ってOWASP Top 10の全てを検証することはできません。手動や他のツールも駆使しながら、検証してください。
また、ZAPは公式のマニュアルが非常にわかりづらいですが、使い方は難しくありません。開発者（私も開発者ですし）の方でも積極的に使えると思います。DevOps時代の強力なセキュリティ検証ツールだと思います。

# 参考
https://www.zaproxy.org/
https://www.zaproxy.org/docs/
https://www.zaproxy.org/docs/guides/zapping-the-top-10/
https://owasp.org/www-pdf-archive/OWASP_Top_10-2017(ja).pdf
https://www.pupha.net/archives/1487/
https://www.pupha.net/archives/1370/