OwaspZapで自動認証しているのにサインアウトしてしまう

# はじめに

OwaspZapを初めて使い、色々検証しながら使い方を学んでいます。
しかし、思った通りにいかないことが多い印象です。

今回もうまくいかないことがあったためまとめたいと思います。
また、結論から述べますと根本的解決には至っておらず別の方法を利用して解決しています。

# 問題

以下のサイトを参考に自動認証の設定をしました。

[†OWASP ZAP入門-設定から診断まで-†](https://qiita.com/aikasu/items/6bfd33967448136b93bc)
[OWASP ZAP 2.3 自動認証機能の設定](https://www.pupha.net/archives/2046/)

行った設定は主に以下となります。

1. コンテキストにURLを含める (先頭に\Q末尾に\Eを追加して.*を消す)

![1629337147.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/b6d3e338-0da7-6311-393d-aae341f52db1.png)



2. 認証をForm-based Authenticationに変更
3. Login Form Target URLにログインページのURLを載せる
4. URL to GET Login Pageに3と同じURLを設定
5. Login Request POST DataにPostするパラメーターを設定 (2要素まで)
6. Username ParameterにPostする要素を設定
7. ログイン状態をOwaspに理解させるため、Regexを設定します。

5.6に関しては
user[login]=login & user[password]=passwordとしたとき、user[login]に渡すパラメータとしてloginをこの後設定することを意味しています。また、Username Parameterはuser[login]を設定しておくことでユーザーを作成したときに設定した値をloginに代入することができます。
3要素以上は別の方法をする必要があります。

7に関して
Logged in indicatorに文字列を指定し、その文字列がレスポンスに含まれない場合、再認証
Logged out indicatorに文字列を指定し、その文字列がレスポンスに含まれる場合、再認証
となっています。

![1629339800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/9b0e9df3-0930-5367-a661-567d26533f54.png)



8. ユーザーから追加を押して新規ユーザーを設定します。(ログインとパスワードを入れる)

![1629337701.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/94131dbe-0fee-36ba-60ac-fc2b1f842e16.png)


9. 再認証をオンにする (ツールバーの南京錠マークをクリック)

そのあと動的スキャンを行います。動的スキャンするのはログイン後のページです。ユーザーは先ほど作成したユーザーにします。
スキャンするページは認証しないでアクセスするとサインページにリダイレクトされるように設定してあります。

ここで動的スキャンをすると、302が返ってきてログインページにリダイレクトされていることが、レスポンスのBodyの内容からわかります。

```
<html><body>You are being<a href="http://localhost:3000/users/sign_in>redirected</a>.</body></html>
```

自動認証ができていれば`200`が返ってくるはずです。

# 原因

おそらくですが、`アンチCSRFトークン`が原因となっています。

[OWASP ZAP2.9.0で脆弱性診断をする - アンチCSRFトークンを設定する](https://qiita.com/koujimatsuda11/items/3209715774b73f81e85f)

# 解決方法

今回は自動認証を用いないで、手動の認証をしたあとそのセッションを利用する`Manual Explore`を利用しました。
アンチCSRFトークンの設定や有効もしましたができませんでした。。代替え手段で対応します。

この方法は、OwaspZapで起動したFireFoxで直接サイトにログインすることで認証せずに動的スキャンできるというものです。

リクエスト・レスポンスの横にある緑＋マークを押してクイックスタートを押します。

![1629339183.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/d7f5d6d8-b7e4-02f1-9613-5ce125a7a824.png)


Manual Exploreをクリックします。

![1629339205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/f139985e-ec6c-1b64-7f43-cb426d10fe62.png)


Lanch Brawserをクリックします (FireFoxのところをChromeに変えることもできます)

![1629339222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/93e22283-848f-4264-cf88-37110106dea4.png)


そのあと、ブラウザが開くのでログインをした後に、スキャンしたいページすべてにアクセスします。

![1629339244.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/8660c6ef-b4a6-e5ba-d74b-2bf2f82c816b.png)


ポイントは、アクセスしたページにしかセッションが残らないため、200にならないということです。
また、OwsapZapでなく、PCにインストールされたFireFoxでアクセスしても動的スキャンのマニュアル認証でセッションを利用できません。OwaspZapのManual Exploreからアクセスします。

そのあと、認証がマニュアル認証になっていることを確認して、動的スキャンを行います。

これで`200`となるはずです。

# おわりに
OwaspZapは設定方法はかなり記事がありますが、そこから先の内容の記事がほぼないように思います。
また、スキャンをしましたが本当に正しくできているかわからんくなることもしばしばあります。
しっかり自信をもって使える人はもしかしたら少ないのかも知れません。簡単そうに見えて難しいです。

# 参考
- [†OWASP ZAP入門-設定から診断まで-†](https://qiita.com/aikasu/items/6bfd33967448136b93bc)
- [OWASP ZAP 2.3 自動認証機能の設定](https://www.pupha.net/archives/2046/)
- [OWASP ZAP2.9.0で脆弱性診断をする - アンチCSRFトークンを設定する](https://qiita.com/koujimatsuda11/items/3209715774b73f81e85f)