DASTプロキシベースアナライザ

DASTプロキシベースアナライザは、GitLab CI/CDパイプラインに追加することができます。これはJavaScriptを多用しないウェブアプリケーションの脆弱性を発見するのに役立ちます。JavaScriptを多用するアプリケーションについては、DASTブラウザベースアナライザを参照してください。

caution
本番サーバーに対してDASTスキャンを実行しないでください。ボタンのクリックやフォームの送信など、ユーザーが実行できるあらゆる機能を実行できるだけでなく、バグを誘発し、本番データの変更や損失につながる可能性があります。テストサーバに対してのみ DAST スキャンを実行してください。

アナライザは、OWASP Zed Attack Proxy (ZAP) を使用して、2つの異なる方法でスキャンします:

  • 受動的スキャンのみ(デフォルト)。DAST はZAP のベースライン・スキャンを実行し、アプリケーションを積極的に攻撃しません。
  • パッシブスキャンとアクティブスキャン(またはフルスキャン)。DASTはアクティブスキャンも実行してアプリケーションを攻撃し、より広範なセキュリティレポートを作成するように設定できます。レビューアプリと組み合わせると非常に便利です。

テンプレート

  • DAST最新テンプレートはGitLab 13.8で導入されました。
  • 全てのDASTテンプレートはGitLab 14.0でDAST_VERSION: 2に更新されました。
  • GitLab 15.0 ですべての DAST テンプレートが DAST_VERSION: 3 に更新されました。

GitLab DASTの設定はCI/CDテンプレートで定義されています。テンプレートのアップデートはGitLabのアップグレードとともに提供され、改善や追加の恩恵を受けることができます。

利用可能なテンプレート

caution
最新バージョンのテンプレートには、変更点が含まれている可能性があります。最新のテンプレートにのみ提供されている機能が必要な場合を除き、安定版テンプレートを使用してください。

テンプレートのバージョン管理について詳しくは、CI/CDのドキュメントを参照してください。

DASTのバージョン

デフォルトでは、DASTテンプレートはDAST Dockerイメージの最新のメジャーバージョンを使用します。DASTの更新方法は、DAST_VERSION 変数を使って選択できます:

  • メジャーバージョン(1 など)にピン留めすることで、新機能や修正プログラムでDASTを自動的に更新します。
  • マイナーバージョン(1.6 など)にピン留めすることで、修正のみを更新します。
  • 特定のバージョンに固定することで、すべてのアップデートを防止します (1.6.4 など)。

DASTの最新バージョンはDASTリリースページでご確認ください。

DAST実行オプション

DAST を使用してウェブアプリケーションを検査することができます:

  • マージリクエストによって自動的に開始されます。
  • 手動、オンデマンドで開始。

これらの実行オプションの違いをいくつか挙げます:

自動スキャンオンデマンドスキャン
DASTスキャンはマージリクエストによって開始されます。DASTスキャンは、DevOpsライフサイクルの外側で手動で開始されます。
CI/CD 変数は.gitlab-ci.yml から取得します。CI/CD変数はUIで提供されます。
すべてのDAST CI/CD変数が利用可能です。利用可能なDAST CI/CD変数のサブセット。
DAST.gitlab-ci.yml テンプレートを使って DAST-On-Demand-Scan.gitlab-ci.yml テンプレートを使って

自動DAST実行の有効化

DAST の自動実行を有効にするには、次のいずれかを実行します:

.gitlab-ci.yml ファイルを手動で編集します。

この方法では、既存の.gitlab-ci.yml ファイルを手動で編集します。GitLab CI/CD設定ファイルが複雑な場合は、この方法を使用してください。

DASTテンプレートをインクルードするには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. Build > Pipeline editorを選択します。
  3. 以下をコピーし、.gitlab-ci.yml ファイルの下部に貼り付けます。

    DAST安定版テンプレートを使用するには

    include:
      - template: DAST.gitlab-ci.yml
    

    DASTの最新テンプレートを使用するには

    include:
      - template: DAST.latest.gitlab-ci.yml
    
  4. 以下のいずれかの方法で、DASTがスキャンするURLを定義します:

    • DAST_WEBSITE CI/CD 変数を設定します。設定されている場合、この値が優先されます。

    • environment_url.txt プロジェクトのルートにある environment_url.txtファイルにURLを追加します。environment_url.txt これは動的環境でのテストに便利です。GitLab CI/CDパイプラインで動的に作成されたアプリケーションに対してDASTを実行するには、DASTスキャンの前に実行するジョブがアプリケーションのドメインをanファイルに永続化する必要が environment_url.txtあります。DASTは自動的にenvironment_url.txt ファイルを解析してスキャン対象を見つけます。

      例えば、DASTの前に実行するジョブには、以下のようなコードを含めることができます:

       script:
         - echo http://${CI_PROJECT_ID}-${CI_ENVIRONMENT_SLUG}.domain.com > environment_url.txt
       artifacts:
         paths: [environment_url.txt]
         when: always
      

      この例はAuto DevOps CI YAMLファイルで見ることができます。

  5. Validate]タブを選択し、[Validate pipeline]を選択します。Simulation completed successfully」というメッセージは、ファイルが有効であることを示しています。
  6. Edit(編集)タブを選択します。
  7. オプション。コミット・メッセージで、コミット・メッセージをカスタマイズします。
  8. 変更をコミット を選択します。

