正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

セキュリティメトリクスとKPI

  • プラン: Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

このドキュメントは、GitLabセキュリティメトリクスおよびKPIソリューションコンポーネントのインストール、設定、およびユーザーガイドを説明します。このセキュリティソリューションコンポーネントは、ビジネスユニット、時間範囲、脆弱性の重大度、およびセキュリティタイプ別に表示できるメトリクスとKPIを提供します。PDFドキュメントを使用して、月次または四半期ベースでセキュリティ対策状況のスナップショットを提供できます。データはSplunkのダッシュボードを使用して可視化されます。

セキュリティメトリクスとKPI

このソリューションは、GitLabプロジェクトまたはグループからGraphQL APIを使用して脆弱性データをエクスポートし、HTTP Event Collector(HEC)を介してSplunkに送信し、セキュリティメトリクスの可視化のためにすぐに使えるダッシュボードを含みます。エクスポート処理は、GitLab CI/CDパイプラインとして定期的に実行されるように設計されています。

はじめに

ソリューションコンポーネントをダウンロードする

  1. アカウントチームから招待コードを取得します。
  2. 招待コードを使用して、ソリューションコンポーネントのウェブストアからソリューションコンポーネントをダウンロードしてください。

ソリューションコンポーネントプロジェクトをセットアップする

  1. このexporterをホストする新しいGitLabプロジェクトを作成します。
  2. 提供されたファイルをプロジェクトにコピーします:
    • export_vulns.py
    • send_to_splunk.py
    • requirements.txt
    • .gitlab-ci.yml
  3. プロジェクトの設定で必要なCI/CD変数を設定します。
  4. パイプラインスケジュールを設定します(例: 毎日または毎週)。

仕組み

このソリューションは、2つの主要なコンポーネントで構成されています:

  1. GitLabセキュリティダッシュボードからデータをフェッチする脆弱性exporter
  2. エクスポートされたデータを処理し、Splunk HECに送信するSplunkインジェスター

パイプラインは2つのパイプラインステージで実行されます:

  1. extract: 脆弱性をフェッチし、CSVに保存します
  2. ingest: 脆弱性データをSplunkに送信します

設定

必須CI/CD変数

変数説明例の値
SCOPE脆弱性スキャンのターゲットスコープgroup:security/appsecまたはsecurity/my-project
GRAPHQL_API_TOKENAPIアクセス権を持つGitLabパーソナルアクセストークンglpat-XXXXXXXXXXXXXXXX
GRAPHQL_API_URLGitLab GraphQL API URLhttps://gitlab.com/api/graphql
SPLUNK_HEC_TOKENSplunk HTTP Event Collectorトークン11111111-2222-3333-4444-555555555555
SPLUNK_HEC_URLSplunk HECエンドポイントURLhttps://splunk.company.com:8088/services/collector

オプションのCI/CD変数

変数説明例の値デフォルト
SEVERITY_FILTERカンマ区切りの重大度レベルのリストCRITICAL,HIGH,MEDIUMすべての重大度
VULN_TIME_WINDOW脆弱性収集の時間枠24h7d、またはall24h

スコープの設定

SCOPE変数は、スキャンするプロジェクトまたはグループを決定します:

  • プロジェクトの場合: mygroup/myproject
  • グループの場合: group:mygroup/subgroup
  • インスタンス全体の場合: instance

重大度フィルターの例

有効な重大度レベル:

  • CRITICAL
  • HIGH
  • MEDIUM
  • LOW
  • UNKNOWN

組み合わせの例:

  • CRITICAL,HIGH
  • CRITICAL,HIGH,MEDIUM
  • すべての重大度を含めるには空のままにします

タイムウィンドウの設定

VULN_TIME_WINDOW変数は、脆弱性を検索する期間を制御します:

  • 形式: <number><unit>ここで:
    • number: 任意の正の整数
    • unit: 時間の場合はh、日の場合はd
  • 例:
    • 24h: 過去24時間
    • 7h: 過去7時間
    • 15d: 過去15日
    • 30d: 過去30日
    • all: すべての脆弱性(初回実行時に役立ちます)

デフォルト値: 24h

パイプライン設定の例:

# For 12-hour window
variables:
  VULN_TIME_WINDOW: "12h"

# For 3-day window
variables:
  VULN_TIME_WINDOW: "3d"

# For all vulnerabilities
variables:
  VULN_TIME_WINDOW: "all"

選択した期間に基づいてパイプラインをスケジュールします。例:

  • 12時間の場合: 毎日2回スケジュールする
  • 3日間の場合: 3日ごとにスケジュールする
  • 脆弱性を見逃さないように、スケジューリングに重複を追加します。

