SASTアナライザー
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
静的アプリケーションセキュリティテスト (SAST) は、アナライザーを使用してソースコード内の脆弱性を検出します。各アナライザーは、サードパーティのコード分析ツールであるスキャナーのラッパーです。
アナライザーはDockerイメージとして公開され、SASTはこれを使用して各分析専用のコンテナを起動します。各アナライザーの一貫したパフォーマンスを確保するために、最小4 GBのRAMを推奨します。
SASTのデフォルトのイメージはGitLabによって管理されていますが、独自のカスタムイメージを統合することもできます。
各スキャナーに対して、アナライザーは次のことを行います:
- その検出ロジックを公開します。
- その実行を処理します。
- その出力を標準形式に変換します。
公式アナライザー
SASTは、次の公式アナライザーをサポートしています:
gitlab-advanced-sastは、クロスファイルとクロスファンクションのテイント解析を提供し、検出精度を向上させます。Ultimateのみです。kubesecは、Kubesecをベースにしています。デフォルトではオフになっています。KubeSecアナライザーを有効にするを参照してください。pmd-apexは、Apex言語のルールを使用したPMDをベースにしています。semgrepは、GitLab管理ルールを使用したSemgrep OSSエンジンをベースにしています。sobelowは、Sobelowをベースにしています。spotbugsは、Find Sec Bugsプラグイン(Ant、Gradle and wrapper、Grails、Maven and wrapper、SBT)を使用したSpotBugsをベースにしています。
サポート対象バージョン
公式アナライザーは、コンテナイメージとしてリリースされ、GitLabプラットフォームとは異なります。各アナライザーのバージョンは、限られたGitLabのバージョンセットと互換性があります。
アナライザーのバージョンが将来のGitLabのバージョンでサポートされなくなる場合、この変更は事前に発表されます。たとえば、「GitLab 17.0の発表」を参照してください。
各公式アナライザーでサポートされている主要バージョンは、SAST CI/CDテンプレートのジョブ定義に反映されています。以前のGitLabのバージョンでサポートされているアナライザーのバージョンを確認するには、SASTテンプレートファイルの履歴バージョン(GitLab 16.11.0の場合はv16.11.0-eeなど)を選択します。
サポート終了に達したアナライザー
以下のGitLabアナライザーは、サポート終了ステータスに達しており、更新プログラムを受信しません。これらは、GitLabが管理するルールを備えたSemgrepベースのアナライザーに置き換えられました。
GitLab 17.3.1以降にアップグレードすると、1回限りのデータ移行で、サポート終了に達したアナライザーの検出結果が自動的に解決されます。これには、SpotBugsがGroovyコードをスキャンし続けるため、以下に示すすべてのアナライザー(SpotBugsを除く)が含まれます。この移行では、確認または無視していない脆弱性のみが解決され、Semgrepベースのスキャンに自動的に変換された脆弱性には影響しません。詳細については、イシュー444926を参照してください。
| アナライザー | スキャンされる言語 | サポート終了GitLabのバージョン |
|---|---|---|
| Bandit | Python | 15.4 |
| Brakeman | Ruby(Ruby on Railsを含む) | 17.0 |
| ReactおよびSecurityプラグインを備えたESLint | Reactを含むJavaScriptとTypeScript | 15.4 |
| Flawfinder | C、C++ | 17.0 |
| gosec | Go | 15.4 |
| MobSF | AndroidアプリケーションのみのJavaおよびKotlin。iOSアプリケーションのみのObjective-C | 17.0 |
| NodeJsScan | JavaScript(Node.jsのみ) | 17.0 |
| phpcs-security-audit(PHP) | PHP | 17.0 |
| Security Code Scan | .NET(C#、Visual Basicを含む) | 16.0 |
| SpotBugs | Javaのみ1 | 15.4 |
| SpotBugs | KotlinおよびScalaのみ1 | 17.0 |
補足説明:
- SpotBugsは、Groovyでサポートされているアナライザーのままです。Groovyコードが検出された場合にのみアクティブになります。
SASTアナライザーの機能
アナライザーが一般的に利用可能と見なされるためには、少なくとも次の機能をサポートしている必要があります:
Postアナライザー
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
ポストアナライザーは、アナライザーによるレポートの出力を強化します。ポストアナライザーは、レポートの内容を直接変更しません。代わりに、次のような追加のプロパティで結果を強化します:
- CWE。
- 場所追跡フィールド。
Semgrepベースのスキャンへの移行
GitLab高度なSASTアナライザーに加えて、GitLabは複数の言語をカバーするSemgrepベースのアナライザーも提供します。GitLabはアナライザーを維持し、その検出ルールを作成します。これらのルールは、以前のリリースで使用されていた言語固有のアナライザーを置き換えます。
脆弱性の変換
脆弱性管理システムは、可能であれば、古いアナライザーから新しいSemgrepベースの検出結果に脆弱性を自動的に移動します。GitLab高度なSASTアナライザーへの変換については、GitLab高度なSASTドキュメントを参照してください。
これが発生すると、システムは各アナライザーからの脆弱性を単一のレコードに結合します。
ただし、次の場合、脆弱性が一致しない可能性があります:
- 新しいSemgrepベースのルールが、古いアナライザーとは異なる場所、または異なる方法で脆弱性を検出します。
- 以前にSASTアナライザーを無効にしました。これにより、各脆弱性に必要な識別子が記録されなくなるため、自動変換が妨げられる可能性があります。
脆弱性が一致しない場合:
- 元の脆弱性は、脆弱性レポートで「検出されなくなった」とマークされます。
- 次に、Semgrepベースの検出結果に基づいて新しい脆弱性が作成されます。
アナライザーのカスタマイズ
アナライザーの動作をカスタマイズするには、.gitlab-ci.ymlファイルのCI/CD変数を使用します。
カスタムDockerミラーの使用
アナライザーのイメージをホストするために、GitLabレジストリの代わりにカスタムDockerレジストリを使用できます。
前提要件:
- カスタムDockerレジストリは、すべての公式アナライザーのイメージを提供する必要があります。
この変数は、すべてのセキュアアナライザーに影響を与え、SASTのアナライザーだけではありません。
GitLabにカスタムDockerレジストリからアナライザーのイメージをダウンロードさせるには、SECURE_ANALYZERS_PREFIXCI/CD変数でプレフィックスを定義します。
たとえば、以下はSASTにregistry.gitlab.com/security-products/semgrepではなくmy-docker-registry/gitlab-images/semgrepをプルするように指示します:
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SECURE_ANALYZERS_PREFIX: my-docker-registry/gitlab-imagesすべてのデフォルトアナライザーを無効にする
すべてのデフォルトSASTアナライザーを無効にして、カスタムアナライザーのみを有効のままにすることができます。
すべてのデフォルトアナライザーを無効にするには、.gitlab-ci.ymlファイルでCI/CD変数SAST_DISABLEDを"true"に設定します。
例:
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SAST_DISABLED: "true"特定のデフォルトアナライザーを無効にする
アナライザーは、検出されたソースコードの言語に従って自動的に実行されます。ただし、選択したアナライザーを無効にすることができます。
選択したアナライザーを無効にするには、実行を禁止するアナライザーをカンマ区切りの文字列でリストしたCI/CD変数SAST_EXCLUDED_ANALYZERSを設定します。
たとえば、spotbugsアナライザーを無効にするには、次のようにします:
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SAST_EXCLUDED_ANALYZERS: "spotbugs"カスタムアナライザー
CI/CD設定でジョブを定義することにより、独自のアナライザーを提供できます。デフォルトのアナライザーとの一貫性を保つために、カスタムSASTジョブにサフィックス-sastを追加する必要があります。
カスタムアナライザーの例
この例は、Dockerイメージmy-docker-registry/analyzers/csharpに基づいたスキャンジョブを追加する方法を示しています。スクリプト/analyzer runを実行し、SASTレポートgl-sast-report.jsonを出力します。
.gitlab-ci.ymlファイルで以下を定義します:
csharp-sast:
image:
name: "my-docker-registry/analyzers/csharp"
script:
- /analyzer run
artifacts:
reports:
sast: gl-sast-report.json