パイプラインにDASTジョブが含まれるようになりました。

結果はDASTレポートアーティファクトとして保存され、後でダウンロードして分析できます。実装の制限のため、常に利用可能な最新のDASTアーティファクトを使用します。舞台裏では、GitLab DAST Dockerイメージを使用して、指定されたURLに対してテストを実行し、脆弱性の可能性がないかスキャンします。

UIを使ったDASTの設定

この方法では、UI でオプションを選択します。選択した内容に基づいてコードスニペットが作成され、.gitlab-ci.yml ファイルに貼り付けます。

UIを使用してDASTを設定するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Enable DAST] または [Configure DAST] を選択します。
  4. 必要なスキャナ プロファイルを選択するか、スキャナ プロファイルの作成を選択してスキャナ プロファイルを保存します。詳細については、スキャナプロファイルを参照してください。
  5. 目的のサイトプロファイルを選択するか、サイトプロファイルの作成を選択してサイトプロファイルを保存します。詳細については、サイトプロファイルを参照してください。
  6. コード スニペットの生成] を選択します。選択したオプションに対応する YAML スニペットでモーダルが開きます。
  7. 以下のいずれかを行いましょう:
    1. スニペットをクリップボードにコピーするには、「コードのみをコピー」を選択します。
    2. スニペットをプロジェクトの.gitlab-ci.yml ファイルに追加するには、Copy code を選択し、.gitlab-ci.yml ファイルを開きます。パイプラインエディターが開きます。
      1. スニペットを.gitlab-ci.yml ファイルに貼り付けます。
      2. Validate]タブを選択し、[Validate pipeline]を選択します。Simulation completed successfully」というメッセージは、ファイルが有効であることを示しています。
      3. Edit(編集)タブを選択します。
      4. オプション。コミット・メッセージで、コミット・メッセージをカスタマイズします。
      5. 変更をコミット を選択します。

パイプラインにDASTジョブが含まれるようになりました。

APIスキャン

  • DAST API アナライザは、Web API のスキャンに使用します。GraphQL、REST、SOAPなどのウェブAPI技術がサポートされています。

URLスキャン

URLスキャンでは、DASTによってスキャンされるウェブサイトの部分を指定することができます。

スキャンするURLの定義

スキャンするURLは、以下のいずれかの方法で指定できます:

  • DAST_PATHS_FILE CI/CD 変数を使用して、パスを含むファイル名を指定します。
  • DAST_PATHS 変数を使用してパスをリストします。
DAST_PATHS_FILE CI/CD変数を使用します。

GitLab 13.6で導入されました

スキャンするURLをファイルに定義するには、1行に1つのパスを記述したプレーンテキストファイルを作成します。

page1.html
/page2.html
category/shoes/page1.html

そのファイルの URL をスキャンするには、CI/CD 変数DAST_PATHS_FILE をそのファイルのパスに設定します。このファイルはプロジェクトのリポジトリにチェックインするか、DASTの前に実行されるジョブによってアーティファクトとして生成されます。

デフォルトでは、DASTスキャンはプロジェクトリポジトリをクローンしません。GIT_STRATEGY を fetch に設定して、DAST ジョブにプロジェクトをクローンするように指示します。CI_PROJECT_DIR からDAST_PATHS_FILEへの相対ファイルパスを指定します。

include:
  - template: DAST.gitlab-ci.yml

variables:
  GIT_STRATEGY: fetch
  DAST_PATHS_FILE: url_file.txt  # url_file.txt lives in the root directory of the project
  DAST_BROWSER_SCAN: "true" # use the browser-based GitLab DAST crawler
DAST_PATHS CI/CD変数を使用します。

GitLab 13.4 で導入されました

CI/CD 変数でスキャンするパスを指定するには、DAST_PATHS 変数にカンマで区切ったパスのリストを追加します。スキャンできるのは単一のホストのパスだけです。

include:
  - template: DAST.gitlab-ci.yml

variables:
  DAST_PATHS: "/page1.html,/category1/page1.html,/page3.html"
  DAST_BROWSER_SCAN: "true" # use the browser-based GitLab DAST crawler

DAST_PATHSDAST_PATHS_FILE を使用する場合、以下の点に注意してください:

  • DAST_WEBSITE は、DAST_PATHS_FILE またはDAST_PATHS のいずれかを使用する場合に定義する必要があります。 どちらかに記載されているパスは、DAST_WEBSITE を使用してスキャンする URL を構築します。
  • DAST_PATHS またはDAST_PATHS_FILE が定義されている場合、スパイダリングは無効になります。
  • DAST_PATHS_FILEDAST_PATHS は併用できません。
  • DAST_PATHS 変数には約130kbの制限があります。これを超えるリストやパスがある場合は、DAST_PATHS_FILE を使ってください。

フルスキャン

リストされたパスをフルスキャンするには、DAST_FULL_SCAN_ENABLED CI/CD変数を使用します。

認証

プロキシベースのアナライザは、ブラウザベースのアナライザを使用して、スキャン前に ユーザーを認証します。設定手順については、「認証」を参照してください。

DAST設定のカスタマイズ