パイプラインのセットアップ

  1. 初回実行時:

    • すべての過去の脆弱性を収集するためにVULN_TIME_WINDOW: "all"を設定します
    • パイプラインを1回実行します
  2. 継続的な収集:

    • VULN_TIME_WINDOWを希望する期間(24hまたは7d)に設定します
    • パイプラインスケジュールを設定します:
      • 24hの場合: 毎日スケジュールする
      • 7dの場合: 毎週スケジュールする

Splunkインテグレーション

スクリプトは脆弱性をイベントとしてSplunkに送信します。

インデックスの設定

  1. Splunkでgitlab_vulnsという名前の新しいインデックスを作成します
  2. HECトークンを作成する際:
    • デフォルトのインデックスgitlab_vulnsに設定します(このインデックスは、提供されるSplunkダッシュボードのベース検索で参照されます)
    • トークンにこのインデックスへの書き込み権限があることを確認します
    • トークンに、イベントデータをJSONとして正しく解析できるsourcetypeがあることを確認します

各イベントには以下が含まれます:

  • 検出時間
  • 脆弱性のタイトルと説明
  • 重大度レベル
  • スキャナー情報
  • プロジェクトの詳細
  • プロジェクトと脆弱性の両方のURL

ダッシュボードのセットアップ

提供されたダッシュボードは、以下の可視化によりGitLabの脆弱性データに関する包括的な表示レベルを提供します:

  • 致命的および高重大度の脆弱性に対するP95経年メトリクス(ラジアルゲージ)
  • 致命的および高重大度の脆弱性の経年バケット(0〜30日、31〜90日、91〜180日、180日以上)にわたる分布を示す経年分析
  • 発生数を含む上位10の最も頻繁なCVE
  • プロジェクトパスと重大度による脆弱性分布
  • すべてのメトリクスは、ビジネスユニットと時間範囲でフィルターできます。

ダッシュボードを設定するには:

  1. ビジネスユニットのマッピング:

    1. 2つの列を持つCSVファイルを作成します:

      project_url,business_unit
    2. 各GitLabプロジェクトURLを対応するビジネスユニットにマップします。

    3. ファイルをルックアップテーブルとしてSplunkにアップロードします:

      1. 設定 > Lookups > Lookup table filesに進みます。
      2. New Lookup Table Fileを選択します。
      3. CSVファイルをアップロードします。
      4. Destination filenamebusiness_unit_mapping.csvに設定します。
      5. 権限を設定します:
        1. <splunk_dir>/etc/apps/search/lookups/business_unit_mapping.csvというラベルの行を見つけます。
        2. 権限を選択します。
        3. 権限を次のいずれかに設定します:
          • インスタンス全体でのアクセスを許可するためにグローバルに設定します。
          • 必要に応じて特定のアプリまたはロールと共有します。
        4. 保存を選択します。
  2. ダッシュボードのインストール:

    1. 提供されているvuln_metrics_dashboard.xmlファイルを保存します。
    2. Splunkで:
      1. Searchアプリに移動します。
      2. ダッシュボード > Create New Dashboardをクリックします。
      3. 編集ビューでソースを選択します。
      4. デフォルトのXMLをvuln_metrics_dashboard.xmlの内容で置き換えます。
      5. ダッシュボードを保存します。

出力形式

中間CSVファイルには以下が含まれます:

  • detectedAt: 検出タイムスタンプ
  • title: 脆弱性のタイトル
  • severity: 重大度レベル
  • primaryIdentifier: 脆弱性識別子
  • exporter: スキャナー名
  • projectPath: GitLabプロジェクトパス
  • projectUrl: プロジェクトURL
  • description: 脆弱性の説明
  • webUrl: 脆弱性の詳細URL

エラー処理

このソリューションには以下が含まれます:

  • 指数関数的バックオフによるレート制限処理
  • Splunkへの取り込みのためのバッチ処理
  • 適切なエラーレポート
  • タイムアウト処理
  • UTF-8エンコードのサポート

ベストプラクティス

  1. トークン権限:

    • GRAPHQL_API_トークンに必要なもの:
      • ターゲットグループ/プロジェクトへの読み取りアクセス
      • セキュリティダッシュボードへのアクセス
    • SPLUNK_HEC_トークンに必要なもの:
      • ターゲットインデックスへのイベント送信権限
  2. パイプラインスケジュール頻度:

    • スケジュールをVULN_TIME_WINDOWと一致させます
    • 脆弱性を見逃さないように重複を含めます
    • 組織のSLAを考慮します
  3. モニタリング:

    • パイプラインの成功/失敗を監視します
    • エクスポートされた脆弱性の数を追跡します
    • Splunkへの取り込みの成功を監視します

トラブルシューティング

一般的な問題と解決策:

  1. 脆弱性がエクスポートされない:

    • スコープの設定を確認します
    • トークンの権限を確認します
    • セキュリティダッシュボードへのアクセスを確認します
  2. Splunk取り込みが失敗する:

    • HEC URLとトークンを確認します
    • ネットワーク接続を確認します
    • インデックスの権限を確認します