静的アプリケーションセキュリティテスト(SAST)

note
ホワイトペーパー「A Seismic Shift in Application Security(アプリケーション・セキュリティにおける激震)」では、上位6つの攻撃のうち4つがアプリケーション・ベースであったことを説明しています。ダウンロードして、組織を保護する方法を学んでください。

GitLab CI/CDを使っている場合、Static Application Security Testing(SAST) を使ってソースコードに既知の脆弱性がないかチェックすることができます。どのGitLab階層でもSASTアナライザを実行することができます。アナライザはJSONフォーマットのレポーターをジョブのアーティファクトとして出力します。

GitLab Ultimateでは、SASTの結果も処理されるので、次のことができます:

  • マージリクエストで見ることができます。
  • 承認ワークフローで使用します。
  • セキュリティダッシュボードでレビュアー。

詳細については、階層ごとの機能の概要を参照してください。

SAST results shown in the MR widget

パイプラインは、SAST スキャンと DAST スキャンを含む複数のジョブで構成されます。何らかの理由でジョブの終了に失敗した場合、セキュリティダッシュボードには SAST スキャナの出力は表示されません。例えば、SAST ジョブが終了しても DAST ジョブが失敗すると、セキュリティダッシュボードには SAST の結果は表示されません。失敗すると、アナライザは終了コードを出力します。

要件

SAST はtest ステージで実行され、デフォルトで使用可能です。.gitlab-ci.yml ファイルでステージを再定義すると、test ステージが必要になります。

SASTジョブを実行するには、デフォルトでは、docker またはkubernetes Executorを持つGitLab Runnerが必要です。GitLab.comの共有Runnerを使っている場合、これはデフォルトで有効になっています。

caution
GitLab SASTアナライザはWindowsやamd64以外のCPUアーキテクチャでの実行をサポートしていません。
caution
独自のRunnerを使用する場合は、インストールされているDockerのバージョンが19.03.0ないことを確認してください。詳細はトラブルシューティング情報をご覧ください。

サポートされている言語とフレームワーク

GitLab SASTは様々なプログラミング言語とフレームワークのスキャンをサポートしています。SASTを有効にすると、プロジェクトが複数の言語を使用している場合でも、適切なアナライザーのセットが自動的に実行されます。

SASTでの言語サポートのページについては、カテゴリの方向性のページをご覧ください。

言語 / フレームワークスキャンに使用したアナライザー 最低サポートGitLabバージョン
.NET (すべてのバージョン、C#のみ) GitLabが管理するルールでのSemgrep 15.4
Apex (Salesforce)PMD12.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チャートKubesec13.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マニフェストKubesec12.6
Node.jsNodeJsScan11.1
Objective-C (iOS)MobSF (ベータ)13.5
PHPphpcs-security-audit10.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
  1. SpotBugsベースのアナライザはGradleMavenSBTをサポートしています。また、GradleラッパーGrailsMavenラッパーのような亜種でも使用できます。しかし、SpotBugsはAntベースのプロジェクトに対して使用すると制限があります。AntベースのJavaやScalaプロジェクトには、Semgrepベースのアナライザを使うことをお勧めします。

サポートされるアナライザの終了

GitLabは以下のアナライザーのサポートを終了しました。これらのアナライザはSemgrepベースのアナライザに置き換えられました。

言語 / フレームワークスキャンに使用したアナライザー 最低サポートGitLabバージョンサポート終了GitLabバージョン
.NET Coreセキュリティコードスキャン11.016.0
.NET フレームワークセキュリティコードスキャン13.016.0
Goゴセック10.715.4
Javafind-sec-bugs プラグインによるSpotBugs 10.6 (Maven)、10.8 (Gradle) & 11.9(SBT)15.4
Pythonバンディット10.315.4
リアクトESLintリアクトプラグイン12.515.4
ジャバスクリプトESLint セキュリティプラグイン11.815.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ベースのアナライザーにて

SAST false-positives show in Vulnerability Pages

高度な脆弱性追跡

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 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の階層によって利用できる機能が異なります:

CapabilityIn Free & PremiumIn 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を設定するには、以下の方法があります:

スキャンの実行を強制することで、多数のプロジェクトで 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を有効にして設定するには:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. プロジェクトに.gitlab-ci.yml ファイルがない場合は、[Static Application Security Testing(SAST) ] の行で [Enable SAST] を選択し、そうでない場合は [Configure SAST] を選択します。
  4. カスタム SAST 値を入力します。

    カスタム値は.gitlab-ci.yml ファイルに保存されます。SAST設定ページにないCI/CD変数については、その値はGitLab SASTテンプレートから継承されます。

  5. マージリクエストを作成を選択します。
  6. マージリクエストをレビューし、マージします。

パイプラインにSASTジョブが含まれるようになりました。

デフォルト設定のみでSASTを構成

note
設定ツールは、.gitlab-ci.yml ファイルが存在しないか、最小限の設定ファイルで最適に動作します。複雑なGitLab設定ファイルがある場合、うまく解析されずエラーが発生することがあります。

デフォルトの設定でSASTを有効にして設定するには:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. セキュア > セキュリティ設定を選択します。
  3. SAST] セクションで、[マージリクエストで設定] を選択します。
  4. マージリクエストをレビューしてマージし、SAST を有効にします。

