DASTプロキシベースアナライザのトラブルシューティング

以下のトラブルシューティングシナリオは、お客様のサポート事例から収集したものです。ここに記載されていない問題が発生した場合、またはここに記載されている情報では問題が解決しない場合は、サポートチケットを作成してください。詳細はGitLabサポートページをご覧ください。

DASTジョブのデバッグ

DASTジョブには2つの実行プロセスがあります:

  • ZAP サーバー。
  • ZAPサーバーを起動、制御、停止する一連のスクリプト。

スクリプトをデバッグするにはDAST_DEBUG CI/CD 変数を有効にします。これは、ジョブのトラブルシューティング時に役立ち、スキャンの何パーセントが完了したかを示すステートメントを出力します。変数の使用の詳細については、DASTテンプレートのオーバーライドを参照してください。

ZAP サーバのデバッグモードは、DAST_ZAP_LOG_CONFIGURATION 変数を使用して有効にできます。次の表は、設定できる値の例と、それらがログに記録される出力に与える影響の概要です。複数の値をセミコロンで区切って指定することができます。

例えば、log4j.logger.org.parosproxy.paros.network.HttpSender=DEBUG;log4j.logger.com.crawljax=DEBUG.

ログ設定値効果
log4j.rootLogger=DEBUGすべてのデバッグ・ロギング文を有効にします。
log4j.logger.org.apache.commons.httpclient=DEBUGZAP サーバーによるすべての HTTP リクエストと応答をログに記録します。
log4j.logger.org.zaproxy.zap.spider.SpiderController=DEBUGターゲットのスパイダースキャン中に検出された URL をログに記録します。
log4j.logger.com.crawljax=DEBUGAjax クローラーのデバッグ ログ ステートメントを有効にします。
log4j.logger.org.parosproxy.paros=DEBUGZAPサーバー・プロキシ・デバッグ・ロギング文を有効にします。
log4j.logger.org.zaproxy.zap=DEBUG一般的な ZAP サーバーコードのデバッグロギング文を有効にします。

メモリ不足

デフォルトでは、DASTが依存するZAProxyには、ホスト上の総メモリの25%に相当するメモリが割り当てられています。DASTはスキャン中にほとんどの情報をメモリに保持するため、大規模なアプリケーションのスキャン中にメモリ不足になる可能性があります。その結果、次のようなエラーが発生します:

[zap.out] java.lang.OutOfMemoryError: Java heap space

幸いなことに、DAST_ZAP_CLI_OPTIONS CI/CD 変数を使用することで、DAST で使用可能なメモリ量を簡単に増やすことができます:

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

variables:
  DAST_ZAP_CLI_OPTIONS: "-Xmx3072m"

この例ではDASTに3072MBを割り当てています。-Xmx の後の数字を必要なメモリ量に変更してください。

DASTジョブがジョブのタイムアウトを超えました。

DASTジョブがジョブタイムアウトを超え、スキャン時間を短縮する必要がある場合、DASTスキャンを最適化するためのヒントをブログ記事でご紹介しています。

警告メッセージgl-dast-report.json: no matching files

これについては、一般的なアプリケーションセキュリティのトラブルシューティングのセクションを参照してください。

DAST CI テンプレートをインクルードするとエラーdast job: chosen stage does not exist が発生します。

他のCIファイルからのステージの上書きを避けるため、DAST CIテンプレートの新しいバージョンではステージを定義していません。最近DAST.latest.gitlab-ci.yml を使い始めたり、GitLab の新しいメジャーリリースにアップグレードしたりして、このエラーを受け取るようになった場合は、dast 他のステージと一緒にステージを dast定義する必要があります。dast DASTがスキャンするためには、実行中のアプリケーションが必要です。アプリケーションがパイプラインにセットアップ dastされている場合は、ステージdast の_前の_ステージにデプロイする必要が dastあります:

stages:
  - deploy  # DAST needs a running application to scan
  - dast

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

DAST CI/CD テンプレートを使用するとエラーshell not found が発生します。

ドキュメントに記載されているようにDAST CI/CDテンプレートを含めると、ジョブが失敗し、ジョブログに以下のようなエラーが記録されることがあります:

shell not found

このエラーを回避するには、Dockerの最新の安定版を使用していることを確認してください。このエラーを回避するには、最新の安定版Dockerを使用していることを確認してください。詳細については、イシュー358847を参照してください。

IPv6サポートの欠如

基盤となるZAProxyエンジンがIPv6をサポートしていないため、DASTはIPv6ベースのアプリケーションをスキャンしたり、クロールしたりすることができません。

DASTスキャンアクティビティに関するその他のインサイト

DAST スキャンのインサイトとして、スキャン中またはスキャン後に DAST ターゲットエンドポイントのウェブサーバアクセスログをレビューすることができます。