概要
前回 Gitlab CI のサービスを使って Web アプリを起動しそのアプリにテストする方法を紹介しました
今回は nikto を実行してみます
環境
- Gitlab 18.2.6
- Gitlab Runner 18.2.2
- Python 3.12.11
.gitlab-ci.yml
stages:
- build # ビルドステージ
- test # テストステージ
- pentest # ペネトレーションテストステージ
build:
stage: build
image:
name: moby/buildkit:rootless # BuildKit を使用するための Docker イメージ
entrypoint: [""] # デフォルトのエントリーポイントを無効化
variables:
BUILDKITD_FLAGS: --oci-worker-no-process-sandbox # BuildKit の設定
before_script:
# Docker 認証情報を設定
- mkdir -p ~/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > ~/.docker/config.json
script:
# BuildKit を使用して Docker イメージをビルドし、GitLab Container Registry にプッシュ
- |
buildctl-daemonless.sh build \
--frontend dockerfile.v0 \
--local context=. \
--local dockerfile=. \
--output type=image,name=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA,push=true
app:
stage: test
services:
# ビルドした Docker イメージをサービスとして起動
- name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
alias: testapp # サービスに "testapp" というホスト名を割り当て
script:
# サービスが起動するまで待機
- echo "Waiting for the service to be ready..."
- >
for i in {1..30}; do
curl -s http://testapp:5000 && break || sleep 1; # サービスが応答するまで最大 30 秒間リトライ
done
- echo "Service is ready." # サービスが起動したことを確認
validate:
stage: test
image: curlimages/curl:latest # curl を使用するための軽量イメージ
services:
# ビルドした Docker イメージを再度サービスとして起動
- name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
alias: testapp # サービスに "testapp" というホスト名を割り当て
script:
# サービスに対してレスポンスを検証
- echo "Running validation tests..."
- |
RESPONSE=$(curl -s http://testapp:5000) # サービスにリクエストを送信しレスポンスを取得
if [ "$RESPONSE" = "Hello, World!" ]; then
echo "Validation passed!" # レスポンスが期待通りの場合
else
echo "Validation failed: Expected 'Hello, World!' but got '$RESPONSE'" # レスポンスが期待と異なる場合
exit 1 # ジョブを失敗させる
fi
pentest:
stage: pentest
image:
name: ghcr.io/sullo/nikto:latest
entrypoint: [""]
services:
- name: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
alias: testapp
script:
- echo "Running Nikto penetration test..."
- mkdir -p reports # レポートを保存するディレクトリを作成
- nikto.pl -h http://testapp:5000 -F htm -o reports/report.html
- echo "Nikto scan completed. Report saved to reports/report.html."
artifacts:
paths:
- reports/report.html # レポートをアーティファクトとして保存
expire_in: 1 week # レポートの保存期間を 1 週間に設定
最後に
Gitlab Ultimate に登録していない場合に DAST が使えないので自分で .gitlab-ci.yml にペネトレーションテスト的なことを記載する必要があります
またレポートも自分で保存する必要があるので artifact を使って保存するようにしましょう
0 件のコメント:
コメントを投稿