パイプラインにSASTジョブが含まれるようになりました。

SASTジョブのオーバーライド

ジョブ定義をオーバーライドするには (例えば、variablesdependenciesrulesなどのプロパティを変更するには)、オーバーライドする 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を参照してください。

プリコンパイルを使用するには

  1. プロジェクトの作業ディレクトリ内のディレクトリにプロジェクトの依存関係を出力し、そのディレクトリをアーティファクトとして保存します。 artifacts: paths 設定.
  2. 自動コンパイルを無効にするには、COMPILE: "false" CI/CD変数をアナライザーに与えます。
  3. コンパイルステージをアナライザージョブの依存関係として追加します。

アナライザーがコンパイルされたアーティファクトを認識できるようにするには、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.ymlvariables パラメータを使って設定できます。

caution
GitLab セキュリティスキャンツールのすべてのカスタマイズは、デフォルトブランチに変更をマージする前にマージリクエストでテストしてください。これを怠ると、多数の偽陽性を含む予期しない結果をもたらす可能性があります。

次の例では、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_PATHSspec, test, tests, tmpパスに基づく出力から脆弱性を除外します。これは、カンマ区切りのパターン・リストです。パターンには、グロブ (対応するパターンについてはdoublestar.Match を参照)、またはファイルやフォルダのパス (例:doc,spec) を使用できます。親ディレクトリもパターンに一致します。ビルド・ツールが使用する一時ディレクトリは誤検出を生成する可能性があるため、除外する必要がある場合があります。パ ス を除外す る には、 デフ ォ ル ト の除外パ ス を コ ピー し て貼 り 付け、 除外す る 独自のパ ス を追加 します。デフォルトの除外パスを指定しない場合、デフォルトが上書きされ、指定した_パスのみが_SAST スキャンから除外されます。
SEARCH_MAX_DEPTH4SAST はリポジトリを検索して使用されているプログラミング言語を検出し、一致するアナライザを選択します。SEARCH_MAX_DEPTH の値を設定して、検索フェーズの対象となるディレクトリ レベルを指定します。アナライザが選択されると、リポジトリ_全体が_分析されます。
SAST_BANDIT_EXCLUDED_PATHS スキャンから除外するパスをカンマ区切りで指定します。Python のfnmatch 構文を使用; 例:'*/tests/*, */venv/*'.GitLab 15.4 で削除されました
SAST_BRAKEMAN_LEVEL1指定された信頼度以下のBrakeman脆弱性を無視します。整数、1=低い 3=高い。
SAST_FLAWFINDER_LEVEL1Flawfinder の脆弱性を無視します。整数、0=リスクなし、5=高リスク。
SAST_GOSEC_LEVEL0Gosec の脆弱性を無視します。整数, 0=未定義, 1=低, 2=中, 3=高.GitLab 15.4で削除されました。

