3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OWASP ZAPのテストをCI/CDに組み込む

Last updated at Posted at 2023-07-28

今回やりたいこと

CI/CD時に、OWASP ZAPという脆弱性診断ツールを利用し、もし警告数などが一定以上の数だったらビルドを失敗させる制御を組み込みたい

そのためにやること

  1. dockerを利用しOWASP ZAPの処理を行うshファイルを作成・追加
  2. CI/CD時に参照される特定のymlファイルに、追加されたshファイルを走らせるように追記

僕の現職では、バックエンド側では、CI/CDにAWSのCodePipeline, CodeBuildを利用しています。

その中に、Docker版のOWASP ZAPという脆弱性診断ツールの導入を検討したいと思っています。

CodeBuildでは、buildspec.ymlといったymlファイルを参照し、問題なければAWS ECRのようなdockerリポジトリにイメージをpushをするようです。

そのbuildspec.ymlの中にOWASP ZAPの検証処理を、記述されたshファイルを呼び出す形で組み込みむ想定です。

実際に追加するコード

※ファイルの配置場所はいずれもプロジェクトのルートディレクトリを想定しています

run_owasp_zap_test.sh
#!/bin/bash

# OWASP ZAPで検証したいエンドポイント
ENDPOINT=https://sample.com

# チェック対象のステータスの許容範囲の最大値
MAX_STATUS_ITEM_NUM=13

# 実際の運用時には`WARN-NEW`ではなく`FAIL-NEW`を想定
STATUS="WARN-NEW"

docker pull owasp/zap2docker-stable

echo "Running OWASP ZAP test..."
echo "チェック対象のステータス: $STATUS"
echo "チェック対象のステータス: $STATUS に該当する項目数が $MAX_STATUS_ITEM_NUM 以下の場合はテスト成功とします。"

# 下の`output=`の方だと詳細が出力されない
docker run -t owasp/zap2docker-stable zap-baseline.py -t $ENDPOINT

# `output`にOWASP ZAPのテスト結果を代入
output=$(docker run -t owasp/zap2docker-stable zap-baseline.py -t $ENDPOINT)

# $STATUSの文字列数
STATUS_ITEM_NUM=$(echo "$output" | grep -c $STATUS)

# `STATUS_ITEM_NUM`と`MAX_STATUS_ITEM_NUM`それぞれの数を比較
if [ $STATUS_ITEM_NUM -gt $MAX_STATUS_ITEM_NUM ]; then
    echo "test failed: $STATUS の結果が一定数を超えました: $STATUS_ITEM_NUM 項目"
    echo "処理を終了します"
    exit 1
else
    echo "test passed: $STATUS の結果が許容範囲内でした: $STATUS_ITEM_NUM 項目"
fi

echo "OWASP ZAPのスキャンが正常に完了しました。"
exit 0
buildspec.yml
version: 0.2

# 不要な箇所は省略しています
phases:
    pre_build:
        commands:
            - ~
    build:
        commands:
            - ~
    post_build:
        commands:
            - ~

            # Run OWASP ZAP test
            - ./run_owasp_zap_test.sh

ymlファイル上の特定のphasecommandsの箇所でファイルのパスを指定するだけで、そのshスクリプトが動いてくれるようです。

参考

Docker版OWASP ZAPを使用してWebアプリの簡易的な脆弱性診断をしてみた

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?