mcpField
B
building-soc-metrics-and-kpi-tracking

building-soc-metrics-and-kpi-tracking

github.com/mukul975安全35.2k178 次安装8 周前更新
代码仓库

关于 building-soc-metrics-and-kpi-tracking

面向 SOC 负责人和团队的技能,用于定义、计算和汇报运营指标。内容包括响应时间、告警质量、ATT&CK 覆盖率、工作负载分析及管理层仪表板示例。

主要功能

  1. 01SOC 核心指标框架
  2. 02MTTD 与 MTTR 测量
  3. 03告警质量和工作负载分析
  4. 04ATT&CK 检测覆盖跟踪
  5. 05管理层仪表板与趋势报告

适用场景

  1. 01在季度业务报告中复盘 SOC 表现
  2. 02用工作负载数据支持人员配置决策
  3. 03比较工具变更前后的告警与响应指标
  4. 04为审计整理运营绩效证据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill building-soc-metrics-and-kpi-tracking

安装后在 Claude Code 中输入/building-soc-metrics-and-kpi-tracking确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
agent.py

详细介绍

构建 SOC 指标与 KPI 跟踪

何时使用

在以下情况下使用本技能:

  • SOC 管理层需要以数据为驱动的运营绩效可见性
  • 持续改进计划需要基线测量和趋势跟踪
  • 高管汇报需要量化的安全态势和 ROI 指标
  • 人员配置决策需要客观的工作负载和容量数据
  • 合规审计需要记录在案的 SOC 绩效证据

不要将指标用作针对分析师的惩罚性措施——指标应推动流程改进,而非个人绩效管理。

前提条件

  • 具备 90 天以上事件和告警处置数据的 SIEM
  • 事件工单系统(ServiceNow、Jira),包含事件生命周期的 timestamp 数据
  • 分析师轮班安排和人员配备数据
  • 用于检测覆盖率跟踪的 ATT&CK Navigator
  • 仪表板平台(Splunk、Grafana 或 Power BI)

工作流

步骤 1:定义核心 SOC 指标框架

建立与 NIST CSF 职能对齐的关键指标:

指标定义目标NIST CSF
MTTD从威胁发生到 SOC 检测的时间<15 minDetect
MTTA从告警到分析师确认的时间<5 minRespond
MTTI从确认到调查开始的时间<10 minRespond
MTTC从调查到遏制的时间<1 hourRespond
MTTR从检测到完全解决的时间<4 hoursRecover
FP Rate误报告警的百分比<30%Detect
TP Rate真报告警的百分比>40%Detect
Coverage具备主动检测的 ATT&CK 技术>60%Detect
Dwell Time攻击者在被检测前在网络中驻留的时间<24 hoursDetect
Escalation Rate从 Tier 1 升级到 Tier 2/3 的告警百分比15-25%Respond
步骤 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  --- Exclude data quality issues
| 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 days
| 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 高管摘要:

--- Incident summary by category
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

--- Month-over-month comparison
index=notable earliest=-60d
| eval period = if(_time > relative_time(now(), "-30d"), "This Month", "Last Month")
| stats count by period, urgency
| chart sum(count) AS incidents by urgency, period

--- Top 5 incident categories
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 min (Target: <15 min) | STATUS: GREEN",
    "MTTR: 3.2 hours (Target: <4 hours) | STATUS: GREEN",
    "FP Rate: 27% (Target: <30%) | STATUS: GREEN",
    "Detection Coverage: 64% (Target: >60%) | STATUS: GREEN",
    "Analyst Utilization: 78% (Target: 60-80%) | STATUS: GREEN",
    "Incident Backlog: 12 (Target: <20) | STATUS: GREEN"
  )
| mvexpand metrics
| table metrics
步骤 6:实施持续改进跟踪

跟踪改进举措及其影响:

--- Improvement initiative tracking
| 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平均确认时间 — 从告警生成到分配给分析师的平均时间
信噪比真报告警与总告警的比率 — 越高越好
驻留时间攻击者在环境中未被检测到的持续时间 — 检测有效性的关键指标
分析员利用率分析员用于有效调查的时间百分比,相对于间接任务的时间百分比

工具与系统

  • 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 PERFORMANCE REPORT — March 2024
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

KEY METRICS:
  Metric              Current    Target     Trend    Status
  MTTD                8.3 min    <15 min    -12%     GREEN
  MTTR                3.2 hrs    <4 hrs     -18%     GREEN
  FP Rate             27%        <30%       -5%      GREEN
  TP Rate             41%        >40%       +3%      GREEN
  ATT&CK Coverage     64%        >60%       +3%      GREEN
  Alerts/Analyst/Day  24         <50        -84%     GREEN

INCIDENT SUMMARY:
  Total Incidents:     147 (Critical: 3, High: 23, Medium: 78, Low: 43)
  Avg Resolution:      3.2 hours (Critical: 1.8h, High: 2.9h, Medium: 4.1h)
  SLA Compliance:      94% (Target: >90%)

IMPROVEMENT HIGHLIGHTS:
  [1] RBA deployment reduced daily alerts from 1,847 to 287 (-84%)
  [2] New Sigma rules added 12 ATT&CK techniques to coverage
  [3] SOAR phishing playbook reduced phishing MTTR by 60%

AREAS FOR IMPROVEMENT:
  [1] Lateral movement detection coverage at 58% (below 60% target)
  [2] Night shift MTTD 23% slower than day shift
  [3] 4 critical vulnerability scan tickets overdue on SLA

评论

支持 Markdown