アナライザーの設定

いくつかのアナライザーはCI/CD変数でカスタマイズすることができます。

CI/CD 変数アナライザ説明
SCAN_KUBERNETES_MANIFESTSKubesec "true" に設定すると、Kubernetesマニフェストをスキャンします。
KUBESEC_HELM_CHARTS_PATHKubesec kubesec がスキャンする Kubernetes マニフェストを生成するためにhelm が使用する Helm チャートへのオプションパス。依存関係が定義されている場合は、必要な依存関係をフェッチするためにbefore_scripthelm dependency build を実行する必要があります。
KUBESEC_HELM_OPTIONSKubesec helm 実行ファイルの追加引数。
COMPILEGosec, 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から、サポートされるバージョンは1117 (デフォルト)です。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_EXTENSIONSphpcs-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 value1 name1=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な値は、 max minmaxmax lessmaxmax more max、 で、スキャンの精度が高く、より多くの脆弱性を検出できる順に定義さ maxれます。maxデフォルト値は max、プロジェクトの規模によっては、スキャンを完了するために多くのメモリと時間を必要とする可能性がある値にmax設定 maxされています。メモリやパフォーマンスのイシューに直面した場合、分析作業レベルを低い値に下げることができます。例:-effort less.

カスタムCI/CD変数

GitLab 12.5で導入されました

前述のSAST設定CI/CD変数に加えて、SAST vendoredテンプレートが使用されている場合、すべてのカスタム変数が基礎となるSASTアナライザイメージに伝搬されます。

実験的特徴

実験的な機能にいち早くアクセスすることができます。実験的な機能は、いつでも追加、削除、または通常の機能に昇格させることができます。

利用可能な実験的機能は以下の通りです:

これらの機能は以前は実験的なものでしたが、現在は一般的に利用可能です:

実験的機能の有効化

実験的機能を有効にするには、.gitlab-ci.yml ファイルに以下を追加します:

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

variables:
  SAST_EXPERIMENTAL_FEATURES: "true"

レポートのJSON形式

SAST は、JSON 形式のレポートファイルを出力します。レポートファイルには、発見された脆弱性の詳細がすべて含まれています。レポートファイルをダウンロードするには、次のいずれかを実行します:

  • CI/CD パイプラインページからファイルをダウンロードします。
  • マージリクエストのパイプラインタブで、artifacts: pathsgl-sast-report.json に設定します。

詳細については、ジョブのアーティファクトのダウンロードを参照してください。

レポート・ファイルのスキーマの詳細については、「SAST レポート・ファイル・スキーマ」を参照してください。

SAST レポート・ファイルの例については、gl-secret-detection-report.json の例を参照してください。

オフライン環境での SAST の実行

インターネットを通じた外部リソースへのアクセスが制限されている、制限されている、あるいは断続的な環境にあるセルフマネージドGitLabインスタンスでは、SASTジョブを正常に実行するためにいくつかの調整が必要です。詳細については、オフライン環境を参照してください。

オフラインSASTの要件

オフライン環境で SAST を使用するには、以下が必要です:

GitLab Runnerのデフォルトのpull_policyalways、つまりランナーはGitLabコンテナレジストリからDockerイメージを引き出そうとします、たとえ内部コピーが利用可能であっても。ローカルで利用可能なDockerイメージのみを使用したい場合は、オフライン環境でGitLab Runnerpull_policyif-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 savedocker loaddocker exportdocker importのDockerドキュメントを参照してください。

カスタム認証局のサポートが必要な場合

カスタム認証局のサポートは以下のバージョンで導入されました。

アナライザバージョン
bandit1 v2.3.0
brakemanv2.1.0
eslint1 v2.9.2
flawfinderv2.3.0
gosec1 v2.5.0
kubesecv2.1.0
nodejs-scanv2.9.5
phpcs-security-auditv2.8.2
pmd-apexv2.1.0
security-code-scanv2.7.3
semgrepv0.0.1
sobelowv2.2.0
spotbugsv2.7.1
  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