汎用DevOps・インフラ⭐ リポ 11品質スコア 70/100
building-soc-metrics-and-kpi-tracking
SOCのパフォーマンス指標とKPI追跡ダッシュボードを構築できます。SIEM データを活用して、平均検出時間(MTTD)、平均対応時間(MTTR)、アラート品質比率、アナリスト生産性、検出カバレッジを測定します。SOCリーダーが運用の可視化、継続的な改善の追跡、またはエグゼクティブレベルのセキュリティ運用効率レポートを必要とするシーンに適しています。
description の原文を見る
构建 SOC 绩效指标和 KPI 跟踪仪表盘,使用 SIEM 数据衡量平均检测时间(MTTD)、 平均响应时间(MTTR)、告警质量比率、分析师生产力和检测覆盖率。适用于 SOC 领导层 需要运营可视化、持续改进跟踪或高管级安全运营效能报告的场景。
SKILL.md 本文
SOC 指標と KPI トラッキングの構築
ユースケース
以下の状況でこのスキルを使用してください:
- SOC リーダーが運用パフォーマンスのデータ駆動型ビジュアル分析を必要とする場合
- 継続的改善計画がベースライン測定とトレンド追跡を必要とする場合
- エグゼクティブレポートがセキュリティ態勢と ROI 指標の定量化を求める場合
- 人員配置の意思決定がワークロードとキャパシティの客観的なデータを必要とする場合
- コンプライアンス監査が文書化された SOC パフォーマンスの証拠を必要とする場合
推奨されません:指標をアナリストに対する懲罰的措置として使用すること。指標はプロセス改善を推進し、個人のパフォーマンス評価ではなく運用改善に活用すべきです。
前提条件
- 90 日以上のインシデントおよびアラート処理データを保有する SIEM
- インシデントライフサイクルのタイムスタンプデータを含むチケットシステム(ServiceNow、Jira)
- アナリスト勤務スケジュールと人員配置データ
- 検出カバレッジ追跡用の ATT&CK Navigator
- ダッシュボードプラットフォーム(Splunk、Grafana、または Power BI)
ワークフロー
ステップ 1:コア SOC 指標フレームワークの定義
NIST CSF の機能と連携した主要指標を確立します:
| 指標 | 定義 | 目標値 | NIST CSF |
|---|---|---|---|
| MTTD | 脅威の発生から SOC が検出するまでの時間 | <15 分 | 検出 |
| MTTA | アラート発生からアナリスト確認までの時間 | <5 分 | 対応 |
| MTTI | 確認から調査開始までの時間 | <10 分 | 対応 |
| MTTC | 調査から遮断までの時間 | <1 時間 | 対応 |
| MTTR | 検出から完全な解決までの時間 | <4 時間 | 復旧 |
| 誤検知率(FP Rate) | 誤ったアラートの割合 | <30% | 検出 |
| 真陽性率(TP Rate) | 正当なアラートの割合 | >40% | 検出 |
| カバレッジ(Coverage) | 主動的に検出されている ATT&CK 技術 | >60% | 検出 |
| 潜伏時間(Dwell Time) | 攻撃者が検出されるまでネットワークに留まる時間 | <24 時間 | 検出 |
| エスカレーション率(Escalation Rate) | 第 1 レベルから第 2/3 レベルへのエスカレーション比率 | 15-25% | 対応 |
ステップ 2:MTTD/MTTR 測定の実装
平均検出時間(MTTD):
index=notable earliest=-30d status_label="Resolved*"
| eval mttd_seconds = _time - orig_time
| where mttd_seconds > 0 AND mttd_seconds < 86400 --- データ品質の問題を除外
| stats avg(mttd_seconds) AS avg_mttd,
median(mttd_seconds) AS med_mttd,
perc90(mttd_seconds) AS p90_mttd,
perc95(mttd_seconds) AS p95_mttd
by urgency
| eval avg_mttd_min = round(avg_mttd / 60, 1)
| eval med_mttd_min = round(med_mttd / 60, 1)
| eval p90_mttd_min = round(p90_mttd / 60, 1)
| table urgency, avg_mttd_min, med_mttd_min, p90_mttd_min
平均対応時間(MTTR):
index=notable earliest=-30d status_label="Resolved*"
| eval mttr_seconds = status_end - _time
| where mttr_seconds > 0 AND mttr_seconds < 604800 --- <7 日
| stats avg(mttr_seconds) AS avg_mttr,
median(mttr_seconds) AS med_mttr,
perc90(mttr_seconds) AS p90_mttr
by urgency
| eval avg_mttr_hours = round(avg_mttr / 3600, 1)
| eval med_mttr_hours = round(med_mttr / 3600, 1)
| eval p90_mttr_hours = round(p90_mttr / 3600, 1)
| table urgency, avg_mttr_hours, med_mttr_hours, p90_mttr_hours
MTTD/MTTR の時系列トレンド:
index=notable earliest=-90d status_label="Resolved*"
| eval mttd_min = (_time - orig_time) / 60
| eval mttr_hours = (status_end - _time) / 3600
| bin _time span=1w
| stats avg(mttd_min) AS avg_mttd_min, avg(mttr_hours) AS avg_mttr_hours,
count AS incidents by _time
| table _time, incidents, avg_mttd_min, avg_mttr_hours
ステップ 3:アラート品質とアナリスト生産性の測定
アラート処理分析:
index=notable earliest=-30d
| stats count AS total,
sum(eval(if(status_label="Resolved - True Positive", 1, 0))) AS tp,
sum(eval(if(status_label="Resolved - False Positive", 1, 0))) AS fp,
sum(eval(if(status_label="Resolved - Benign", 1, 0))) AS benign,
sum(eval(if(status_label="New" OR status_label="In Progress", 1, 0))) AS pending
| eval tp_rate = round(tp / total * 100, 1)
| eval fp_rate = round(fp / total * 100, 1)
| eval signal_noise = round(tp / (fp + 0.01), 2)
| table total, tp, fp, benign, pending, tp_rate, fp_rate, signal_noise
アナリスト生産性指標:
index=notable earliest=-30d status_label="Resolved*"
| stats count AS alerts_resolved,
avg(eval((status_end - status_transition_time) / 60)) AS avg_triage_min,
dc(rule_name) AS unique_rule_types
by owner
| eval alerts_per_day = round(alerts_resolved / 30, 1)
| sort - alerts_resolved
| table owner, alerts_resolved, alerts_per_day, avg_triage_min, unique_rule_types
勤務シーン別ワークロード分布:
index=notable earliest=-30d
| eval hour = strftime(_time, "%H")
| eval shift = case(
hour >= 6 AND hour < 14, "Day (06-14)",
hour >= 14 AND hour < 22, "Swing (14-22)",
1=1, "Night (22-06)"
)
| stats count AS alerts, dc(owner) AS analysts by shift
| eval alerts_per_analyst = round(alerts / analysts / 30, 1)
| table shift, alerts, analysts, alerts_per_analyst
ステップ 4:検出カバレッジの追跡
ATT&CK カバレッジスコア:
| inputlookup detection_rules_attack_mapping.csv
| stats dc(technique_id) AS covered_techniques by tactic
| join tactic type=left [
| inputlookup attack_techniques_total.csv
| stats dc(technique_id) AS total_techniques by tactic
]
| eval coverage_pct = round(covered_techniques / total_techniques * 100, 1)
| sort tactic
| table tactic, covered_techniques, total_techniques, coverage_pct
データソースカバレッジ:
| inputlookup expected_data_sources.csv
| join data_source type=left [
| tstats count where index=* by sourcetype
| rename sourcetype AS data_source
| eval status = "Active"
]
| eval source_status = if(isnotnull(status), "Collecting", "MISSING")
| stats count by source_status
| table source_status, count
ステップ 5:エグゼクティブレポートダッシュボードの構築
月次 SOC エグゼクティブサマリー:
--- カテゴリ別インシデントサマリー統計
index=notable earliest=-30d status_label="Resolved*"
| stats count by urgency
| eval order = case(urgency="critical", 1, urgency="high", 2, urgency="medium", 3,
urgency="low", 4, urgency="informational", 5)
| sort order
--- 前月との比較
index=notable earliest=-60d
| eval period = if(_time > relative_time(now(), "-30d"), "当月", "前月")
| stats count by period, urgency
| chart sum(count) AS incidents by urgency, period
--- 上位 5 つのインシデントタイプ
index=notable earliest=-30d status_label="Resolved - True Positive"
| top rule_name limit=5
| table rule_name, count, percent
セキュリティ態勢スコアカード:
| makeresults
| eval metrics = mvappend(
"MTTD: 8.3 分 (目標: <15 分) | ステータス: 緑",
"MTTR: 3.2 時間 (目標: <4 時間) | ステータス: 緑",
"誤検知率: 27% (目標: <30%) | ステータス: 緑",
"検出カバレッジ: 64% (目標: >60%) | ステータス: 緑",
"アナリスト利用率: 78% (目標: 60-80%) | ステータス: 緑",
"インシデントバックログ: 12 件 (目標: <20 件) | ステータス: 緑"
)
| mvexpand metrics
| table metrics
ステップ 6:継続的改善追跡の実装
改善イニシアティブとその効果を追跡します:
--- 改善イニシアティブ追跡
| inputlookup soc_improvement_initiatives.csv
| eval status_color = case(
status="Completed", "green",
status="In Progress", "yellow",
status="Planned", "gray"
)
| table initiative, start_date, target_date, status, metric_impact, baseline, current
イニシアティブの例:
initiative,start_date,target_date,status,metric_impact,baseline,current
Risk-Based Alerting,2024-01-15,2024-03-15,Completed,Alert Volume,-84%,287/day
Sigma Rule Library,2024-02-01,2024-04-01,In Progress,ATT&CK Coverage,61%,64%
SOAR Phishing Playbook,2024-02-15,2024-03-30,In Progress,Phishing MTTR,45min,18min
Analyst Training Program,2024-01-01,2024-06-30,In Progress,TP Rate,31%,41%
コアコンセプト
| 用語 | 定義 |
|---|---|
| MTTD | 平均検出時間 — 脅威の発生から SOC がアラートを生成するまでの平均時間 |
| MTTR | 平均対応時間 — 検出からインシデント解決までの平均時間 |
| MTTA | 平均確認時間 — アラート生成からアナリスト割り当てまでの平均時間 |
| シグナルノイズ比(Signal-to-Noise Ratio) | 真陽性アラートと総アラート数の比率 — 値が高いほど良い |
| 潜伏時間(Dwell Time) | 攻撃者が環境内で検出されずに存在する継続時間 — 検出有効性の重要指標 |
| アナリスト利用率(Analyst Utilization) | 有効な調査に費やされたアナリスト時間の割合(管理業務との相対比較) |
ツールとシステム
- Splunk Dashboard Studio — SOC 指標の対話的ダッシュボード構築用の高度なビジュアライゼーションフレームワーク
- Grafana — 複数のデータソースに対応したオープンソースの分析およびビジュアライゼーションプラットフォーム
- Power BI — エグゼクティブレポートとトレンド分析用の Microsoft ビジネスインテリジェンスツール
- ATT&CK Navigator — MITRE ツール、階層型ヒートマップ形式で検出カバレッジを可視化
- ServiceNow Performance Analytics — インシデントライフサイクル指標追跡用の ITSM 分析モジュール
一般的なシーン
- 四半期ビジネスレビュー — MTTD/MTTR トレンド、検出カバレッジ増加、アラート品質改善を実証
- 人員配置の立証 — ワークロード指標を使用してアナリスト増員または勤務シフト調整の根拠を提供
- ツール ROI 評価 — 新ツール導入前後のアラート品質と対応時間を比較
- コンプライアンス証拠 — ISO 27001 または SOC 2 監査用に文書化された SOC パフォーマンス指標を提供
- ベンダー比較 — 業界調査(SANS、Ponemon)を使用して SOC 指標を同業他社ベンチマークと比較
出力形式
SOC パフォーマンスレポート — 2024 年 3 月
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
主要指標:
指標 現在値 目標値 トレンド ステータス
MTTD 8.3 分 <15 分 -12% 緑
MTTR 3.2 時間 <4 時間 -18% 緑
誤検知率 27% <30% -5% 緑
真陽性率 41% >40% +3% 緑
ATT&CK カバレッジ 64% >60% +3% 緑
アナリスト当たり日次アラート 24 件 <50 件 -84% 緑
インシデントサマリー:
総インシデント数: 147(重大: 3、高: 23、中: 78、低: 43)
平均解決時間: 3.2 時間(重大: 1.8h、高: 2.9h、中: 4.1h)
SLA コンプライアンス: 94%(目標: >90%)
改善のハイライト:
[1] RBA 展開により日次アラートが 1,847 件から 287 件に削減(-84%)
[2] 新しい Sigma ルールにより ATT&CK 技術が 12 項目増加
[3] SOAR フィッシング対応プレイブックによりフィッシング MTTR を 60% 削減
改善が必要な領域:
[1] 横展開検出カバレッジが 58%(60% 目標以下)
[2] 夜勤 MTTD が日勤より 23% 遅い
[3] 4 つの重大脆弱性スキャンチケットが SLA 期限を超過
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- killvxk
- ライセンス
- Apache-2.0
- 最終更新
- 2026/4/28
Source: https://github.com/killvxk/cybersecurity-skills-zh / ライセンス: Apache-2.0