- 要件
- サポートされている言語とフレームワーク
- サポートされるアナライザの終了
- マルチプロジェクトのサポート
- 誤検出
- 高度な脆弱性追跡
- 脆弱性の自動解決
- サポートされるディストリビューション
- 階層ごとの機能概要
- スキャナに貢献する
- 設定
- レポートのJSON形式
- オフライン環境での SAST の実行
- SELinux での SAST の実行
静的アプリケーションセキュリティテスト(SAST)
GitLab CI/CDを使っている場合、Static Application Security Testing(SAST) を使ってソースコードに既知の脆弱性がないかチェックすることができます。どのGitLab階層でもSASTアナライザを実行することができます。アナライザはJSONフォーマットのレポーターをジョブのアーティファクトとして出力します。
GitLab Ultimateでは、SASTの結果も処理されるので、次のことができます:
- マージリクエストで見ることができます。
- 承認ワークフローで使用します。
- セキュリティダッシュボードでレビュアー。
詳細については、階層ごとの機能の概要を参照してください。
パイプラインは、SAST スキャンと DAST スキャンを含む複数のジョブで構成されます。何らかの理由でジョブの終了に失敗した場合、セキュリティダッシュボードには SAST スキャナの出力は表示されません。例えば、SAST ジョブが終了しても DAST ジョブが失敗すると、セキュリティダッシュボードには SAST の結果は表示されません。失敗すると、アナライザは終了コードを出力します。
要件
SAST はtest ステージで実行され、デフォルトで使用可能です。.gitlab-ci.yml ファイルでステージを再定義すると、test ステージが必要になります。
SASTジョブを実行するには、デフォルトでは、docker またはkubernetes Executorを持つGitLab Runnerが必要です。GitLab.comの共有Runnerを使っている場合、これはデフォルトで有効になっています。
19.03.0 でないことを確認してください。詳細はトラブルシューティング情報をご覧ください。サポートされている言語とフレームワーク
GitLab SASTは様々なプログラミング言語とフレームワークのスキャンをサポートしています。SASTを有効にすると、プロジェクトが複数の言語を使用している場合でも、適切なアナライザーのセットが自動的に実行されます。
SASTでの言語サポートのページについては、カテゴリの方向性のページをご覧ください。
| 言語 / フレームワーク | スキャンに使用したアナライザー | 最低サポートGitLabバージョン | 
|---|---|---|
| .NET (すべてのバージョン、C#のみ) | GitLabが管理するルールでのSemgrep | 15.4 | 
| Apex (Salesforce) | PMD | 12.1 | 
| C | GitLabが管理するルールでのSemgrep | 14.2 | 
| C/C++ | フローファインダー | 10.7 | 
| Elixir(フェニックス) | ソベロ | 11.1 | 
| Go | GitLabが管理するルールでのSemgrep | 14.4 | 
| Groovy1 | find-sec-bugs プラグインによるSpotBugs | 11.3 (Gradle) & 11.9 (Maven、SBT) | 
| Helmチャート | Kubesec | 13.1 | 
| Java(任意のビルドシステム) | GitLabが管理するルールでのSemgrep | 14.10 | 
| Java (Android) | MobSF (ベータ) | 13.5 | 
| ジャバスクリプト | GitLabが管理するルールでのSemgrep | 13.10 | 
| Kotlin (Android) | MobSF (ベータ) | 13.5 | 
| Kotlin (General)1 | find-sec-bugs プラグインによるSpotBugs | 13.11 | 
| Kubernetesマニフェスト | Kubesec | 12.6 | 
| Node.js | NodeJsScan | 11.1 | 
| Objective-C (iOS) | MobSF (ベータ) | 13.5 | 
| PHP | phpcs-security-audit | 10.8 | 
| Python | GitLabが管理するルールでのSemgrep | 13.9 | 
| リアクト | GitLabが管理するルールでのSemgrep | 13.10 | 
| Ruby | ブレーキマン | 13.9 | 
| Ruby on Rails | ブレーキマン | 10.3 | 
| Scala (ビルドシステムは問いません) | GitLabが管理するルールでのSemgrep | 16.0 | 
| Scala1 | find-sec-bugs プラグインによるSpotBugs | 11.0(SBT) & 11.9 (Gradle, Maven) | 
| Swift (iOS) | MobSF (ベータ) | 13.5 | 
| タイプスクリプト | GitLabが管理するルールでのSemgrep | 13.10 | 
- SpotBugsベースのアナライザはGradle、Maven、SBTをサポートしています。また、Gradleラッパー、Grails、Mavenラッパーのような亜種でも使用できます。しかし、SpotBugsはAntベースのプロジェクトに対して使用すると制限があります。AntベースのJavaやScalaプロジェクトには、Semgrepベースのアナライザを使うことをお勧めします。
サポートされるアナライザの終了
GitLabは以下のアナライザーのサポートを終了しました。これらのアナライザはSemgrepベースのアナライザに置き換えられました。
| 言語 / フレームワーク | スキャンに使用したアナライザー | 最低サポートGitLabバージョン | サポート終了GitLabバージョン | 
|---|---|---|---|
| .NET Core | セキュリティコードスキャン | 11.0 | 16.0 | 
| .NET フレームワーク | セキュリティコードスキャン | 13.0 | 16.0 | 
| Go | ゴセック | 10.7 | 15.4 | 
| Java | find-sec-bugs プラグインによるSpotBugs | 10.6 (Maven)、10.8 (Gradle) & 11.9(SBT) | 15.4 | 
| Python | バンディット | 10.3 | 15.4 | 
| リアクト | ESLintリアクトプラグイン | 12.5 | 15.4 | 
| ジャバスクリプト | ESLint セキュリティプラグイン | 11.8 | 15.4 | 
| タイプスクリプト | ESLint セキュリティプラグイン | 11.9、13.2でESLintを使用 | 15.4 | 
マルチプロジェクトのサポート
GitLab SASTは複数のプロジェクトを含むリポジトリをスキャンすることができます。
以下のアナライザはマルチプロジェクトをサポートしています:
- バンディット
- ESLint
- ゴセック
- Kubesec
- NodeJsScan
- モブセフ
- PMD
- セキュリティコードスキャン
- セムグレップ
- スポットバグ
- ソベロー
セキュリティコードスキャンのマルチプロジェクトサポートの有効化
セキュリティ コード スキャンでマルチプロジェクトをサポートするには、リポジトリのルートにソリューション (.sln) ファイルが必要です。Solution 形式の詳細については、Microsoft リファレンスSolution (.sln) ファイルを参照してください。
誤検出
- GitLab 14.2でRuby用に導入されました。
- GitLab 15.8 で Go に導入。
GitLab SASTは、他のツールの出力から特定のタイプの偽陽性を特定することができます。これらの結果は脆弱性レポートと 脆弱性ページで偽陽性としてフラグが立てられます。
誤検知は、サポートされている言語と アナライザのサブセットで利用可能です:
- Go、Semgrepベースの解析器
- Ruby、Brakemanベースのアナライザーにて
高度な脆弱性追跡
GitLab 14.2で導入されました。
ソースコードは揮発性です。開発者が変更を加えると、ソースコードがファイル内やファイル間で移動することがあります。セキュリティアナライザは、脆弱性レポートで追跡されている脆弱性をすでにレポートしているかもしれません。これらの脆弱性は、問題のある特定のコード断片にリンクされているので、発見して修正することができます。コードフラグメントが移動する際に確実に追跡されないと、同じ脆弱性が再び報告される可能性があるため、脆弱性管理が難しくなります。
GitLab SASTは高度な脆弱性追跡アルゴリズムを用いて、リファクタリングや関連性のない変更によって同じ脆弱性がファイル内で移動した場合、より正確に特定します。
高度な脆弱性追跡は、サポートされている言語と アナライザのサブセットで利用可能です:
- C 言語、Semgrep ベースのアナライザと Flawfinder アナライザ
- C++、Flawfinderアナライザのみ
- C#、Semgrepベースのアナライザーのみ
- Go、Semgrepベースのアナライザのみ
- Java(mobsf、Semgrepベース、SpotBugsアナライザ
- JavaScript(SemgrepベースおよびNodeJS-Scanアナライザにて
- PHP、phpcs-security-audit アナライザで。
- Python、Semgrepベースのアナライザのみ
- Ruby、Brakemanベースのアナライザーにて
より多くの言語とアナライザーのサポートは、このエピックで追跡されています。
詳細については、極秘プロジェクトhttps://gitlab.com/gitlab-org/security-products/post-analyzers/tracking-calculator をご覧ください。このプロジェクトの内容は、GitLabチームメンバーだけが利用できます。
脆弱性の自動解決
- GitLab 15.9で
sec_mark_dropped_findings_as_resolvedというプロジェクトレベルのフラグで導入されました。- GitLab 15.10ではデフォルトで有効になっています。GitLab.comでは、プロジェクトのフラグを無効にする必要がある場合はサポートに連絡してください。
- GitLab 16.2で機能フラグが削除されました。
まだ関連性のある脆弱性に集中できるように、GitLab SASTは以下の場合に脆弱性を自動的に解決します:
- 定義済みのルールを無効にした場合
- デフォルトのルールセットからルールを削除します。
自動解決は、Semgrepベースのアナライザからの発見に対してのみ利用できます。脆弱性管理システムは、自動解決された脆弱性にコメントを残すため、脆弱性の履歴記録を残すことができます。
後でルールを再度有効にすると、トリアージのために発見が再開されます。
サポートされるディストリビューション
デフォルトのスキャナ・イメージは、サイズとメンテナーを考慮して、アルパイン・イメージをベースに構築されています。
FIPS対応イメージ
GitLab 14.10で導入されました。
GitLab は、Red Hat UBIベースイメージをベースに、FIPS 140 Validated 暗号モジュールを使用するイメージバージョンを提供します。FIPS 対応のイメージを使用するには、以下のいずれかの方法があります:
- 
SAST_IMAGE_SUFFIXを-fipsに設定します。
- デフォルトの画像名に拡張子-fipsを追加します。
使用例:
variables:
  SAST_IMAGE_SUFFIX: '-fips'
include:
  - template: Security/SAST.gitlab-ci.yml
FIPS準拠のイメージは、Semgrepベースのアナライザでのみ使用できます。
SASTをFIPS準拠の方法で使用するには、他のアナライザの実行を除外する必要があります。
階層ごとの機能概要
以下の表に示すように、GitLabの階層によって利用できる機能が異なります:
| Capability | In Free & Premium | In Ultimate | :—————————————————————- - | :——————– | :——————- | Automatically scan code withappropriate analyzers | ** | チェック**・サークル | SAST スキャナの設定 | {check-circle} | チェック・サークル | SAST 設定のカスタマイズ | {check-circle} | チェック・サークル[ | JSONレポートの](#reports-json-format)ダウンロード|{チェック-サークル} | チェック・サークル | マージリクエストウィジェットで新しい発見を見る | {dotted-circle} | 脆弱性の管理[ | 脆弱性の管理](../vulnerabilities/index.md)|{dotted-circle}|{check-circle}|{check-circle}をチェックします。 | セキュリティダッシュボードにアクセス | セキュリティダッシュボードにアクセスする | {check-circle** | を**使用して SAST を設定します。 | UI を使用して SAST を設定する | {check-circle}。 | をチェックします。[ | SASTルールセットのカスタマイズ](customize_rulesets.md) ** | チェック**サークル[ | 偽陽性の検出](#false-positive-detection)|{dotted-circle}|{check-circle}|SASTルールセットのカスタマイズ** | チェック**サークル[ | 移動した脆弱性の追跡](#advanced-vulnerability-tracking) |{dotted-circle} | {check-circle}。** | チェック**・サークル | 
スキャナに貢献する
他のセキュリティスキャナをGitLabにインテグレーションする方法については、セキュリティスキャナのインテグレーションドキュメントをご覧ください。
設定
SASTスキャンはCI/CDパイプラインで実行されます。GitLab が管理する CI/CD テンプレートをパイプラインに追加すると、適切なSAST アナライザーが自動的にコードをスキャンし、結果をSAST レポートのアーティファクトとして保存します。
プロジェクトにSASTを設定するには、以下の方法があります:
- AutoDevOpsが提供するAuto SASTを使用します。
- CI/CDのYAMLにSASTを設定します。
- UI を使用して SAST を設定します。
スキャンの実行を強制することで、多数のプロジェクトで SAST を有効にできます。
CI/CDのYAMLでSASTを設定します。
SAST を有効にするには、SAST.gitlab-ci.yml テンプレートをインクルードします。テンプレートは GitLab のインストールの一部として提供されます。
.gitlab-ci.yml ファイルに以下を追加します:
include:
  - template: Jobs/SAST.gitlab-ci.yml
このテンプレートは、CI/CDパイプラインにSASTジョブを作成し、プロジェクトのソースコードに脆弱性がないかスキャンします。
結果はSAST レポートアーティファクトとして保存され、後でダウンロードして分析することができます。ダウンロードする際には、常に最新の SAST アーティファクトが使用されます。
UI を使用した SAST の設定
UIを使用して、デフォルト設定またはカスタマイズのいずれかでSASTを有効にして設定することができます。使用できる方法は、GitLabライセンスの階層によって異なります。
カスタマイズによるSASTの設定
GitLab 16.2のUIから個々のSASTアナライザーの設定オプションを削除しました。
.gitlab-ci.yml 設定ツールは、.gitlab-ci.yml ファイルが存在しないか、最小限の設定ファイルで最もよく動作します。複雑なGitLab設定ファイルがある場合、正常に解析されずエラーが発生する可能性があります。
カスタマイズしたSASTを有効にして設定するには:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- セキュア > セキュリティ設定を選択します。
- プロジェクトに.gitlab-ci.ymlファイルがない場合は、[Static Application Security Testing(SAST) ] の行で [Enable SAST] を選択し、そうでない場合は [Configure SAST] を選択します。
- 
カスタム SAST 値を入力します。 カスタム値は .gitlab-ci.ymlファイルに保存されます。SAST設定ページにないCI/CD変数については、その値はGitLab SASTテンプレートから継承されます。
- マージリクエストを作成を選択します。
- マージリクエストをレビューし、マージします。
パイプラインにSASTジョブが含まれるようになりました。
デフォルト設定のみでSASTを構成
.gitlab-ci.yml ファイルが存在しないか、最小限の設定ファイルで最適に動作します。複雑なGitLab設定ファイルがある場合、うまく解析されずエラーが発生することがあります。デフォルトの設定でSASTを有効にして設定するには:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- セキュア > セキュリティ設定を選択します。
- SAST] セクションで、[マージリクエストで設定] を選択します。
- マージリクエストをレビューしてマージし、SAST を有効にします。
パイプラインにSASTジョブが含まれるようになりました。
SASTジョブのオーバーライド
ジョブ定義をオーバーライドするには (例えば、variables 、dependencies 、rulesなどのプロパティを変更するには)、オーバーライドする SAST ジョブと同じ名前のジョブを宣言します。この新しいジョブをテンプレートインクルードの後に配置し、その下に追加のキーを指定します。例えば、これはspotbugs アナライザでFAIL_NEVER を有効にします:
include:
  - template: Security/SAST.gitlab-ci.yml
spotbugs-sast:
  variables:
    FAIL_NEVER: 1
マイナーイメージバージョンへのピン留め
GitLab が管理する CI/CD テンプレートはメジャーバージョンを指定し、そのメジャーバージョン内の最新のアナライザーリリースを自動的にプルします。
場合によっては、特定のバージョンを使う必要があるかもしれません。例えば、後のリリースのリグレッションを避ける必要があるかもしれません。
自動更新の動作をオーバーライドするには、SAST.gitlab-ci.yml テンプレート をインクルードした後、CI/CD 設定ファイルにSAST_ANALYZER_IMAGE_TAG CI/CD 変数を設定してください。
この変数は特定のジョブ内でのみ設定してください。この変数をトップレベルで設定すると、設定したバージョンが他の SAST アナライザで使用されます。
タグを設定できます:
- 
3のようなメジャーバージョンです。パイプラインは、このメジャーバージョン内でリリースされたマイナーバージョンやパッチアップデートを使用します。
- 
3.7のようなマイナーバージョン。パイプラインは、マイナーバージョン内でリリースされたパッチアップデートを使用します。
- 
3.7.0のようなパッチバージョン。パイプラインはアップデートを受け取りません。
この例では、semgrep アナライザの特定のマイナーバージョンと、brakeman アナライザの特定のパッチバージョンを使用しています:
include:
  - template: Security/SAST.gitlab-ci.yml
semgrep-sast:
  variables:
    SAST_ANALYZER_IMAGE_TAG: "3.7"
brakeman-sast:
  variables:
    SAST_ANALYZER_IMAGE_TAG: "3.1.1"
CI/CD 変数を使用して非公開リポジトリの認証情報を渡す例
解析ツールによっては、プロジェクトの依存関係をダウンロードしなければ解析できないものもあります。そのような依存関係は Git の非公開リポジトリにあることもあり、ダウンロードするにはユーザー名やパスワードなどの認証情報が必要になります。アナライザーによっては、そのような認証情報をカスタム CI/CD 変数で提供することができます。
CI/CD 変数を使ってユーザー名とパスワードを非公開の Go リポジトリに渡す例
Go プロジェクトが非公開モジュールに依存している場合、HTTPS で認証を提供する方法については非公開プロジェクトからモジュールを取得するを参照してください。
~/.netrc 経由で認証情報を指定するには、before_script に以下を記述します:
gosec-sast:
  before_script:
    - |
      cat <<EOF > ~/.netrc
      machine gitlab.com
      login $CI_DEPLOY_USER
      password $CI_DEPLOY_PASSWORD
      EOF
CI/CD 変数を使用してユーザー名とパスワードを非公開 Maven リポジトリに渡します。
非公開 Maven リポジトリにログイン認証が必要な場合は、MAVEN_CLI_OPTS CI/CD 変数を使用できます。
非公開 Maven リポジトリの使用方法の詳細をお読みください。
Kubesecアナライザーの有効化
GitLab 12.6 で導入されました。
Kubesec アナライザーを有効にするにはSCAN_KUBERNETES_MANIFESTS を"true" に設定する必要があります。.gitlab-ci.yml で定義します:
include:
  - template: Security/SAST.gitlab-ci.yml
variables:
  SCAN_KUBERNETES_MANIFESTS: "true"
プリコンパイル
ほとんどのGitLab SASTアナライザは、最初にコンパイルすることなくソースコードを直接スキャンします。しかし、技術的な理由から、コンパイルされたコードしかスキャンできないアナライザもあります。
デフォルトでは、これらのアナライザは自動的に依存関係を取得し、コードをスキャンできるようにコンパイルしようとします。自動コンパイルは、次のような場合に失敗することがあります:
- プロジェクトにカスタムビルド設定が必要な場合。
- アナライザーに組み込まれていない言語バージョンを使用している場合。
このようなイシューを解決するには、アナライザーのコンパイル・ステップをスキップし、代わりにパイプラインの早いステージからアーティファクトを直接提供します。この方法を_プリコンパイルと_呼びます。
プリコンパイルは、COMPILE CI/CD 変数をサポートするアナライザーで利用できます。現在のリストについてはAnalyzer settingsを参照してください。
プリコンパイルを使用するには
- プロジェクトの作業ディレクトリ内のディレクトリにプロジェクトの依存関係を出力し、そのディレクトリをアーティファクトとして保存します。 artifacts: paths設定.
- 自動コンパイルを無効にするには、COMPILE: "false"CI/CD変数をアナライザーに与えます。
- コンパイルステージをアナライザージョブの依存関係として追加します。
アナライザーがコンパイルされたアーティファクトを認識できるようにするには、vendored ディレクトリへのパスを明示的に指定する必要があります。この設定はアナライザーによって異なります。Maven プロジェクトの場合、MAVEN_REPO_PATH を使用できます。利用可能なオプションの完全なリストについては、アナライザーの設定を参照してください。
以下の例では、Maven プロジェクトをプリコンパイルし、SpotBugs SAST アナライザーに提供しています:
stages:
  - build
  - test
include:
  - template: Security/SAST.gitlab-ci.yml
build:
  image: maven:3.6-jdk-8-slim
  stage: build
  script:
    - mvn package -Dmaven.repo.local=./.m2/repository
  artifacts:
    paths:
      - .m2/
      - target/
spotbugs-sast:
  dependencies:
    - build
  variables:
    MAVEN_REPO_PATH: $CI_PROJECT_DIR/.m2/repository
    COMPILE: "false"
  artifacts:
    reports:
      sast: gl-sast-report.json
利用可能な CI/CD 変数
SAST は.gitlab-ci.yml のvariables パラメータを使って設定できます。
次の例では、SEARCH_MAX_DEPTH 変数をオーバーライドする SAST テンプレートを10 に含めます。テンプレートはパイプライン設定の前に評価されるため、変数の最後の記述が優先されます。
include:
  - template: Security/SAST.gitlab-ci.yml
variables:
  SEARCH_MAX_DEPTH: 10
カスタム認証局
カスタム作成者を信頼するには、ADDITIONAL_CA_CERT_BUNDLE SAST 環境で信頼したい CA 証明書のバンドルに変数を ADDITIONAL_CA_CERT_BUNDLE設定します。ADDITIONAL_CA_CERT_BUNDLE この ADDITIONAL_CA_CERT_BUNDLE値には、X.509 PEM公開鍵証明書のテキスト表現を含める必要があります。例えば、.gitlab-ci.yml ファイルでこの値を設定するには、以下を使用します:
variables:
  ADDITIONAL_CA_CERT_BUNDLE: |
      -----BEGIN CERTIFICATE-----
      MIIGqTCCBJGgAwIBAgIQI7AVxxVwg2kch4d56XNdDjANBgkqhkiG9w0BAQsFADCB
      ...
      jWgmPqF3vUbZE0EyScetPJquRFRKIesyJuBFMAs=
      -----END CERTIFICATE-----
ADDITIONAL_CA_CERT_BUNDLE 値は、UI のカスタム変数として設定することもできます。file として設定する場合は証明書へのパスが必要で、変数として設定する場合は証明書のテキスト表現が必要です。
Dockerイメージ
以下はDockerイメージ関連のCI/CD変数です。
| CI/CD 変数 | 説明 | 
|---|---|
| SECURE_ANALYZERS_PREFIX | デフォルトのイメージ(プロキシ)を提供するDockerレジストリの名前をオーバーライドします。アナライザのカスタマイズについてはこちらをご覧ください。 | 
| SAST_EXCLUDED_ANALYZERS | 実行しないデフォルトイメージの名前。アナライザのカスタマイズについて詳しく読む | 
| SAST_ANALYZER_IMAGE_TAG | アナライザー・イメージのデフォルト・バージョンを上書きします。アナライザー・イメージのバージョンの固定については、こちらをお読みください。 | 
| SAST_IMAGE_SUFFIX | イメージ名に追加されるサフィックス。 -fipsに設定すると、スキャンにFIPS-enabledイメージが使用されます。詳細はFIPS-enabled imagesをご覧ください。GitLab 14.10 で導入されました。 | 
脆弱性フィルター
解析ツールによっては、指定した閾値以下の脆弱性をフィルタリングすることができます。
| CI/CD 変数 | デフォルト値 | 説明 | 
|---|---|---|
| SAST_EXCLUDED_PATHS | spec, test, tests, tmp | パスに基づく出力から脆弱性を除外します。これは、カンマ区切りのパターン・リストです。パターンには、グロブ (対応するパターンについては doublestar.Matchを参照)、またはファイルやフォルダのパス (例:doc,spec) を使用できます。親ディレクトリもパターンに一致します。ビルド・ツールが使用する一時ディレクトリは誤検出を生成する可能性があるため、除外する必要がある場合があります。パ ス を除外す る には、 デフ ォ ル ト の除外パ ス を コ ピー し て貼 り 付け、 除外す る 独自のパ ス を追加 します。デフォルトの除外パスを指定しない場合、デフォルトが上書きされ、指定した_パスのみが_SAST スキャンから除外されます。 | 
| SEARCH_MAX_DEPTH | 4 | SAST はリポジトリを検索して使用されているプログラミング言語を検出し、一致するアナライザを選択します。 SEARCH_MAX_DEPTHの値を設定して、検索フェーズの対象となるディレクトリ レベルを指定します。アナライザが選択されると、リポジトリ_全体が_分析されます。 | 
| SAST_BANDIT_EXCLUDED_PATHS | スキャンから除外するパスをカンマ区切りで指定します。Python の fnmatch構文を使用; 例:'*/tests/*, */venv/*'.GitLab 15.4 で削除されました。 | |
| SAST_BRAKEMAN_LEVEL | 1 | 指定された信頼度以下のBrakeman脆弱性を無視します。整数、1=低い 3=高い。 | 
| SAST_FLAWFINDER_LEVEL | 1 | Flawfinder の脆弱性を無視します。整数、0=リスクなし、5=高リスク。 | 
| SAST_GOSEC_LEVEL | 0 | Gosec の脆弱性を無視します。整数, 0=未定義, 1=低, 2=中, 3=高.GitLab 15.4で削除されました。 | 
アナライザーの設定
いくつかのアナライザーはCI/CD変数でカスタマイズすることができます。
| CI/CD 変数 | アナライザ | 説明 | 
|---|---|---|
| SCAN_KUBERNETES_MANIFESTS | Kubesec | "true"に設定すると、Kubernetesマニフェストをスキャンします。 | 
| KUBESEC_HELM_CHARTS_PATH | Kubesec | kubesecがスキャンする Kubernetes マニフェストを生成するためにhelmが使用する Helm チャートへのオプションパス。依存関係が定義されている場合は、必要な依存関係をフェッチするためにbefore_scriptでhelm dependency buildを実行する必要があります。 | 
| KUBESEC_HELM_OPTIONS | Kubesec | helm実行ファイルの追加引数。 | 
| COMPILE | Gosec, SpotBugs | falseに設定すると、プロジェクトのコンパイルと依存関係の取得が無効になります。GitLab 13.1 のSpotBugsアナライザーと GitLab 14.0 のGosecアナライザーに導入されました。 | 
| ANT_HOME | スポットバグ | ANT_HOME変数。 | 
| ANT_PATH | スポットバグ | ant実行ファイルへのパス。 | 
| GRADLE_PATH | スポットバグ | gradle実行ファイルへのパス。 | 
| JAVA_OPTS | スポットバグ | java実行ファイルの追加引数。 | 
| JAVA_PATH | スポットバグ | java実行ファイルへのパス。 | 
| SAST_JAVA_VERSION | スポットバグ | どのJavaバージョンを使うかGitLab 15.0から、サポートされるバージョンは 11と17(デフォルト)です。GitLab 15.0より前のバージョンでは、8(デフォルト)と11。 | 
| MAVEN_CLI_OPTS | スポットバグ | mvnまたはmvnw実行ファイルへの追加引数。 | 
| MAVEN_PATH | スポットバグ | mvn実行ファイルへのパス。 | 
| MAVEN_REPO_PATH | スポットバグ | Maven ローカルリポジトリへのパス ( maven.repo.localプロパティのショートカット)。 | 
| SBT_PATH | スポットバグ | sbt実行ファイルへのパス。 | 
| FAIL_NEVER | スポットバグ | 1に設定すると、コンパイルの失敗を無視します。 | 
| SAST_GOSEC_CONFIG | ゴセック | 警告削除GitLab 14.0 では削除されました - 代わりにカスタムルールセットを使用してください。Gosec用の設定へのパス(オプション)。 | 
| PHPCS_SECURITY_AUDIT_PHP_EXTENSIONS | phpcs-security-audit | カンマ区切りの PHP 拡張モジュールの一覧。 | 
| SAST_SEMGREP_METRICS | セムグレップ | 匿名化されたスキャンメトリクスのr2cへの送信を無効にするには、 "false"に設定します。デフォルト:true。GitLab 14.0で導入されました。GitLabチームメンバーはこの機密イシューで詳細を見ることができます:https://gitlab.com/gitlab-org/gitlab/-/issues/330565. | 
| SAST_SCANNER_ALLOWED_CLI_OPTS | セムグレップ | スキャンオペレーションを実行する際に、基盤となるセキュリティスキャナに渡される CLI オプション(値を持つ引数、またはフラグ)。使用できるオプションは限られています。CLI オプションとその値は、空白または等号 ( =) 文字で区切ります。name1 value1name1=value1複数のオプションは、空白で区切る必要があります。例:name1 value1 name2 value2。GitLab 15.3で導入されました。 | 
セキュリティスキャナーの設定
SASTアナライザは内部でOSSセキュリティスキャナを使用して分析を行います。セキュリティスキャナの推奨設定を設定していますので、チューニングの心配はありません。しかし、稀にデフォルトのスキャナ設定がお客様の要件に合わない場合があります。
スキャナの動作をある程度カスタマイズできるようにするために、基礎となるスキャナにフラグの限定されたセットを追加することができます。フラグはSAST_SCANNER_ALLOWED_CLI_OPTS CI/CD 変数で指定します。これらのフラグはスキャナのCLIオプションに追加されます。
| アナライザ | CLIオプション | 説明 | 
|---|---|---|
| セムグレップ | --max-memory | 単一のファイルでルールを実行する際に使用する最大システムメモリを設定します。単位はMBです。 | 
| フローファインダー | --neverignore | コメント中に “ignore” 指示があっても、セキュリティイシューを無視しないようにします。このオプションを追加すると、自動的には解決できない脆弱性の発見が、アナライザによって追加的に検出される可能性が高くなります。 | 
| SpotBugs | -effort | 分析作業レベルを設定します。有効 maxな値は、maxminmax、maxlessmax、maxmoremax、 で、スキャンの精度が高く、より多くの脆弱性を検出できる順に定義さmaxれます。maxデフォルト値はmax、プロジェクトの規模によっては、スキャンを完了するために多くのメモリと時間を必要とする可能性がある値にmax設定maxされています。メモリやパフォーマンスのイシューに直面した場合、分析作業レベルを低い値に下げることができます。例:-effort less. | 
カスタムCI/CD変数
GitLab 12.5で導入されました。
前述のSAST設定CI/CD変数に加えて、SAST vendoredテンプレートが使用されている場合、すべてのカスタム変数が基礎となるSASTアナライザイメージに伝搬されます。
実験的特徴
実験的な機能にいち早くアクセスすることができます。実験的な機能は、いつでも追加、削除、または通常の機能に昇格させることができます。
利用可能な実験的機能は以下の通りです:
- MobSFアナライザを使用してiOSおよびAndroidアプリのスキャンを有効にします。
これらの機能は以前は実験的なものでしたが、現在は一般的に利用可能です:
- 
Semgrepアナライザーの eslint.detect-object-injection。偽陽性の割合が高いため、無効にしました。- このルールは15.10ではデフォルトで無効になっています。
 
実験的機能の有効化
実験的機能を有効にするには、.gitlab-ci.yml ファイルに以下を追加します:
include:
  - template: Security/SAST.gitlab-ci.yml
variables:
  SAST_EXPERIMENTAL_FEATURES: "true"
レポートのJSON形式
SAST は、JSON 形式のレポートファイルを出力します。レポートファイルには、発見された脆弱性の詳細がすべて含まれています。レポートファイルをダウンロードするには、次のいずれかを実行します:
- CI/CD パイプラインページからファイルをダウンロードします。
- マージリクエストのパイプラインタブで、artifacts: pathsをgl-sast-report.jsonに設定します。
詳細については、ジョブのアーティファクトのダウンロードを参照してください。
レポート・ファイルのスキーマの詳細については、「SAST レポート・ファイル・スキーマ」を参照してください。
SAST レポート・ファイルの例については、gl-secret-detection-report.json の例を参照してください。
オフライン環境での SAST の実行
インターネットを通じた外部リソースへのアクセスが制限されている、制限されている、あるいは断続的な環境にあるセルフマネージドGitLabインスタンスでは、SASTジョブを正常に実行するためにいくつかの調整が必要です。詳細については、オフライン環境を参照してください。
オフラインSASTの要件
オフライン環境で SAST を使用するには、以下が必要です:
- GitLab Runner with thedockerorkubernetesexecutor.
- ローカルで利用可能なSASTアナライザーイメージのコピーがあるDockerコンテナレジストリ。
- パッケージの証明書チェックの設定(オプション)。
GitLab Runnerのデフォルトのpull_policy はalways、つまりランナーはGitLabコンテナレジストリからDockerイメージを引き出そうとします、たとえ内部コピーが利用可能であっても。ローカルで利用可能なDockerイメージのみを使用したい場合は、オフライン環境でGitLab Runnerpull_policy をif-not-present に設定することができます。しかし、オフライン環境でない場合は、CI/CDパイプラインで更新されたスキャナを使用できるようにするため、プルポリシー設定をalways に保つことをお勧めします。
GitLab SASTアナライザーイメージをDockerレジストリ内で利用可能にします。
サポートされているすべての言語とフレームワークでSASTを使用するには、registry.gitlab.com から以下のデフォルトのSASTアナライザーイメージをローカルのDockerコンテナレジストリにインポートしてください:
registry.gitlab.com/security-products/brakeman:3
registry.gitlab.com/security-products/flawfinder:3
registry.gitlab.com/security-products/kubesec:3
registry.gitlab.com/security-products/nodejs-scan:3
registry.gitlab.com/security-products/phpcs-security-audit:3
registry.gitlab.com/security-products/pmd-apex:3
registry.gitlab.com/security-products/security-code-scan:3
registry.gitlab.com/security-products/semgrep:3
registry.gitlab.com/security-products/sobelow:3
registry.gitlab.com/security-products/spotbugs:3
DockerイメージをローカルのオフラインDockerレジストリにインポートするプロセスは、ネットワークセキュリティポリシーによって異なります。外部リソースのインポートや一時的なアクセスが可能な承認者プロセスを見つけるには、IT担当者に相談してください。これらのスキャナは定期的に新しい定義に更新されます。
Dockerイメージをファイルとして保存して転送する方法の詳細については、docker save、docker load、docker export、docker importのDockerドキュメントを参照してください。
カスタム認証局のサポートが必要な場合
カスタム認証局のサポートは以下のバージョンで導入されました。
| アナライザ | バージョン | 
|---|---|
| bandit1 | v2.3.0 | 
| brakeman | v2.1.0 | 
| eslint1 | v2.9.2 | 
| flawfinder | v2.3.0 | 
| gosec1 | v2.5.0 | 
| kubesec | v2.1.0 | 
| nodejs-scan | v2.9.5 | 
| phpcs-security-audit | v2.8.2 | 
| pmd-apex | v2.1.0 | 
| security-code-scan | v2.7.3 | 
| semgrep | v0.0.1 | 
| sobelow | v2.2.0 | 
| spotbugs | v2.7.1 | 
- これらのアナライザはGitLab 14.8で非推奨となり、GitLab 15.4でサポート終了となりました。
ローカルのSASTアナライザを使用するようにSAST CI/CD変数を設定します。
以下の設定を.gitlab-ci.yml ファイルに追加します。SECURE_ANALYZERS_PREFIX 、ローカルのDockerコンテナレジストリを参照するように置き換える必要があります:
include:
  - template: Security/SAST.gitlab-ci.yml
variables:
  SECURE_ANALYZERS_PREFIX: "localhost:5000/analyzers"
これでSASTジョブは、SASTアナライザのローカルコピーを使用して、インターネットにアクセスしなくてもコードをスキャンし、セキュリティレポートを生成できるようになります。
パッケージの証明書チェックの設定
SAST ジョブがパッケージマネージャを呼び出す場合、その証明書検証を設定する必要があります。オフライン環境では、外部ソースによる証明書検証はできません。自己署名証明書を使用するか、証明書検証を無効にします。手順については、パッケージマネージャのドキュメントを参照してください。
SELinux での SAST の実行
デフォルトでは、SASTアナライザーはSELinux上でホストされているGitLabインスタンスでサポートされています。SELinux上でホストされているランナーは権限が制限されているため、オーバーライドされたSASTジョブで before_script 。
 

