パイプラインの脆弱性を表示

GitLab 12.3 で導入されました

パイプラインの脆弱性を見るには

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. Build > Pipelinesを選択します。
  3. リストから、脆弱性をチェックするパイプラインを選択します。
  4. セキュリティタブを選択します。

パイプラインは複数のジョブで構成され、その中にセキュリティスキャンが含まれることがあります。ジョブがartifacts:reportsを使ってセキュリティスキャンレポートを宣言し、作成すると、GitLab はこれらのレポートの内部を解析して取り込み、パイプラインが属するプロジェクトに関連する脆弱性を作成します。

ジョブが終了できなかった場合、パイプラインの脆弱性レポートには、このジョブによって検出された脆弱性の所見は表示されません。たとえば、パイプラインに DAST ジョブと SAST ジョブが含まれているにもかかわらず、DAST ジョブがゼロ以外の終了コードを返して失敗した場合、レポートには DAST の結果は表示されません。

パイプライン脆弱性レポートには、セキュリティ・レポート・アーティファクトに含まれる結果のみが表示されます。このレポートは、成功したすべてのジョブの累積結果を含む脆弱性レポートや、デフォルトブランチにまだ存在しない新しい脆弱性の発見を含むマージリクエストセキュリティウィジェットとは異なります。

note
新しいアドバイザリがアドバイザリデータベースに追加され、デフォルトブランチの最後のパイプラインが古い場合、結果として脆弱性がデフォルトブランチにすでに存在するにもかかわらず、MR ウィジェットに「新規」として表示されることがあります。これは継続的脆弱性スキャンによって解決されます。

パイプライン脆弱性レポートは、パイプラインが完了した後にのみ表示されます。パイプラインにブロック手動ジョブがある場合、パイプラインは手動ジョブを待機し、ブロック手動ジョブが実行されなかった場合、脆弱性は表示されません。

GitLabが結果を表示する前に、すべてのパイプラインレポートの脆弱性調査結果は重複排除されます。

スキャンの詳細

スキャンの詳細には、パイプラインで発見された脆弱性の概要とソースレポートが表示されます。

GitLabはパイプラインに存在するスキャンタイプのアーティファクトごとに1行の情報を表示します。

各スキャンタイプの脆弱性の総数には、棄却された発見も含まれます。レポートの発見件数がScan details の件数と一致しない場合は、Hide dismissedが無効になっていることを確認してください。

セキュリティスキャン出力のダウンロード

セキュリティスキャナーの種類に応じて、ダウンロードできます:

  • セキュリティスキャナのレポートを含む JSON アーティファクト。
  • セキュリティスキャナがスキャンした URL とエンドポイントを含む CSV ファイル。

セキュリティスキャンの出力をダウンロードするには、次の手順に従います:

  1. スキャンの詳細で、[結果のダウンロード] を選択します:
    • JSON ファイルをダウンロードするには、JSON アーティファクトを選択します。
    • CSVファイルをダウンロードするには、「スキャンしたリソースをダウンロード」を選択します。

スキャン結果

すべてのセキュリティレポートアーティファクトの複合結果のリストが表示されます。フィルタは脆弱性レポートフィルタと同様に機能しますが、「深刻度」と「ツール」に限定され、「非表示」トグルが追加されます。

パイプラインでレポートされた脆弱性の所見をレビューするとき、「脆弱性レポート」の「脆弱性の却下」と同様に、1つまたは複数のエントリを選択して却下することができます。

パイプラインに対応するブランチをデフォルトブランチにマージすると、レポートされたすべての発見が脆弱性レポートに統合されます。デフォルトブランチで実行されたパイプラインのスキャン結果は、パイプラインが終了すると組み込まれます。

既存の脆弱性ステータスパイプラインで却下?新たな脆弱性ステータス
すべてはい却下
却下すべて却下
確定なし確定
トリアージが必要(検出)なしトリアージが必要(検出)
解決済みなしトリアージが必要(検出)
該当なし(つまり新しい脆弱性)なしトリアージが必要(検出)

脆弱性の保存期間

GitLab 15.5 で導入されました

GitLabでは、デフォルトブランチ以外のブランチにある脆弱性に対して以下の保持ポリシーがあります。脆弱性は利用できなくなります:

  • 関連する CI ジョブのアーティファクトが期限切れになったとき。
  • 関連する CI ジョブのアーティファクトがロックされている場合でも、パイプラインが作成されてから 90 日後。

脆弱性を表示するには、次のいずれかを実行します:

  • 新しいパイプラインを実行します。
  • 関連するCIジョブのアーティファクトがあればダウンロードします。
note
これはデフォルトブランチに存在する脆弱性には適用されません。

重複排除処理

パイプラインに、同じ種類の複数のセキュリティレポートを作成するジョブが含まれている場合、複数のレポートに同じ脆弱性が存在する可能性があります。このような重複は、カバレッジを高めるために異なるスキャナが使用される場合によく見られますが、単一のレポート内にも存在することがあります。重複排除プロセスにより、管理する必要がある発見件数を減らしながら、脆弱性スキャンの適用範囲を最大化することができます。

スキャンの種類場所、および識別子の1つ以上が同じである場合、所見は別の所見と重複していると見なされます。

脆弱性の場所については、それぞれ独自の定義があるため、スキャンタイプが一致する必要があります。例えば、スタティック・アナライザはファイル・パスと行番号を特定できますが、コンテナ・スキャニング・アナライザはイメージ名を代わりに使用します。

識別子を比較する際、GitLabは重複排除の際にCWEWASC を比較しません。なぜなら、これらは「タイプ識別子」であり、脆弱性のグループを分類するために使用されるからです。これらの識別子を含めると、多くの発見が誤って重複とみなされることになります。2つの調査結果は、いずれの識別子も一致しない場合、一意であるとみなされます。

重複する発見事項の集合では、最初に出現した発見事項が保持され、残りはスキップされます。セキュリティ・レポーターはアルファベット順のファイル・パスで処理され、所見はレポートに表示された順番に順次処理されます。

重複排除の例

  • 例1:識別子と場所が一致、スキャンタイプが不一致。
    • 検索
      • スキャンの種類sast
      • 位置指紋adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 識別子CVE-2022-25510
    • その他の発見
      • スキャンの種類secret_detection
      • 位置指紋adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 識別子CVE-2022-25510
    • 重複排除の結果:スキャンタイプが異なるため重複しません。
  • 例2:場所とスキャンタイプが一致し、タイプ識別子が不一致。
    • 検索
      • スキャンの種類sast
      • 位置指紋adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 識別子CWE-259
    • その他の発見
      • スキャンの種類sast
      • 位置指紋adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 識別子CWE-798
    • 重複排除の結果:CWE 識別子が無視されるため、重複が発生します。
  • 例3:スキャンタイプ、場所、識別子の一致。
    • 検索
      • スキャンの種類container_scanning
      • 位置指紋adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 識別子CVE-2019-12345、CVE-2022-25510、CWE-259
    • その他の発見
      • スキャンの種類container_scanning
      • 位置指紋adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 識別子CVE-2022-25510, CWE-798
    • 重複排除の結果:すべての条件が一致し、タイプ識別子が無視されるため、重複。一致する識別子は 1 つだけでよく、この場合は CVE-2022-25510 です。

上記の例には生のロケーション値は含まれていません。各スキャンタイプは独自のfingerprint_data を定義し、location_fingerprintとして使用されるSHA1 ハッシュを生成するために使用されます。 各スキャンタイプの定義はgitlab/lib/gitlab/ci/reports/security/locationsgitlab/ee/lib/gitlab/ci/reports/security/locationsにあります。