- DASTジョブのデバッグ
- メモリ不足
- DASTジョブがジョブのタイムアウトを超えました。
- 警告メッセージ
gl-dast-report.json: no matching files
- DAST CI テンプレートをインクルードするとエラー
dast job: chosen stage does not exist
が発生します。 - DAST CI/CD テンプレートを使用するとエラー
shell not found
が発生します。 - IPv6サポートの欠如
- DASTスキャンアクティビティに関するその他のインサイト
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=DEBUG | ZAP サーバーによるすべての HTTP リクエストと応答をログに記録します。 |
log4j.logger.org.zaproxy.zap.spider.SpiderController=DEBUG | ターゲットのスパイダースキャン中に検出された URL をログに記録します。 |
log4j.logger.com.crawljax=DEBUG | Ajax クローラーのデバッグ ログ ステートメントを有効にします。 |
log4j.logger.org.parosproxy.paros=DEBUG | ZAPサーバー・プロキシ・デバッグ・ロギング文を有効にします。 |
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 ターゲットエンドポイントのウェブサーバアクセスログをレビューすることができます。