セキュリティレポート取り込みの概要
Vulnerability::Feedback
モデルは現在非推奨となっており、今後のすべての開発において積極的に避けるべきです。現在、何らかのイシューが発生した場合にリバートできるように、フィーチャーパリティでメンテナーされていますが、16.0で削除される予定です。Feedbackモデルに関連するすべての相互作用は、StateTransition
、IssueLink
、MergeRequestLink
モデルに取って代わられます。詳しくはエピックでご覧ください。よく使われる用語
フィードバック
Vulnerabilities::Feedback
クラスのインスタンス。脆弱性に昇格させる前に、ユーザーと脆弱性Findingsのやり取りを記録するために作成されます。このモデルは非推奨で、Deprecate and remove Vulnerabilities::Feedback epicの一部としてGitLab 16.0で削除される予定です。
イシューリンク
Vulnerabilities::IssueLink
クラスのインスタンス。Vulnerability
レコードをIssue
レコードにリンクするために使用されます。
マージリクエストリンク
Vulnerabilities::MergeRequestLink
クラスのインスタンス。Vulnerability
レコードをMergeRequest
レコードにリンクするために使用されます。
セキュリティ検索
Security::Finding
クラスのインスタンス。これらは、特定のSecurity::Scan
で検出された特定の脆弱性のメタデータストアとして機能します。現在、パイプラインセキュリティレポートのパフォーマンスを向上させるために、部分的な発見データを格納しています。このクラスは、ジョブのアーティファクトに依存しないように、ほとんどすべての必要なスキャン情報を格納するように拡張され、近々、Vulnerability::Findings
の代わりに使用される予定です。
セキュリティスキャン
Security::Scan
クラスのインスタンス。セキュリティスキャンはCi::Build
を代表するもので、セキュリティスキャンの結果として出力されたJob Artifact
を GitLab が認め、その結果をSecurity::Finding
レコードとして取り込みます。
状態遷移
Vulnerabilities::StateTransition
クラスのインスタンス。このモデルは脆弱性レコードの状態変化を表します。
脆弱性
Vulnerability
クラスの Vulnerability
インスタンスVulnerability
。A Vulnerability
は、プロジェクトのデフォルトブランチで検出されたVulnerability::Finding
を表します。また、present_on_default_branch
フラグが False の場合は、デフォルトブランチの外部で何らかのやり取りが行われた検出を表します。たとえば、State Transition
が却下された場合、Issue
やMerge Request
にリンクされた場合などです。これらは、Vulnerabilities::Finding
クラスで利用可能な情報に基づいて作成されます。すべてのVulnerability
は、対応するVulnerabilities::Finding
オブジェクトを持たなければ有効にはなりませんが、これはデータベースレベルでは強制されません。
検索
Vulnerabilities::Finding
クラスのインスタンス。同じVulnerability
がプロジェクト内の複数の場所に存在する可能性があるため、Vulnerability::Finding
は、プロジェクトのデフォルトブランチにマージされたセキュリティ発見のデータベースのみの表現です。このクラスは、以前はVulnerabilities::Occurrence
と呼ばれていました。クラス名を変更した後も、大きなテーブルの名前を変更する手間がかかるため、関連するテーブル名はvulnerability_occurrences
のままにしています。
識別子
Vulnerabilities::Identifier
クラスのインスタンス。各脆弱性には、その発見から派生できる一意の識別子が与えられ、同じVulnerability
の複数の発見をそれに応じて相関させることができます。
脆弱性の読み取り
Vulnerabilities::Read
クラスのインスタンス。これは、Vulnerability
とVulnerability::Finding
データの非正規化レコードで、フロントエンドへの脆弱性データのフィルタリングされたクエリのパフォーマンスを向上させるためのものです。
対処法
Vulnerabilities::Remediation
クラスのインスタンス。修復は、検出されたVulnerability
. Vulnerability
NET Framework の既知の解決策の代表です。Vulnerability
これにより、GitLabは特定の.NET Frameworkを解決するための変更を推奨する Vulnerability
ことができます。
セキュリティレポートからの脆弱性作成
前提
- プロジェクトはGitLab CIを使用
- プロジェクトがセキュリティスキャンツールを使用
- データベースに脆弱性はありません。
- すべてのパイプラインがセキュリティスキャンを実行
デフォルト以外のブランチのパイプラインでスキャンを実行
- コードがブランチにプッシュされます。
- GitLab CI はそのブランチに対して新しいパイプラインを実行します。
- パイプラインのステータスは
::Ci::Pipeline.completed_statuses
のいずれかに遷移します。 -
Security::StoreScansWorker
が呼び出され、Security::StoreScansService
をスケジュールします。 -
Security::StoreScansService
はSecurity::StoreGroupedScansService
を呼び出し、ScanSecurityReportSecretsWorker
をスケジュールします。 -
Security::StoreGroupedScansService
コールSecurity::StoreScanService
。 -
Security::StoreScanService
callsSecurity::StoreFindingsService
. -
ScanSecurityReportSecretsWorker
Security::TokenRevocationService
を呼び出し、検出された漏洩鍵を自動的に失効させます。 - この時点では
Security::Finding
のレコードしかありません。プロジェクトのデフォルトブランチにはこのような発見がないからです。
この時点で、Security::Finding
に次のようなことが起こり、Vulnerability
の記録を持つVulnerability::Finding
に昇格させることができます:
デフォルトブランチのパイプラインでスキャンが実行されます。
パイプラインがデフォルトブランチで実行された場合、デフォルトブランチ以外のパイプラインで実行されたスキャンのステップに加えて、以下のステップが実行されます:
-
Security::StoreScansService
が呼び出され、StoreSecurityReportsWorker
をスケジュールします。 -
StoreSecurityReportsWorker
の実行Security::Ingestion::IngestReportsService
。 -
Security::Ingestion::IngestReportsService
は指定されたパイプラインからすべてのレポーターを受け取り、Security::Ingestion::IngestReportService
を呼び出し、Security::Ingestion::MarkAsResolvedService
を呼び出します。 -
Security::Ingestion::IngestReportService
Security::Ingestion::IngestReportSliceService
を呼び出し、レポート・スライスに対していくつかのタスクを実行します。
解散
Dismiss vulnerability
を選択するなど、脆弱性の状態を変更すると、現在以下のことが起こります:
-
dismissal
タイプのFeedback
レコードが作成され、現在の状態が記録されます。 - それらがまだ存在しない場合、
Vulnerability Finding
とpresent_on_default_branch: false
属性を持つVulnerability
が作成され、状態の変更を反映したState Transition
が関連付けられます。
オプションで、Feedback
とState Transition
の両方に記録される状態変更にコメントを追加することができます。
イシューまたはマージリクエストの作成
Create issue
またはCreate merge request
を選択した場合、現在以下のことが起こります:
-
Vulnerabilities::Feedback
レコードが作成されます。フィードバックには、issue
またはmerge request
のfeedback_type
と、NULL
ではないissue_id
またはmerge_request_id
が添付されます。 - これらがまだ存在しない場合、
Vulnerability Finding
とpresent_on_default_branch: false
属性を持つVulnerability
が作成され、Issue Link
またはMerge Request Link
がアクションに関連付けられます。
デフォルトブランチの脆弱性
デフォルトブランチで実行されたスキャンで検出されたセキュリティ所見は、present_on_default_branch: true
属性とそれぞれのVulnerability Finding
レコードを持つVulnerabilities
として保存されます。デフォルトブランチ以外とのやり取りで既に存在するVulnerability
レコードは、次のように更新されます。present_on_default_branch: true
Vulnerabilities
すでに相互作用が行われている場合は、既存のすべてのState Transitions
、Merge Request Links
、Issue Links
、および対応するVulnerability Feedback
が保持されます。
脆弱性リードの作成
Vulnerability::Read
レコードは、Vulnerability::Finding
レコードの作成時に、postgres データベースのトリガーを介して作成され、インジェストプロセスの一部となります。
この作成スタイルは、高速でシームレスであることを意図したものですが、デバッグやメンテナーが難しいことが判明しており、後にアプリケーションレイヤーにマイグレーションされる可能性があります。