wislest/detection-rule-backtester

GitHub: wislest/detection-rule-backtester

该工具是一个检测规则回测框架,通过在已标注日志和 AI 攻击 trace 上重放 Sigma/ATR/KQL 规则,量化每条规则的精确率、召回率和误报率。

Stars: 0 | Forks: 0

# 检测规则回测器 重放已标注的日志和 AI 攻击 trace 以对抗检测规则,然后衡量每条规则的实际效果:**precision、recall、false-positive rate、F1 以及多规则 ensemble confidence — 按单条规则计算**。 检测工程师编写规则(Sigma、[Agent Threat Rules](https://github.com/Agent-Threat-Rule/agent-threat-rules)、KQL 分析),但很少能有一个纯粹的测试环境来回答这个问题:“*如果我发布了这条规则,它究竟能捕获多少次真实攻击,又会在我的历史数据中产生多少噪音?*” 这个工具就是那个测试环境。它将规则视为事件上的二元分类器,并根据 ground truth 对其进行评分。 评估引擎是从一个彩票预测回测器中复用而来的——这是有意为之,并且是解耦的(每个检测器的指标、加权排名、移动平均趋势、ensemble 加权)。评分核心从抽取号码的集合重叠重写为适用于检测的混淆矩阵。 ## 两个赛道,一个测试环境 | 赛道 | 重放的事件 | 规则 | Ground truth | |-------|-----------------|-------|--------------| | **A — 经典检测** | Sysmon/EVTX,认证日志 | Sigma 风格的字段/阈值规则 | 标注的攻击事件 | | **B — AI 攻击** | LLM prompt,agent tool-call trace | prompt-injection / agent 滥用规则(ATR,KQL 风格) | 已知的 injection = 正样本 | 规则带有 `technique` 标签(MITRE ATLAS、ATT&CK、OWASP LLM Top 10),因此 recall 可以**限定范围**于规则真正旨在捕获的攻击,而 false-positive rate 则始终针对所有良性流量进行衡量。 ## 快速开始 ``` pip install -e ".[dev]" # 针对样本语料库(track A + track B)回测真实 Sigma 规则: drbt --rules examples/rules \ --sysmon examples/data/sysmon_sample.jsonl \ --garak examples/data/garak_sample.jsonl python examples/demo_backtest.py # same idea, hand-built rules, no Sigma pytest # run the test suite (12 tests) ``` ## 您将获得 ``` from drbt import BacktestEngine, Event, FieldMatchRule, matches_regex, to_markdown rule = FieldMatchRule( id="R-PI-KW", name="Prompt-injection keywords", conditions={"prompt": matches_regex(r"ignore (all )?previous|developer mode")}, severity="high", technique="OWASP-LLM01", ) result = BacktestEngine([rule]).run(events) # events: list[Event] with is_attack labels print(to_markdown(result)) ``` 该报告包括单条规则的性能表、带有 ensemble 权重的综合全局排名、按技术划分的覆盖矩阵,以及 ensemble 触发摘要(真实攻击与误报的平均 confidence)。 ## 内置规则类型 - **`FieldMatchRule`** — 原子的单事件条件(`equals` / `contains` / `matches_regex` / `is_in`),通过逻辑 AND 组合。大多数 Sigma 检测的最小公分母。 - **`ThresholdRule`** — 当内部 matcher 在 `window_seconds` 内对同一个 `group_by` 字段命中 `count` 次时触发的关联规则。模拟诸如“*在 10 分钟内来自相似 IP 的 3 次以上 prompt-injection 尝试*”的分析。 - **`SigmaRule`** — 从 YAML 加载的真实 Sigma 规则,并针对每个事件**在内存中**进行评估。`pySigma`/`sigma-cli` 仅将 Sigma *转换*为 SIEM 查询语言;回测需要直接运行 `detection:`/`condition:` 逻辑,因此 `drbt` 内置了一个专注的评估器(见下文)。 其他格式(ATR、编译后的 KQL)以相同的方式接入——将它们包装为 `Rule`(`feed(event) -> bool`,`reset()`)。 ## 加载真实的 Sigma 规则和语料库 ``` from drbt import BacktestEngine, load_sigma_file, load_sysmon_events, load_garak_events, to_markdown rules = [load_sigma_file("examples/rules/encoded_powershell.yml")] events = load_sysmon_events("examples/data/sysmon_sample.jsonl") print(to_markdown(BacktestEngine(rules).run(events))) ``` 内存中的 Sigma 评估器支持 selections(map = AND,list-of-maps = OR)、字段修饰符(`contains`、`startswith`、`endswith`、`re`、`all`)、值列表以及带有 `and`/`or`/`not`、括号、`1 of`/`all of`、名称通配符和 `them` 的 condition。Aggregation condition(`| count() by ... > N`)会被拒绝并给出明确的错误提示——请改为将其建模为 `ThresholdRule`。 加载器将公共语料库标准化为 `Event` schema: - **`load_sysmon_events`** — Security-Datasets / Mordor 风格的 Windows-event JSONL(赛道 A);标签来自 `label`/`is_attack` 字段或 callback。 - **`load_garak_events`** — NVIDIA garak 报告 JSONL(赛道 B);每个 probe 都是一次攻击,其 probe 类将成为 technique 标签。 ## 要重放的数据集(赛道 B) 本地固定在 `data/` 下(未提交)。有用的公共语料库: - **Agent Red Teaming Benchmark** — 跨越 44 个目标行为的约 4,700 次攻击。 - **Indirect prompt-injection benchmark** — 跨越 41 个行为的约 2,679 次攻击。 - **NVIDIA garak** — 生成标注的对抗性语料库(每个样本都是已知的 probe)。 ## 状态 `v0.2` — 核心测试环境,三个规则引擎(field / threshold / **内存中的 Sigma**),语料库加载器(Sysmon + garak),`drbt` CLI,合成演示,12 项测试。 其范围是一个专注的检测工程作品集展示,**而**不是 SIEM/SOAR 平台。 ## 许可证 MIT。
标签:AI安全, Chat Copilot, Python, 安全规则引擎, 安全运营, 扫描框架, 文档结构分析, 无后门, 规则评估, 逆向工具