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

デバッグレベルのロギング

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

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 ファイルがあり、利用可能な各バージョンでの変更がリストアップされています。

exec /bin/sh: exec format error ジョブログのメッセージ

GitLab SASTアナライザは、amd64 CPUアーキテクチャ上での実行のみをサポートしています。このメッセージは、ジョブがarmのような異なるアーキテクチャで実行されていることを示します。

Error response from daemon: error processing tar file: docker-tar: relocation error

このエラーは、SASTジョブを実行するDockerのバージョンが19.03.0 の場合に発生します。Docker19.03.1 以上へのアップデートを検討してください。古いバージョンは影響を受けません。この問題の

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

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

エラー:sast is used for configuration only, and its script should not be executed

これについては、GitLab Secureのトラブルシューティングを参照してください。

rules:exists を使うときの制限

SAST CI テンプレートは rules:exists パラメータを rules:exists使用します。rules:exists パフォーマンス上の理由から、指定されたグロブ・パターンに対して最大数のマッチが行われます。 rules:exists一致数がrules:exists 最大 rules:exists値を超える場合rules:exists 、パラメータは rules:exists trueを返します。リポジトリ内のファイル数によっては、スキャナがプロジェクトをサポートしていなくても SAST ジョブがトリガーされることがあります。このイシューの詳細については、rules:exists ドキュメントを参照してください。

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 エラー:Project couldn't be built

もしジョブがビルドステップで “Project couldn’t be built” というメッセージとともに失敗する場合、それはジョブが SpotBugs にデフォルトツールに含まれていないツールでのビルドを要求している可能性が高いです。SpotBugs のデフォルトツールの一覧は、SpotBugs の asdf dependencies を参照してください。

解決策はプリコンパイルを使うことです。プリコンパイルによって、SpotBugs が必要とするイメージがジョブのコンテナで利用できるようになります。

Flawfinder エンコードエラー

これは、Flawfinder が無効な UTF-8 文字に遭遇したときに発生します。これを修正するには、プロジェクト内のすべてのソースコードを UTF-8 文字エンコーディングに変換してください。これはcvt2utf またはiconv を使ってプロジェクト全体、またはbefore_script 機能を使ってジョブごとに行うことができます。

Semgrepの速度低下、予期しない結果、その他のエラー

Semgrepの速度が遅い、偽陽性や偽陰性のレポーターが多い、クラッシュする、失敗する、その他のエラーが発生する場合は、GitLab SASTのトラブルシューティングのSemgrepのドキュメントを参照してください。