GitLabのソースコードシークレットスキャン
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
- ステータス: ベータ版
GitLabのソースコードシークレットスキャンは、パイプラインシークレット検出の代替アナライザーです。これは、デフォルトアナライザーと同じsecret_detection CI/CDジョブで実行されますが、汎用シークレット検出を含む追加のシークレット検出を提供します。
GitLabのソースコードシークレットスキャンの違い
このアナライザーは、GitLabが開発した独自のスキャンエンジンを使用します。パターンマッチングに依存する代わりに、非構造化されたシークレットとパスワードを検出するためにヒューリスティックを使用します。標準のGitLabシークレット検出ルールを超える検出も行います。複数のヒューリスティックな技術を組み合わせて誤検出を減らします。
ベータ期間中、アナライザーは以下を提供します:
- 汎用シークレット検出: 非構造化されたシークレットとパスワードを特定します。標準のGitLabシークレット検出ルール範囲を超えるコンテキストシークレットも含まれます。
- 誤検出の削減: 複数のヒューリスティックな技術を組み合わせて、シークレットとその周囲のコンテキストの両方を評価し、スキャン結果のノイズを減らします。
- エンコードされたシークレット検出: プレーンテキストで保存されるのではなく、エンコードされたシークレットを検出します。base64エンコードされた文字列をサポートします。
アナライザーを有効にする
前提条件:
dockerまたはkubernetesexecutorを備えたLinuxベースのRunnerが必要です。GitLab.com用のホストRunnerを使用している場合は、デフォルトで有効になっています。- Windows Runnerはサポートされていません。
- amd64以外のCPUアーキテクチャはサポートされていません。
testステージが含まれた.gitlab-ci.ymlファイルが必要です。
アナライザーを有効にするには、最新のシークレット検出テンプレートを使用し、SECRET_DETECTION_ENABLE_GSS CI/CD変数をtrueに設定します:
include:
- template: Jobs/Secret-Detection.latest.gitlab-ci.yml
secret_detection:
variables:
SECRET_DETECTION_ENABLE_GSS: "true"このアナライザーは、信頼度の高い検出結果のみをレポートします。中および低信頼度の検出結果は、脆弱性レポート内のノイズを最小限に抑えるために意図的にフィルタリングされます。予期されたシークレットが結果に表示されない場合、中または低信頼度でフラグが付けられた可能性が高いです。この動作は、アナライザーがスキャンの信頼レベルの設定をサポートし、脆弱性レポートUIが信頼レベルによる検出結果のフィルタリングをサポートするまで継続されます。すべての検出結果のダウンロード可能なアーティファクトが、イシュー611174で提案されています。
アナライザーを初めて実行する
GitLabのソースコードシークレットスキャンを初めて実行する場合、履歴スキャンを実行する必要があります。このアナライザーはすべてのコミットをスキャンし、最新の検出結果で脆弱性レポートを更新します。これには、パイプラインシークレット検出からの既存の検出結果の引き継ぎも含まれます。
履歴スキャンを実行するには、次の手順に従います。
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左のサイドバーで、ビルド > パイプラインを選択します。
- 新しいパイプラインを選択します。
- CI/CD変数を追加します。
- ドロップダウンリストから変数を選択します。
- 変数キーを入力ボックスに、
SECRET_DETECTION_HISTORIC_SCANと入力します。 - 変数値を入力ボックスに、
trueと入力します。
- 新しいパイプラインを選択します。
代わりに.gitlab-ci.ymlファイルでSECRET_DETECTION_HISTORIC_SCANをtrueに設定した場合、スキャン完了後にその変数を削除してください。そうしないと、すべてのパイプラインがリポジトリの全履歴をスキャンします。
デフォルト設定
アナライザーを有効にすると、以下の設定で実行されます:
| 設定 | デフォルト | 変更方法 |
|---|---|---|
| 汎用シークレット検出 | オン | SECRET_DETECTION_GSS_ENABLE_GENERIC_SECRETSをfalseに設定します。汎用シークレットを参照してください。 |
| 誤検出の削減 | オン | 設定できません。 |
| ルール | デフォルトのGitLabシークレット検出ルールセット | ルールのカスタマイズを参照してください。 |
汎用シークレット
アナライザーが有効になっている場合、汎用シークレット検出はデフォルトで有効です。
汎用シークレット検出を無効にするには、SECRET_DETECTION_GSS_ENABLE_GENERIC_SECRETS CI/CD変数をfalseに設定します:
include:
- template: Jobs/Secret-Detection.latest.gitlab-ci.yml
secret_detection:
variables:
SECRET_DETECTION_ENABLE_GSS: "true"
SECRET_DETECTION_GSS_ENABLE_GENERIC_SECRETS: "false"ルールをカスタマイズする
リポジトリ内の.gitlab/secret-detection-ruleset.tomlファイルを使用して、GitLabのソースコードシークレットスキャンにスキャンのカスタマイズを適用できます。このファイルを作成するには、ルールセット設定ファイルを作成を参照してください。
次のことが可能です。
- デフォルトルールセットからルールを無効にする。
- 独自のルールでデフォルトルールセットを拡張します。新しいルールは、カスタムルール形式に従う必要があります。
- 正規表現またはファイルパスで許可リストを使用してシークレットを無視します。
例えば、デフォルトルールセットを拡張し、正規表現またはファイルパスでシークレットを無視するには、拡張された設定ファイルを指すfileパススルーを使用します。.gitlab/secret-detection-ruleset.tomlファイルにパススルーを追加します:
# .gitlab/secret-detection-ruleset.toml
[secrets]
[[secrets.passthrough]]
type = "file"
target = "gss.toml"
value = "extended-gss-config.toml"拡張された設定ファイルでは、[extend]を使用してデフォルトルールセットを構築し、1つまたは複数の[[allowlists]]テーブルで検出結果を無視します。各許可リストは、regexesでシークレットの値と、pathsでファイルパスを照合できます:
# extended-gss-config.toml
[extend]
# Extends the default packaged ruleset. Do not change the path.
path = "/gitleaks.toml"
[[allowlists]]
description = "Ignore known test values and fixture paths"
regexes = [
'''glpat-[0-9a-zA-Z_\-]{20}''',
]
paths = [
'''spec/fixtures/.*''',
]許可リスト内のregexesとpathsは論理ORで結合されます。検出結果は、そのシークレットがregexesのいずれかに一致するか、そのファイルパスがpathsのいずれかに一致する場合に無視されます。
デフォルトアナライザーから移行する
GitLabのソースコードシークレットスキャンは、デフォルトアナライザーに代わってsecret_detectionジョブで実行されます。SECRET_DETECTION_ENABLE_GSS CI/CD変数がtrueに設定されている場合、GitLab Secret Scanning for Source Codeのみが実行されます。
デフォルトアナライザーから移行するには:
- フィーチャーブランチでGitLabのソースコードシークレットスキャンを有効にします。
- パイプラインを実行し、検出結果をデフォルトアナライザーを使用するスキャンと比較します。
- ルールセットのカスタマイズを確認します。利用可能なオプションについては、ルールをカスタマイズを参照してください。
- 結果に満足したら、デフォルトブランチでアナライザーを有効にします。
移行後の既存の検出結果
GitLabのソースコードシークレットスキャンをデフォルトブランチで有効にすると、両方のアナライザーが検出するシークレットは、このアナライザーによって引き継がれます。これは、これらの検出結果を、デフォルトアナライザーが以前にレポートした脆弱性と照合します。既存の脆弱性レコードは引き継がれ、新しい検出結果として再度レポートされることはありません。
デフォルトアナライザーが以前にレポートした検出結果のうち、GitLabのソースコードシークレットスキャンが検出しないものについては、変更されません。
FIPS対応イメージ
GitLabのソースコードシークレットスキャンがベータ段階である間は、FIPS対応イメージは公開されません。SECRET_DETECTION_IMAGE_SUFFIX CI/CD変数を-fipsに設定すると、イメージをプルできないため、secret_detectionジョブは失敗します。
FIPS対応イメージでスキャンするには、パイプラインシークレット検出にデフォルトアナライザーを使用します。