CI/CD変数とコマンドラインオプションの両方を使用して、DASTの動作をカスタマイズすることができます。CI/CD変数を使用すると、DASTテンプレートに含まれる値が上書きされます。

CI/CD変数を使用したDASTのカスタマイズ

caution
GitLab 13.0から、onlyexcept の使用はサポートされなくなりました。代わりに](../../../ci/yaml/index.md#rules) 。

DASTの設定は、.gitlab-ci.ymlvariables パラメータを使うことで、CI/CD変数を通して変更することができます。すべての DAST CI/CD 変数の詳細については、利用可能な CI/CD 変数を参照してください。

使用例:

include:
  - template: DAST.gitlab-ci.yml

variables:
  DAST_WEBSITE: https://example.com
  DAST_SPIDER_MINS: 120
  DAST_BROWSER_SCAN: "true" # use the browser-based GitLab DAST crawler

テンプレートはパイプライン設定の前に評価されるので、変数の最後の言及が優先されます。

ルールの有効化または無効化

DASTが脆弱性のスキャンに使用するルールの完全なリストは、ZAPドキュメントに記載されています。

DAST_EXCLUDE_RULES 指定された ID のルールを無効にします。

DAST_ONLY_INCLUDE_RULES スキャンで使用されるルール セットを、指定された ID を持つルールに制限します。

DAST_EXCLUDE_RULESDAST_ONLY_INCLUDE_RULES は互いに排他的であり、両方が設定された DAST スキャンはエラーで終了します。

デフォルトでは、実行に時間がかかるか、頻繁に誤検出を生成するため、いくつかのルールは無効になっています。無効化されたルールの完全なリストは、exclude_rules.yml にあります。

DAST_EXCLUDE_RULESDAST_ONLY_INCLUDE_RULES のリストは二重引用符 (") で囲む必要があります

機密情報を隠す

GitLab 13.1で導入されました。

HTTP リクエストヘッダとレスポンスヘッダには、クッキーや作成者の認証情報を含む機密情報が含まれている可能性があります。デフォルトでは、以下のヘッダがマスクされます:

  • Authorization.
  • Proxy-Authorization.
  • Set-Cookie (値のみ)。
  • Cookie (値のみ)。

DAST_MASK_HTTP_HEADERS CI/CD 変数を使用すると、値をマスクしたいヘッダーをリストアップできます。ヘッダーをマスクする方法の詳細については、「DAST設定のカスタマイズ」を参照してください。

相互TLSの使用

GitLab 14.8で導入されました

Mutual TLSは、ターゲットアプリケーションサーバーが、リクエストが既知のソースからのものであることを確認することを可能にします。ブラウザベースのスキャンはMutual TLSをサポートしていません。

要求事項

  • Base64エンコードされたPKCS12証明書
  • Base64エンコードされたPKCS12証明書のパスワード

相互TLSを有効にするには

  1. PKCS12証明書がまだbase64エンコードされていない場合は、base64エンコードに変換します。セキュリティ上の理由から、Webホスト型の変換サービスを使用せず、証明書をローカルでエンコードすることをお勧めします。たとえば、MacOSまたはLinuxのいずれかで証明書をエンコードする場合:

    base64 <path-to-pkcs12-certificate-file>
    
  2. DAST_PKCS12_CERTIFICATE_BASE64 という名前のマスクされた変数を作成し、base64 エンコードされた PKCS12 証明書の値をその変数に格納します。
  3. マスクされた変数DAST_PKCS12_PASSWORD を作成し、その変数に PKCS12 証明書のパスワードを格納します。

利用可能な CI/CD 変数

これらのCI/CD変数はDAST固有のものです。DASTの動作を要件に合わせてカスタマイズするために使用できます。認証CI/CD変数については、認証を参照してください。

caution
GitLab セキュリティスキャンツールのすべてのカスタマイズは、デフォルトブランチに変更をマージする前にマージリクエストでテストしてください。これを怠ると、多数の偽陽性を含む予期しない結果をもたらす可能性があります。
CI/CD 変数種類説明
DAST_ADVERTISE_SCANboolean true に設定すると、送信されたリクエストにVia ヘッダを追加し、リクエストが GitLab DAST スキャンの一部として送信されたことを宣伝します。
DAST_AGGREGATE_VULNERABILITIESboolean脆弱性の集約はデフォルトでtrue に設定されています。この機能を無効にし、各脆弱性を個別に表示するには、false に設定します。
DAST_ALLOWED_HOSTSカンマ区切りの文字列リストこの変数に含まれるホスト名は、クロールされるときにスコープ内にあるとみなされます。デフォルトではDAST_WEBSITE のホスト名が許可されるホストリストに含まれます。DAST_REQUEST_HEADERS を使って設定されたヘッダは、これらのホスト名への すべてのリクエストに追加されます。例:site.com,another.com.
DAST_API_HOST_OVERRIDE 1 文字列です。 警告削除GitLab 16.0で削除されました。DAST API スキャンに置き換えられました。
DAST_API_SPECIFICATION 1 URLまたは文字列 警告削除GitLab 16.0で削除されました。DAST API スキャンに置き換えられました。
DAST_AUTH_EXCLUDE_URLSURL 警告削除されましたを削除しました。DAST_EXCLUDE_URLS に置き換えられました。認証スキャン中にスキップする URL。カンマ区切りです。正規表現構文は複数のURLにマッチさせることができます。例えば、.* は任意の文字列にマッチします。
DAST_AUTO_UPDATE_ADDONSbooleanZAPアドオンはDAST Dockerイメージの特定のバージョンに固定されています。スキャン開始時に最新バージョンをダウンロードするには、true に設定します。デフォルト:false.
DAST_DEBUG 1 booleanデバッグメッセージ出力を有効にします。デフォルト:false
DAST_EXCLUDE_RULES文字列です。カンマ区切りの脆弱性ルール ID のリストに設定し、スキャン中に実行されないようにします。ルール ID は番号で、DAST ログまたはZAP プロジェクトで確認できます。例えば、HTTP Parameter Override のルール ID は10026 です。DAST_ONLY_INCLUDE_RULES が設定されている場合は使用できません。: GitLab の以前のバージョンでは、除外されたルールは実行されましたが、それらが生成した脆弱性は抑制されました。
DAST_EXCLUDE_URLS 1 URL認証スキャン中にスキップするURL。カンマ区切り。正規表現構文を使用して、複数の URL に一致させることができます。たとえば、.* は任意の文字列にマッチします。例、http://example.com/sign-out.
DAST_FULL_SCAN_ENABLED 1 boolean true に設定すると、ZAP ベースラインスキャンではなくZAP フルスキャンを実行します。デフォルトfalse
DAST_HTML_REPORT文字列です。 警告非推奨GitLab 15.7 で廃止予定。スキャンの最後に書かれるHTMLレポートのファイル名。
DAST_INCLUDE_ALPHA_VULNERABILITIESboolean true に設定すると、アルファのパッシブおよびアクティブ スキャン ルールが含まれます。デフォルト:false.
DAST_MARKDOWN_REPORT文字列です。 警告非推奨GitLab 15.7 で廃止予定。スキャンの最後に書かれるMarkdownレポートのファイル名。
DAST_MASK_HTTP_HEADERS文字列です。コンマで区切られた、マスクされるリクエストヘッダとレスポンスヘッダのリスト。マスクするヘッダをすべてコンテナで囲む必要があります。デフォルトでマスクされるヘッダのリストを参照してください。
DAST_MAX_URLS_PER_VULNERABILITY1つの脆弱性についてレポーターされるURLの最大数です。DAST_MAX_URLS_PER_VULNERABILITY はデフォルトで50 に設定されています。0 に設定されたすべての URL を一覧表示するには、次のようにします。
DAST_ONLY_INCLUDE_RULES文字列です。脆弱性ルールIDのカンマ区切りリストを設定すると、脆弱性ルールIDのみを実行するようにスキャンを設定できます。ルール ID は番号で、DAST ログまたはZAP プロジェクトで確認できます。DAST_EXCLUDE_RULES が設定されている場合は使用できません。
DAST_PATHS文字列です。DASTがスキャンするURLのカンマ区切りリストを設定します。例えば、/page1.html,/category1/page3.html,/page2.html.
DAST_PATHS_FILE文字列です。スキャンするDAST_WEBSITE 内のパスを含むファイルパス。ファイルはプレーンテキストで、1行に1つのパスでなければなりません。
DAST_PKCS12_CERTIFICATE_BASE64文字列です。相互TLSを必要とするサイトで使用されるPKCS12証明書。base64テキストでエンコードされている必要があります。
DAST_PKCS12_PASSWORD文字列です。 DAST_PKCS12_CERTIFICATE_BASE64 で使用する証明書のパスワード。
DAST_REQUEST_HEADERS 1 文字列です。リクエストヘッダの名前と値をコンマで区切ったリストに設定します。ヘッダは DAST が行う全てのリクエストに追加されます。例えばCache-control: no-cache,User-Agent: DAST/1.0
DAST_SKIP_TARGET_CHECKboolean true に設定すると、スキャン前にターゲットが利用可能かどうかを DAST がチェックしないようにします。デフォルト:false
DAST_SPIDER_MINS 1 スパイダースキャンの最大時間を分単位で指定します。無制限の場合は0 に設定します。デフォルト:1分、またはスキャンがフルスキャンの場合は無制限。
DAST_SPIDER_START_AT_HOSTbooleanDAST がスキャン前にターゲットをホストにリセットしないようにするには、false に設定します。true の場合、非ホストターゲットhttp://test.site/some_path はスキャン前にhttp://test.site にリセットされます。デフォルト:true
DAST_TARGET_AVAILABILITY_TIMEOUT 1 ターゲットが利用可能になるまでの待ち時間を秒単位で指定します。
DAST_USE_AJAX_SPIDER 1 boolean true に設定すると、従来のスパイダーに加えて AJAX スパイダーを使用します。JavaScript を必要とするサイトのクロールに便利です。デフォルト:false
DAST_XML_REPORT文字列です。 警告非推奨GitLab 15.7 で廃止予定。スキャンの最後に書かれるXMLレポートのファイル名。
DAST_WEBSITE 1 URLスキャンするウェブサイトのURL。
DAST_ZAP_CLI_OPTIONS文字列です。 警告非推奨GitLab 15.7.ZAPサーバのコマンドラインオプション。例えば、-Xmx3072m はJavaの最大メモリ割り当てプールサイズを設定します。
DAST_ZAP_LOG_CONFIGURATION文字列です。 警告非推奨GitLab 15.7.ZAP Serverに対する追加のlog4jプロパティをセミコロンで区切ったリストに設定します。例logger.httpsender.name=org.parosproxy.paros.network.HttpSender;logger.httpsender.level=debug;logger.sitemap.name=org.parosproxy.paros.model.SiteMap;logger.sitemap.level=debug;
SECURE_ANALYZERS_PREFIXURLアナライザーをダウンロードするDockerレジストリのベースアドレスを設定します。
  1. オンデマンドDASTスキャンで利用可能です。

コマンドラインオプションを使用したDASTのカスタマイズ

すべてのDAST設定がCI/CD変数から利用できるわけではありません。可能なすべてのオプションを調べるには、以下の設定を実行してください。利用可能なコマンドラインオプションはジョブログに出力されます:

include:
  template: DAST.gitlab-ci.yml

dast:
  script:
    - /analyze --help

その後、script コマンドを上書きして、適切な引数を渡す必要があります。例えば、alpha の脆弱性定義は、-a で含めることができます。以下の設定には、これらの定義が含まれています:

include:
  template: DAST.gitlab-ci.yml

dast:
  script:
    - export DAST_WEBSITE=${DAST_WEBSITE:-$(cat environment_url.txt)}
    - /analyze -a -t $DAST_WEBSITE

カスタム ZAProxy 設定

ZAProxyサーバには多くの便利な設定値があります。-config のキー/値の多くは文書化されていませんが、可能なキーのリストが未検証です。これらのオプションはDASTではサポートされておらず、使用するとDASTスキャンが壊れる可能性があります。TOKEN 、Authorizationヘッダー値を書き換える方法の例を以下に示します:

include:
  template: DAST.gitlab-ci.yml

variables:
  DAST_ZAP_CLI_OPTIONS: "-config replacer.full_list(0).description=auth -config replacer.full_list(0).enabled=true -config replacer.full_list(0).matchtype=REQ_HEADER -config replacer.full_list(0).matchstr=Authorization -config replacer.full_list(0).regex=false -config replacer.full_list(0).replacement=TOKEN"

脆弱性の定義

ZAPはまずalpha クラスで alphaルールを作成します。alpha コミュニティとのテスト期間を経て、beta. betaNETに昇格させます。betaDASTは betaデフォルトで定義をbeta使用 betaします。 alpha定義をalpha 要求 alphaするには、次の設定に示すようにDAST_INCLUDE_ALPHA_VULNERABILITIES CI/CD 変数を使用します:

include:
  template: DAST.gitlab-ci.yml

variables:
  DAST_INCLUDE_ALPHA_VULNERABILITIES: "true"

プロジェクトのリポジトリのクローン

DAST ジョブは実行時にプロジェクトのリポジトリが存在する必要はないので、デフォルトではGIT_STRATEGYnone に設定されています。

オンデマンドスキャン

  • GitLab 14.1で導入されたDASTプロファイル管理の監査。
  • GitLab 14.3で導入されたdast_on_demand_scans_scheduler というフラグによるオンデマンドDASTスキャンのスケジュール。デフォルトでは無効。
  • スケジュールされたオンデマンドDASTスキャンはGitLab 14.5で一般的に利用可能。機能フラグdast_on_demand_scans_scheduler は削除されました。
  • GitLab15.9で `on_demand_scans_runner_tags というフラグでランナータグの選択が導入されました。デフォルトでは無効。
  • GitLab 16.3でGitLab.comとセルフマネジメントでランナータグ選択が有効になりました。

オンデマンドのDASTスキャンは、DevOpsのライフサイクルの外で実行されます。リポジトリの変更はスキャンのトリガーにはなりません。手動で開始するか、スケジュールを組んで実行する必要があります。オンデマンド DAST スキャンの場合、サイトプロファイルでスキャン対象を定義し、スキャナプロファイルでアプリケーションのスキャン方法を定義します。

オンデマンド スキャンは、アクティブ モードまたはパッシブ モードで実行できます:

  • パッシブモード:パッシブ モード: ZAP ベースライン スキャンを実行するデフォルト モードです。
  • アクティブモード:ZAP フル スキャンを実行し、スキャン対象のサイトに有害な影響を与える可能性があります。偶発的な損傷のリスクを最小限に抑えるため、アクティブ スキャンの実行には検証済みのサイト プロファイルが必要です。

オンデマンド DAST スキャンを表示

オンデマンドスキャンを表示するには

  1. 左側のサイドバーで、「検索」を選択するか、または「移動」を選択して、プロジェクトまたはグループを見つけます。
  2. セキュリティ > オンデマンドスキャンを選択します。

オンデマンド スキャンはステータスごとにグループ化されます。スキャン ライブラリには、利用可能なオンデマンド スキャンがすべて含まれています。

オンデマンド DAST スキャンの実行

前提条件:

  • 保護されたブランチに対してオンデマンド DAST スキャンを実行する権限が必要です。デフォルトのブランチは自動的に保護されます。詳細については、保護ブランチのパイプラインセキュリティを参照してください。

既存のオンデマンドスキャンを実行するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュリティ > オンデマンドスキャンを選択します。
  3. スキャンライブラリタブを選択します。
  4. スキャンの行で、スキャンの実行を選択します。

    スキャンで保存されたブランチがもはや存在しない場合は、以下を行う必要があります:

    1. スキャンを編集します。
    2. 新しいブランチを選択します。
    3. 編集したスキャンを保存します。

オンデマンド DAST スキャンが実行され、プロジェクトのダッシュボードに結果が表示されます。

オンデマンドスキャンの作成

オンデマンドスキャンを作成します:

  • すぐに実行します。
  • 将来実行するために保存してください。
  • 指定したスケジュールで実行するようにスケジュールを設定します。

オンデマンド DAST スキャンを作成するには

  1. 左側のサイドバーで、「検索」を選択するか、または「移動」を選択して、プロジェクトまたはグループを見つけます。
  2. セキュリティ > オンデマンドスキャンを選択します。
  3. 新規スキャンを選択します。
  4. スキャン名] と [説明] フィールドを入力します。
  5. ブランチ] ドロップダウン リストで、必要なブランチを選択します。
  6. オプション。ランナータグを選択します。
  7. Select scanner profile(スキャナプロファイルの選択)またはChange scanner profile(スキャナプロファイルの変更)を選択し、ドロワーを開きます:
    • ドロワーからスキャナプロファイルを選択します
    • 新規プロファイル] を選択してスキャナプロファイルを作成し、[プロファイルを保存] を選択します。
  8. サイトプロファイルの選択] または [サイトプロファイルの変更] を選択し、ドロワーを開きます:
    • サイトプロファイル ライブラリドロワーからサイト プロファイルを選択します。
    • 新規プロファイル] を選択してサイトプロファイルを作成し、[プロファイルを保存] を選択します。
  9. オンデマンド スキャンを実行するには

    • すぐに、[保存してスキャンを実行] を選択します。
    • 今後、[スキャンを保存] を選択します。
    • スケジュールで

      • スキャン スケジュールを有効にする] トグルをオンにします。
      • スケジュールフィールドを入力します。
      • スキャンの保存] を選択します。

オンデマンド DAST スキャンが指定どおりに実行され、プロジェクトのダッシュボードに結果が表示されます。

オンデマンドスキャンの詳細を表示

オンデマンドスキャンの詳細を表示します:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュリティ > オンデマンドスキャンを選択します。
  3. スキャンライブラリタブを選択します。
  4. 保存されたスキャンの行で [その他のアクション]({ellipsis_v}) を選択し、[編集] を選択します。

オンデマンドスキャンの編集

オンデマンドスキャンを編集するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュリティ > オンデマンドスキャンを選択します。
  3. スキャンライブラリタブを選択します。
  4. 保存されたスキャンの行で [その他のアクション]({ellipsis_v}) を選択し、[編集] を選択します。
  5. 保存したスキャンの詳細を編集します。
  6. スキャンの保存] を選択します。

オンデマンドスキャンの削除

オンデマンドスキャンを削除するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュリティ > オンデマンドスキャンを選択します。
  3. スキャンライブラリタブを選択します。
  4. 保存されたスキャンの行で [その他のアクション]({ellipsis_v}) を選択し、[削除] を選択します。
  5. 確認ダイアログで [削除] を選択します。

サイトプロファイル

サイトプロファイルは、DASTによってスキャンされるデプロイされたアプリケーション、ウェブサイト、APIの属性と設定の詳細を定義します。サイトプロファイルは.gitlab-ci.yml やオンデマンドスキャンで参照することができます。

サイトプロファイルには以下のコンテナが含まれます:

  • プロファイル名: スキャンするサイトに割り当てる名前。サイト プロファイルは、.gitlab-ci.yml またはオンデマンド スキャンのいずれかで参照されますが、名前を変更することはできません
  • サイト タイプ:スキャン対象のタイプ(ウェブサイトまたはAPIスキャン)。
  • ターゲットURL:DASTが実行するURL。
  • 除外URL:スキャンから除外するURLのカンマ区切りリスト。
  • リクエストヘッダ:名前と値を含むHTTPリクエストヘッダのカンマ区切りリスト。これらのヘッダはDASTが行うすべてのリクエストに追加されます。
  • 認証
    • 認証されたURL:ターゲットWebサイトのサインインHTMLフォームを含むページのURL。ユーザー名とパスワードはログインフォームと共に送信され、認証スキャンが作成されます。
    • ユーザー名:ウェブサイトの認証に使用されるユーザー名。
    • パスワード:ウェブサイトの認証に使用するパスワード。
    • ユーザー名フォームフィールド:サインインHTMLフォームのユーザー名フィールドの名前。
    • パスワードフォームフィールドサインイン HTML フォームのパスワードフィールドの名前。
    • 送信フォームフィールド:id またはname を選択すると、サインイン HTML フォームを送信します。
  • スキャンメソッド:API テストを実行するメソッドのタイプ。サポートされているメソッドは、OpenAPI、Postman Collections、HTTP Archive(HAR)、または GraphQL です。
    • GraphQL エンドポイントのパス:GraphQL エンドポイントへのパス。このパスはターゲット URL と結合され、テストするスキャンの URI になります。GraphQL エンドポイントはイントロスペクション クエリをサポートしている必要があります。
    • ファイル URL:OpenAPI、Postman Collection、または HTTP Archive ファイルの URL。

APIサイトタイプを選択すると、スキャン対象のAPIがターゲットと同じホスト上にあることを確認するために、ホストオーバーライドが使用されます。これは、間違ったAPIに対してアクティブスキャンを実行するリスクを低減するためです。

設定すると、リクエストヘッダとパスワードフィールドは、aes-256-gcm を使用して暗号化されてからデータベースに保存されます。このデータは、有効なシークレットファイルでのみ読み取りと復号が可能です。

サイトプロファイルの検証

GitLab 14.2で導入されたメタタグ検証。

サイトプロファイルの検証は、間違ったウェブサイトに対してアクティブスキャンを実行するリスクを低減します。アクティブスキャンを実行する前に、サイトを検証する必要があります。それぞれのサイト検証方法は機能的に同等なので、最適な方を使用してください:

  • テキスト ファイルの検証:テキスト ファイルの検証: ターゲット サイトにテキスト ファイルをアップロードする必要があります。テキストファイルにはプロジェクト固有の名前とコンテンツが割り当てられます。検証プロセスでは、ファイルの内容をチェックします。
  • ヘッダー検証:ヘッダーGitlab-On-Demand-DAST がプロジェクト固有の値でターゲットサイトに追加されている必要があります。バリデーションプロセスでは、ヘッダーが存在することを確認し、その値をチェックします。
  • メタタグの検証:gitlab-dast-validation というメタタグがプロジェクト固有の値でターゲットサイトに追加されている必要があります。ページの<head> セクションに追加されていることを確認してください。検証プロセスでは、メタタグが存在することを確認し、その値をチェックします。

サイトプロファイルの作成

サイトプロファイルを作成するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Manage profiles] を選択します。
  4. New > Site profile を選択します。
  5. フィールドに入力し、[プロファイルを保存]を選択します。

サイトプロファイルが保存され、オンデマンドスキャンで使用できるようになります。

サイト プロファイルの編集

note
サイト プロファイルがセキュリティ ポリシーにリンクされている場合、このページからプロファイルを編集することはできません。詳細については、スキャン実行ポリシーを参照してください。

検証済みのサイト プロファイルのファイル、ヘッダー、またはメタ タグが編集されると、サイトの検証ステータスが取り消されます。

サイトプロファイルを編集するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Manage profiles] を選択します。
  4. Site Profilesタブを選択します。
  5. プロファイルの行で[その他のアクション({ellipsis_v})メニューを選択し、[編集]を選択します。
  6. フィールドを編集し、プロファイルを保存を選択します。

サイトプロファイルの削除

note
サイトプロファイルがセキュリティポリシーにリンクされている場合、ユーザーはこのページからプロファイルを削除できません。詳細については、実行ポリシーのスキャンを参照してください。

サイトプロファイルを削除するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Manage profiles] を選択します。
  4. Site Profilesタブを選択します。
  5. プロファイルの行で[その他のアクション({ellipsis_v})メニューを選択し、[削除]を選択します。
  6. 削除を選択して削除を確定します。

サイトプロファイルの検証

アクティブ スキャンを実行するには、サイトの検証が必要です。

前提条件:

  • 検証ジョブを実行するには、プロジェクトでRunnerが使用可能である必要があります。
  • GitLabサーバーの証明書は信頼できるものでなければならず、自己署名証明書を使用してはなりません。

サイトプロファイルを検証するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Manage profiles] を選択します。
  4. Site Profilesタブを選択します。
  5. プロファイルの行で、Validateを選択します。
  6. 検証方法を選択します。
    1. テキストファイルの検証
      1. ステップ2に記載されている検証ファイルをダウンロードしてください。
      2. 検証ファイルをホスト、ステップ3の場所、またはお好みの場所にアップロードします。
      3. 必要に応じて、ステップ3でファイルの場所を編集してください。
      4. Validateを選択します。
    2. ヘッダーの検証
      1. ステップ2でクリップボードのアイコンを選択します。
      2. 検証するサイトのヘッダーを編集し、クリップボードの内容を貼り付けます。
      3. ステップ3の入力フィールドを選択し、ヘッダーの場所を入力します。
      4. Validateを選択します。
    3. メタタグの検証
      1. ステップ2でクリップボードのアイコンを選択します。
      2. 検証するサイトの内容を編集し、クリップボードの内容を貼り付けます。
      3. ステップ3の入力フィールドを選択し、メタタグの場所を入力します。
      4. Validateを選択します。

サイトが検証され、そのサイトに対してアクティビティ スキャンを実行できます。サイト プロファイルの検証ステータスは、手動で取り消すか、ファイル、ヘッダー、またはメタ タグを編集した場合にのみ取り消されます。

失敗した検証の再試行

失敗したサイト検証はManage profilesページのSite profilesタブに表示されます。

失敗したサイト プロファイルの検証を再試行するには、以下の手順に従います:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Manage profiles] を選択します。
  4. Site Profilesタブを選択します。
  5. プロファイルの行で、[検証を再試行]を選択します。

サイト プロファイルの検証ステータスの取り消し

caution
サイトプロファイルの検証ステータスが取り消されると、同じURLを共有するすべてのサイトプロファイルの検証ステータスも取り消されます。

サイト プロファイルの検証ステータスを取り消すには、次の手順を実行します:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Manage profiles] を選択します。
  4. 検証済みのプロファイルの横で、Revoke validation を選択します。

サイト プロファイルの検証ステータスが取り消されます。

検証されたサイトプロファイルヘッダー

以下は、アプリケーションで必要なサイト・プロファイル・ヘッダーを提供する方法のコード・サンプルです。

Ruby on Railsによるオンデマンドスキャンの例

Ruby on Railsアプリケーションでカスタムヘッダを追加する方法を紹介します:

class DastWebsiteTargetController < ActionController::Base
  def dast_website_target
    response.headers['Gitlab-On-Demand-DAST'] = '0dd79c9a-7b29-4e26-a815-eaaf53fcab1c'
    head :ok
  end
end

オンデマンドスキャン用の Django の例

Django でカスタムヘッダを追加する方法を示します:

class DastWebsiteTargetView(View):
    def head(self, *args, **kwargs):
      response = HttpResponse()
      response['Gitlab-On-Demand-DAST'] = '0dd79c9a-7b29-4e26-a815-eaaf53fcab1c'

      return response

オンデマンドスキャン用ノード(Express使用)の例

以下はNode (with Express)でカスタムヘッダーを追加する方法です:

app.get('/dast-website-target', function(req, res) {
  res.append('Gitlab-On-Demand-DAST', '0dd79c9a-7b29-4e26-a815-eaaf53fcab1c')
  res.send('Respond to DAST ping')
})

スキャナプロファイル

スキャナ・プロファイルは、セキュリティ・スキャナの設定詳細を定義します。スキャナ プロファイルは、.gitlab-ci.yml およびオンデマンド スキャンで参照できます。

スキャナ プロファイルには次のコンテナが含まれます:

  • プロファイル名:スキャナ・プロファイルに付ける名前。たとえば、「Spider_15」。スキャナ プロファイルは、.gitlab-ci.yml またはオンデマンド スキャ ンのいずれかで参照されますが、名前を変更することはできません
  • スキャン モード:パッシブ スキャンは、ターゲットに送信されるすべての HTTP メッセージ (要求と応答) を監視します。アクティブ スキャンは、ターゲットを攻撃して潜在的な脆弱性を見つけます。
  • スパイダータイムアウト:スパイダーがサイトを巡回できる最大分数。
  • ターゲットタイムアウト:スキャンを開始する前に、DASTがサイトを利用可能になるまで待つ最大秒数。
  • AJAX スパイダー従来のスパイダーに加え、AJAXスパイダーを実行し、対象サイトをクロールします。
  • デバッグメッセージDASTコンソール出力にデバッグメッセージを含めます。

スキャナプロファイルの作成

スキャナプロファイルを作成するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Manage profiles] を選択します。
  4. 新規] > [スキャナ プロファイル] を選択します。
  5. フォームに必要事項を入力します。各フィールドの詳細については、スキャナプロファイルを参照してください。
  6. プロファイルを保存] を選択します。

スキャナプロファイルの編集

note
スキャナ プロファイルがセキュリティ ポリシーにリンクされている場合、このページからプロファイルを編集することはできません。詳細については、スキャン実行ポリシーを参照してください。

スキャナ プロファイルを編集するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Manage profiles] を選択します。
  4. Scanner profilesタブを選択します。
  5. スキャナの行で [その他のアクション({ellipsis_v})] メニューを選択し、[編集] を選択します。
  6. フォームを編集します。
  7. プロファイルを保存] を選択します。

スキャナプロファイルの削除

note
スキャナ プロファイルがセキュリティ ポリシーにリンクされている場合、ユーザーはこのページからプロファイルを削除できません。詳細については、スキャン実行ポリシーを参照してください。

スキャナ プロファイルを削除するには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. Dynamic Application Security Testing(DAST)] セクションで、[Manage profiles] を選択します。
  4. Scanner profilesタブを選択します。
  5. スキャナの行で [その他のアクション({ellipsis_v})] メニューを選択し、[削除] を選択します。
  6. 削除]を選択します。

監査

GitLab 14.1 で導入されました

DASTプロファイル、DASTスキャナプロファイル、DASTサイトプロファイルの作成、更新、削除が監査ログに含まれます。

レポーター

DAST ツールは、スキャンとその結果の詳細を含むgl-dast-report.json レポートファイルを出力します。このファイルはジョブのアーティファクトに含まれます。JSONがデフォルトの形式ですが、Markdown、HTML、XML形式でレポートを出力することができます。別のフォーマットを指定するには、CI/CD変数を使用します。

レポートのスキーマの詳細については、DASTレポートのスキーマを参照してください。レポートの例はDASTリポジトリにあります。

caution
JSONレポートアーティファクトはDASTの公開APIではないため、将来的にフォーマットが変更されることが予想されます。

トラブルシューティング

unable to get local issuer certificate サイトプロファイルを検証しようとすると

自己署名証明書の使用はサポートされていないため、エラーメッセージが表示されてジョブが失敗することがあります:unable to get local issuer certificate.詳細については、イシュー416670を参照してください。