mcpField
P
performing-false-positive-reduction-in-siem

performing-false-positive-reduction-in-siem

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

关于 performing-false-positive-reduction-in-siem

面向 SOC 与检测工程团队的 SIEM 告警误报削减技能,提供从识别高噪声规则到调优和验证的流程。涵盖阈值、允许列表、关联逻辑、基线和威胁情报过滤。

主要功能

  1. 01统计规则告警量与误报率
  2. 02调整检测阈值和时间排除项
  3. 03维护允许列表
  4. 04增强多信号关联逻辑
  5. 05结合行为基线与威胁情报
  6. 06通过测试验证调优结果

适用场景

  1. 01降低 SOC 分析人员处理的告警噪声
  2. 02优化高误报率的 SIEM 规则
  3. 03调优后确认真实威胁仍能触发检测

安装

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

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-false-positive-reduction-in-siem

安装后在 Claude Code 中输入/performing-false-positive-reduction-in-siem确认已加载。

包含的文件

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

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

详细介绍

在 SIEM 中执行误报削减

概述

误报告警是触发安全规则的非恶意事件,它们以大量噪声压垮 SOC 分析师。研究表明,高达 45% 的 SIEM 告警是误报,而一名典型的 SOC 分析师每班次只能有效调查 20-25 条告警。减少误报需要在阈值、关联逻辑、允许列表、富化和持续验证方面进行系统性调优。SIEM 规则至少应按季度周期进行审查。

何时使用

  • 当开展涉及在 SIEM 中执行误报削减的安全评估时
  • 当针对相关安全事件遵循事件响应流程时
  • 当执行计划内的安全测试或审计活动时
  • 当通过动手测试验证安全控制措施时

前提条件

  • 熟悉 SOC 运营概念和工具
  • 可访问测试或实验环境以安全执行
  • 已安装所需依赖项的 Python 3.8+
  • 任何测试活动均获得适当授权

误报削减技术

1. 识别噪声最多的规则
# Splunk - Top 10 noisiest correlation searches
index=notable
| stats count by rule_name
| sort -count
| head 10
| eval pct=round(count / total * 100, 1)
# False positive rate per rule
index=notable
| stats count as total
    count(eval(status_label="Closed - False Positive")) as false_positives
    count(eval(status_label="Closed - True Positive")) as true_positives
    by rule_name
| eval fp_rate=round(false_positives / total * 100, 1)
| sort -fp_rate
| where total > 10
2. 阈值调优
# Before: Too sensitive - fires on 5 failed logins
index=wineventlog EventCode=4625
| stats count by src_ip
| where count > 5

# After: Tuned - requires 20+ failures across 3+ accounts in 10 minutes
index=wineventlog EventCode=4625
| bin _time span=10m
| stats count dc(TargetUserName) as unique_accounts by src_ip, _time
| where count > 20 AND unique_accounts > 3
3. 允许列表/排除管理
# Create allowlist lookup for known benign sources
| inputlookup fp_allowlist.csv
| fields src_ip, reason, approved_by, expiry_date

# Apply allowlist in detection rule
index=wineventlog EventCode=4625
| lookup fp_allowlist src_ip OUTPUT reason as allowlisted_reason
| where isnull(allowlisted_reason)
| stats count dc(TargetUserName) as unique_accounts by src_ip
| where count > 20 AND unique_accounts > 3
4. 关联增强
# Before: Single-event detection (noisy)
index=wineventlog EventCode=4688 New_Process_Name="*powershell.exe"
| eval severity="medium"

# After: Multi-signal correlation (precise)
index=wineventlog EventCode=4688 New_Process_Name="*powershell.exe"
| join src_ip type=left [
    search index=wineventlog EventCode=4625
    | stats count as failed_logins by src_ip
]
| join Computer type=left [
    search index=sysmon EventCode=3
    | stats dc(DestinationIp) as unique_external_connections by Computer
    | where unique_external_connections > 10
]
| where isnotnull(failed_logins) OR unique_external_connections > 10
| eval severity=case(
    failed_logins > 10 AND unique_external_connections > 10, "critical",
    failed_logins > 5 OR unique_external_connections > 5, "high",
    true(), "medium"
)
5. 基于时间的排除
# Exclude known maintenance windows
| eval hour=strftime(_time, "%H")
| eval day=strftime(_time, "%A")
| where NOT (hour >= "02" AND hour <= "04" AND day="Sunday")

# Exclude known batch job schedules
| lookup scheduled_tasks_allowlist process_name, schedule_time
    OUTPUT is_scheduled
| where isnull(is_scheduled)
6. 行为基线集成
# Build baseline for user login patterns
index=wineventlog EventCode=4624
| bin _time span=1h
| stats count as logins dc(Computer) as unique_hosts by TargetUserName, _time
| eventstats avg(logins) as avg_logins stdev(logins) as stdev_logins
    avg(unique_hosts) as avg_hosts stdev(unique_hosts) as stdev_hosts
    by TargetUserName
| where logins > (avg_logins + 3 * stdev_logins)
    OR unique_hosts > (avg_hosts + 3 * stdev_hosts)
7. 威胁情报过滤
# Only alert when destination matches known threat intelligence
index=firewall action=allowed direction=outbound
| lookup ip_threat_intel_lookup ip as dest_ip OUTPUT threat_type, confidence
| where isnotnull(threat_type) AND confidence > 70
# This eliminates FPs from flagging connections to benign IPs

调优流程框架

步骤 1:识别(每周)
  • 按告警量提取前 10 条规则
  • 计算每条规则的 FP 率
  • 识别 FP 率 > 30% 的规则
步骤 2:分析(每周)
  • 每条规则抽样 20 个误报
  • 对每个 FP 的根本原因进行分类
  • 识别常见模式
步骤 3:调优(每两周)
  • 基于基线数据调整阈值
  • 为良性模式添加允许列表条目
  • 增强关联逻辑
  • 添加富化上下文
步骤 4:验证(每月)
  • 运行 Atomic Red Team 测试以验证真阳性仍会触发
  • 计算调优后的新 FP 率
  • 记录调优依据
  • 与检测工程团队一起审查
步骤 5:报告(每季度)
  • 每条规则的 FP 削减指标
  • 整体告警量趋势
  • 分析师生产力改进
  • 已停用或替换的规则

验证测试

# Run Atomic Red Team test after tuning to confirm detection still works
# Example: Test brute force detection after threshold adjustment
Invoke-AtomicTest T1110.001 -TestNumbers 1
# Verify detection still triggers after tuning
index=notable rule_name="Brute Force Detection"
earliest=-24h
| stats count
| where count > 0

FP 削减指标

指标公式目标
误报率FP / (FP + TP) * 100< 20%
告警量削减(旧量 - 新量) / 旧量 * 100每季度 30-50%
平均分诊时间总分诊时间 / 总告警数< 8 分钟
规则精确度TP / (TP + FP)> 0.80
分析师满意度调查评分> 4/5

参考资料

评论

支持 Markdown