GitLab Security Essentials - ハンズオンラボ: DAST と API スキャン
推定所要時間: 40 分
目標
多くのプロジェクトは、API コンポーネントを持つ Web アプリケーションとしてデプロイされています。これらのコンポーネントをスキャンするために、DAST と API セキュリティスキャナーを活用できます。
このラボでは、プロジェクトに両方のスキャナーを実装する方法を学びます。
タスク A. DAST スキャンのセットアップ
DAST スキャンをテストするために、OWASP Juice Shop という脆弱な Web アプリケーションのインスタンスをセットアップします。このアプリケーションをスキャンすることで、期待できる DAST スキャン結果の全範囲を確認できます。
新しいブランクプロジェクトを作成します。プロジェクト名を
DASTとします。DAST プロジェクトに
.gitlab-ci.ymlファイルを作成します。まず、設定に DAST ステージを追加します:
stages: - dastDAST は現在 CI/CD テンプレートを使用しています。ステージの下に以下を追加します。
include: - template: DAST.gitlab-ci.yml専用のサーバーがないため、Juice Box アプリケーションを Docker サービスとして DAST に渡すことにします。これを行うために、テンプレートのインクルードの下にサービスを定義します:
dast: services: - name: bkimminich/juice-shop:v16.0.0 alias: juiceshopDAST スキャナーには様々な変数を提供できます。DAST スキャナーに以下の値を追加します:
variables: DAST_TARGET_URL: "http://juiceshop:3000/" DAST_AUTH_URL: "http://juiceshop:3000/#/login" DAST_FULL_SCAN: "false" DAST_AUTH_USERNAME: "[email protected]" DAST_AUTH_PASSWORD: "admin123" # use protected/masked variables, this is only for demonstration purposes DAST_AUTH_USERNAME_FIELD: "css:input[id=email]" DAST_AUTH_PASSWORD_FIELD: "css:input[id=password]" DAST_AUTH_SUBMIT_FIELD: "css:button[id=loginButton]" DAST_SCOPE_EXCLUDE_ELEMENTS: "css:[id=navbarLogoutButton]" DAST_AUTH_REPORT: "false" DAST_REQUEST_COOKIES: "welcomebanner_status:dismiss,cookieconsent_status:dismiss" DAST_CRAWL_GRAPH: "false"いくつかの変数を説明すると、
DAST_TARGET_URLとDAST_AUTH_URLはスキャンと認証のターゲットを提供します。DAST_AUTH_USERNAMEとDAST_AUTH_PASSWORDで認証のための認証情報を提供します。DAST_AUTH_USERNAME_FIELDと関連するフィールド変数は DAST にログインデータを入力する場所を指示します。残りの設定はこのデモのスキャン時間を短縮するためのスキャン設定です。これらの値をすべて入力すると、yaml ファイルは以下のようになります:
stages: # List of stages for jobs, and their order of execution - dast include: - template: DAST.gitlab-ci.yml dast: services: - name: bkimminich/juice-shop:v16.0.0 alias: juiceshop variables: DAST_TARGET_URL: "http://juiceshop:3000/" DAST_AUTH_URL: "http://juiceshop:3000/#/login" DAST_FULL_SCAN: "false" DAST_AUTH_USERNAME: "[email protected]" DAST_AUTH_PASSWORD: "admin123" # use protected/masked variables, this is only for demonstration purposes DAST_AUTH_USERNAME_FIELD: "css:input[id=email]" DAST_AUTH_PASSWORD_FIELD: "css:input[id=password]" DAST_AUTH_SUBMIT_FIELD: "css:button[id=loginButton]" DAST_SCOPE_EXCLUDE_ELEMENTS: "css:[id=navbarLogoutButton]" DAST_AUTH_REPORT: "false" DAST_REQUEST_COOKIES: "welcomebanner_status:dismiss,cookieconsent_status:dismiss" DAST_CRAWL_GRAPH: "false"これらの変更をコミットし、DAST スキャンを実行させます。ビルド > パイプライン からジョブの進行状況を監視できます。
注: このジョブは完了まで最大 15 分かかることがあります。
完了したら、左サイドバーで Secure > 脆弱性レポート を選択します。
DAST スキャナーが検出した結果を確認します。
タスク B. API スキャナーのセットアップ
API スキャナーを使用すると、アプリケーションの API エンドポイントの潜在的な脆弱性をスキャンできます。このプロセスを示すために、API 設定を含むアプリケーションテンプレートを使用します。
Security Labs プロジェクトに移動します。
postman_collection.jsonファイルを確認します。このファイルには、このプロジェクトのアプリケーションに対して API スキャンを実行するために必要な定義が含まれています。ファイルと構造を確認した後、API スキャンの有効化に進むことができます。コード > リポジトリ に移動し、
.gitlab-ci.ymlを編集します。コンテナに API スキャンを追加するには、
dastステージを定義し、API セキュリティテンプレートを追加します。include: #Other scanners would be here as well. - template: API-Security.gitlab-ci.yml stages: - build - test - dastAPI スキャナーのジョブ定義を追加します。
api_security: services: - name: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA alias: target variables: APISEC_POSTMAN_COLLECTION: postman_collection.json APISEC_TARGET_URL: http://target:7777これらの変更をコミットし、パイプラインが完了した後に結果を確認します。
ラボガイド完了
このラボ演習が完了しました。このコースの他のラボガイドを参照できます。
ご提案・改善点
ラボに変更を加えたい場合は、マージリクエストで変更内容を送信してください。
