Jenkins で OWASP ZAP ジョブの作り方

# Jenkins で OWASP ZAP ジョブの作り方
## はじめに
いささか遅すぎるようにも思うけれど、CIにOWASP ZAPを使用してWebセキュリティ対策を従前に行なえるようジョブの作成をしようと始めたところ思いの外ハマったので備忘も兼ねて投稿します。

## jenkins

### jenkins Dockerfile サンプル

ロケール、タイムゾーンを日本向けに変更しています。

```Dockerfile
FROM debian:stretch

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get upgrade -y  && apt-get install -y gnupg gnupg2 wget curl locales \
    && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8

RUN rm /etc/localtime && sh -c 'echo Asia/Tokyo' > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata

ENV LANG ja_JP.utf8

RUN wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | apt-key add - && \
sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

RUN apt-get update && apt-get install -y openjdk-8-jdk git jenkins systemd

EXPOSE 8080

ENTRYPOINT service jenkins start && sleep 5 && \
tail -f /var/log/jenkins/jenkins.log
```

### 使用する jenkins plugin

* Official OWASP ZAP Jenkins Plugin
* HTML Publisher Plugin
* Custom Tools Plugin

以上のプラグインを追加してください。

### ZAPジョブ作成

#### Custom Tool を追加する

「jenkinsの管理」ー「Global Tool Configuration」
![スクリーンショット 2019-06-11 17.31.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/87dbcedc-89dc-9739-1ab1-0dcfb38406f5.png)

![スクリーンショット 2019-06-11 17.35.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/07dff338-9a1a-d5ca-ad6c-3a986bfa6ef6.png)

注意： ラベルは入力するとエラーになってしまうので入力しない

#### 新規ジョブ作成

新規ジョブ作成をクリック
![スクリーンショット 2019-06-11 17.22.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/0866896b-88f6-5bf0-a9ed-debb1b9459f2.png)


アイテム名を入力＆「フリースタイル・プロジェクトのビルド」を選択してOK
![スクリーンショット 2019-06-11 17.21.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/64b51051-67ca-f547-4421-897670b6dedd.png)

#### ビルド環境： Install custom tools
チェックを入れて、「Add tool」をクリック
![スクリーンショット 2019-06-11 17.26.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/2432f64d-033b-306d-b6e4-98a2b43b46e1.png)

Tool selection に設定したCustom Toolを選択する
![スクリーンショット 2019-06-11 16.30.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/2757bd08-aaec-0bd4-7995-02b135941426.png)

#### ビルド手順の追加

Execute ZAP を選択
![スクリーンショット 2019-06-11 17.39.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/1f9db6b3-a9fc-ab64-c1ed-6ccb8ec3ae66.png)

Override Host , Override Port を入力する（デフォルトはシステムの設定）
![スクリーンショット 2019-06-11 16.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/cfe01ca8-4fad-8cec-9a89-6a8c24dbe859.png)
ZAP Home Directory に /tmp/ZAP
Session Management は Persist Session を選択、 Filename に "session"
![スクリーンショット 2019-06-11 17.44.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/f228f28f-1230-3c05-4313-b1bb9de2e2be.png)

![スクリーンショット 2019-06-11 17.48.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/2e523dbd-da5c-93b5-882f-0ae38ceb7db0.png)
Starting Point に検査対象のURLを入力
![スクリーンショット 2019-06-11 17.48.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/4fc44f8c-f2cd-9cae-c63d-ad124384ede4.png)
Finalize Run で Generate Reports を選択
Filename に **JENKINS_ZAP_VULNERABILITY_REPORT_${BUILD_ID}.html**
![スクリーンショット 2019-06-11 16.31.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/890eded0-8be3-ded1-d28e-f95460df9f8b.png)

#### ビルド後の処理の追加

成果物を保存 と Publish HTML reports を追加
![スクリーンショット 2019-06-11 17.51.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/1d16433d-9221-c736-e165-f0dbf14332f4.png)

![スクリーンショット 2019-06-11 16.44.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/9a779ddf-2d05-8f3b-ace5-35476a9cce2c.png)

以上で保存して終了です

### ジョブ実行

実行すると以下のようになるはずです。
![スクリーンショット 2019-06-11 18.10.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112497/e3f5aaf8-07b3-ba01-1b52-c6fd321ae4b5.png)

あとは結果を見て必要な対策をしていくことになります。

## 参考にしたサイト・記事

https://www.we45.com/blog/how-to-integrate-zap-into-jenkins-ci-pipeline-we45-blog