正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

SASTのトラブルシューティング

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

以下のトラブルシューティングのシナリオは、お客様のサポート事例から収集されたものです。ここに記載されていない問題が発生した場合、またはこの情報によって問題が解決しない場合は、GitLab Supportページでヘルプを参照してください。

デバッグレベルのログを生成する

デバッグレベルでログを生成しておくと、トラブルシューティングに役立ちます。詳細については、デバッグレベルのログを生成するを参照してください。

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ジョブのログには、根本原因を特定するのに役立つエラーログメッセージが含まれている場合があります。以下に、発生する可能性のある最も一般的なSpotBugsエラーの詳細と推奨されるアクションを示します。

実行可能形式

exec /bin/sh: exec format error` message in job log

GitLab 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パラメータを使用します。パフォーマンス上の理由から、指定されたグロブパターンに対して最大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がスキャン中にメモリ不足になった場合に発生します。

このイシューを解決するには、以下の方法を試すことができます:

  • より低い労力レベルを選択します。
  • CI/CD変数JAVA_OPTSをデフォルトの-XX:MaxRAMPercentage=80を置き換えるように設定します(例: -XX:MaxRAMPercentage=90)。
  • spotbugs-sastジョブで、より大きなRunnerにタグ付けする

解析中の例外

ジョブログに「Exception analyzing … using detector …」という形式のメッセージとJavaのスタックトレースが含まれている場合、これはSASTパイプラインのnot失敗ではありません。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: main

flawfinder.yml:

include:
  - template: Jobs/SAST.gitlab-ci.yml

flawfinder-sast:
  before_script:
    - pip install cvt2utf
    - cvt2utf convert "$PWD" -i cpp

Semgrepの低速化、予期しない結果、またはその他のエラー

Semgrepが遅い場合、誤検出が多すぎる場合、クラッシュする、失敗する、またはその他の問題がある場合は、GitLab SASTのトラブルシューティングに関するSemgrepのドキュメントを参照してください。