SASTのトラブルシューティング
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
以下のトラブルシューティングのシナリオは、カスタマーサポートの事例から収集したものです。ここに記載されていない問題が発生した場合、または記載されている情報で問題が解決しない場合は、GitLabサポートページでサポートを受ける方法を確認してください。
デバッグレベルのログを生成する
デバッグレベルでログを生成しておくと、トラブルシューティングに役立ちます。詳細については、デバッグレベルのログを生成するを参照してください。
CI/CDテンプレートの変更
GitLab管理のSAST CI/CDテンプレートは、どのアナライザージョブを実行するか、およびそれらの設定方法を制御します。テンプレートを使用していると、ジョブの失敗やその他のパイプラインエラーが発生する可能性があります。次に例を示します:
- 影響を受けるパイプラインを表示すると、
'<your job>' needs 'spotbugs-sast' job, but 'spotbugs-sast' is not in any previous stageのようなエラーメッセージが表示されます。 - CI/CDパイプラインの設定で、予期しない別の種類の問題が発生する。
ジョブの失敗が発生した場合、またはSAST関連のyaml invalidパイプラインステータスが表示された場合は、問題を調査している間、パイプラインが動作し続けるように、テンプレートの古いバージョンに一時的に戻すことができます。テンプレートの古いバージョンを使用するには、CI/CD YAMLファイルの既存のincludeステートメントを、v15.3.3-eeなどの特定のテンプレートバージョンを参照するように変更します:
include:
remote: 'https://gitlab.com/gitlab-org/gitlab/-/raw/v15.3.3-ee/lib/gitlab/ci/templates/Jobs/SAST.gitlab-ci.yml'GitLabインスタンスのネットワーク接続が制限されている場合は、ファイルをダウンロードして別の場所にホストすることもできます。
このソリューションは一時的にのみ使用し、できるだけ早く標準テンプレートに戻してください。
特定のアナライザージョブのエラー
GitLab SAST アナライザーはコンテナイメージとしてリリースされます。GitLab管理のSAST CI/CDテンプレートまたは独自のプロジェクトの変更に関連していないと思われる新しいエラーが表示される場合は、影響を受けるアナライザーを特定の古いバージョンにタグ付けすることを試してください。
各アナライザープロジェクトには、利用可能な各バージョンで行われた変更を一覧表示するCHANGELOG.mdファイルがあります。
ジョブログメッセージ
SASTジョブのジョブログには、根本原因を特定するのに役立つエラーメッセージが含まれている場合があります。以下に、いくつかのエラーメッセージと推奨されるアクションを示します。
実行可能な形式
exec /bin/sh: exec format error` message in job logGitLab SASTアナライザーは、のみサポートしていますamd64 CPUアーキテクチャでの実行。このメッセージは、ジョブがarmなどの異なるアーキテクチャで実行されていることを示しています。
Dockerのエラー
Error response from daemon: error processing tar file: docker-tar: relocation errorこのエラーは、SASTジョブを実行するDockerバージョンが19.03.0の場合に発生します。Docker 19.03.1以降への更新をご検討ください。古いバージョンは影響を受けません。詳細については、イシュー13830 - 「現在のSASTコンテナが失敗する」を参照してください。
一致するファイルがありません
gl-sast-report.json: no matching filesこの警告に関する情報については、アプリケーションセキュリティの一般的なトラブルシューティングのセクションを参照してください。
設定のみ
sast is used for configuration only, and its script should not be executedこれに関する情報は、GitLab Secureトラブルシューティングセクションを参照してください。
エラー: An error occurred while creating the merge request
UIを使用してプロジェクトでSASTを有効にしようとすると、次の警告が表示されて操作が失敗する可能性があります:
An error occurred while creating the merge request.この問題は、マージリクエスト用にブランチが作成されるのを何かが妨げている場合に発生する可能性があります。UIを使用してSASTを設定すると、数値のサフィックスが付いたブランチが作成されます(例: set-sast-config-1)。ブランチ名を検証するプッシュルールなどの機能は、命名形式が原因でブランチの作成をブロックする可能性があります。
この問題を解決するには、SASTに必要なブランチ命名形式を許可するようにプッシュルールを編集します。
SASTジョブが予期せずに実行される
SAST CIテンプレートは、rules:existsパラメータを使用します。パフォーマンス上の理由から、指定されたglobパターンに対して最大10000個の一致が作成されます。一致の数が最大値を超えると、rules:existsパラメータはtrueを返します。リポジトリ内のファイルの数によっては、スキャナーがプロジェクトをサポートしていなくても、SASTジョブがトリガーされる可能性があります。この制限の詳細については、rules:existsドキュメントを参照してください。
SpotBugsエラー
以下に、発生する最も一般的なSpotBugsエラーの詳細と推奨されるアクションを示します。
UTF-8マップ不可能な文字エラー
これらのエラーは、SpotBugsビルドでUTF-8エンコードが有効になっておらず、ソースコードにUTF-8文字がある場合に発生します。このエラーを修正するには、プロジェクトのビルドツールでUTF-8を有効にします。
Gradleビルドの場合は、次のコードをbuild.gradleファイルに追加します:
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}Mavenビルドの場合は、次のコードをpom.xmlファイルに追加します:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>プロジェクトをビルドできませんでした
spotbugs-sastジョブがビルドステップで「プロジェクトをビルドできませんでした」というメッセージで失敗する場合は、次の理由が考えられます:
- プロジェクトが、デフォルトツールの一部ではないツールを使用してビルドするようにSpotBugsに要求しています。SpotBugsのデフォルトツールのリストについては、SpotBugsのasdf依存関係を参照してください。
- ビルドには、アナライザーの自動ビルドプロセスでは対応できないカスタム設定または追加の依存関係が必要です。
SpotBugsベースのアナライザーはGroovyコードのスキャンにのみ使用されますが、すべてのSASTジョブが予期せず実行される場合など、他の場合にトリガーされる可能性があります。
解決策は、Groovyコードをスキャンする必要があるかどうかによって異なります:
- Groovyコードがない場合、またはスキャンする必要がない場合は、SpotBugsアナライザーを無効にする必要があります。
- Groovyコードをスキャンする必要がある場合は、プリコンパイルを使用する必要があります。プリコンパイルは、
spotbugs-sastジョブでコンパイルしようとするのではなく、パイプラインですでにビルドしたアーティファクトをスキャンすることにより、これらの失敗を回避します。
Javaのメモリー不足エラー
spotbugs-sastジョブの実行中に、java.lang.OutOfMemoryErrorというエラーが発生する場合があります。この問題は、スキャン中にJavaのメモリーが不足した場合に発生します。
このイシューを解決するために、以下を試してください:
- より低い作業レベルを選択してください。
- 既定の
-XX:MaxRAMPercentage=80を置き換えるには、CI/CD変数JAVA_OPTSを設定します(例:-XX:MaxRAMPercentage=90)。 spotbugs-sastジョブでより大きなrunnerにタグ付けします。
関連トピック
例外分析
ジョブログに「Exception analyzing … using detector …」という形式のメッセージがあり、その後にJavaスタックトレースが続く場合、これはSASTパイプラインの失敗ではありません。SpotBugsは、例外が回復可能であると判断し、ログに記録して、分析を再開しました。
メッセージの最初の「…」の部分は分析対象のクラスです。プロジェクトの一部でない場合は、メッセージとそれに続くスタックトレースを無視してかまいません。
一方、分析対象のクラスがプロジェクトの一部である場合は、GitHubでSpotBugsプロジェクトでイシューを作成することを検討してください。
Flawfinderエンコードエラー
これは、Flawfinderが無効なUTF-8文字を検出した場合に発生します。これを修正するには、ドキュメント化されたアドバイスをリポジトリ全体に適用するか、before_script機能を使用してジョブごとにのみ適用します。
各.gitlab-ci.ymlファイルでbefore_scriptセクションを設定するか、パイプライン実行ポリシーを使用してエンコーダーをインストールし、コンバーターコマンドを実行できます。たとえば、セキュリティスキャナーテンプレートから生成されたflawfinder-sastジョブにbefore_scriptセクションを追加して、.cpp拡張子を持つすべてのファイルを変換できます。
パイプライン実行ポリシーYAMLの例
---
pipeline_execution_policy:
- name: SAST
description: 'Run SAST on C++ application'
enabled: true
pipeline_config_strategy: inject_ci
content:
include:
- project: my-group/compliance-project
file: flawfinder.yml
ref: mainflawfinder.yml:
include:
- template: Jobs/SAST.gitlab-ci.yml
flawfinder-sast:
before_script:
- pip install cvt2utf
- cvt2utf convert "$PWD" -i cppSemgrepの低速性、予期しない結果、またはその他のエラー
Semgrepが遅い、誤検出または過小検出を多くレポートする、クラッシュする、失敗する、またはその他の方法で破損している場合は、トラブルシューティングGitLab SASTのSemgrepドキュメントを参照してください。