Rule2Probe:基于反例引导神经符号合成的可执行检测验证
摘要
一条检测规则能够通过语法检查,不代表它在生产环境中仍然能够产生告警。真实的检测链路横跨主机行为、Agent 采集、字段映射、流式处理、复杂事件关联和告警投递,其中任意一层发生变化,都可能让一条逻辑正确的规则静默失效。现有大模型安全研究较多关注从威胁报告或攻击描述生成 Sigma 规则,而本文研究其逆问题:给定一条已有 Sigma 或 Esper 规则,能否合成一个最小、可审计、可执行的拨测计划,并根据执行反馈自动修复?
本文提出 Rule2Probe。系统首先将检测逻辑编译为事件约束图,再通过遥测因果层区分动作可控、环境绑定、传感器派生和关联派生谓词。语言模型只能生成类型化拨测计划,独立 verifier 则将失败执行转换成未满足的残差谓词,形成 Counterexample-Guided Inductive Synthesis,简称 CEGIS,式的修复循环。模型的自信不构成证据,只有符号约束满足或真实目标 strong-hit 才能接受候选计划。
我们在 299 条私有生产规则上进行了冻结实验。编译器提取出 712 个谓词、175 个跨字段关系和 2,397 个排除块。进一步的因果审计表明,在 500 个可执行谓词中,只有 23.0% 可以由行为参数直接控制,43.6% 来自传感器派生,18.6% 来自关联引擎派生。这说明“规则到攻击命令”并不是普通文本翻译问题。
在按完整事件来源家族隔离的 48 条反例测试集上,Qwen3-4B 量化模型零样本修复率为 0%,QLoRA 适配后,无反馈修复率为 62.5%,自由文本反馈为 64.6%,结构化残差反馈达到 93.8%。结构化反馈相对无反馈净改善 15 条且没有回退,双侧精确 McNemar 检验 (p=6.10\times10^{-5})。但确定性残差求解器达到 100%,因此本文不主张让语言模型替代约束求解器,而是将模型价值限定在语义不完备的行为到遥测逆映射层。
本文同时审计了两组历史人工拨测脚本及其告警响应,二者均满足目标规则标记与多阶段标记出现在同一告警对象中的 strong-hit 条件。该结果证明 verifier 可以处理真实证据,但不被包装成模型在线合成结果。模型生成行为计划的前瞻 strong-hit 仍是下一阶段实验门槛。
关键词: 检测验证;Sigma;Esper;神经符号系统;反例引导合成;QLoRA;持续学习
这项工作的最初假设、从零模型训练过程和早期研究日志见 《从零开始训练一个会成长的安全模型》。本文只保留可以被实验、代码或外部证据支撑的结论。
1. 引言
安全团队通常拥有大量检测规则,却很少拥有同等规模的证据来证明这些规则仍然有效。
规则上线以后,主机 Agent 版本会改变,事件字段会改名,预处理逻辑会调整,白名单会扩大,CEP 窗口和关联主体也可能发生漂移。一条规则即使语法合法、离线样例可以命中,也可能在真实行为经过完整数据链路后无法产生告警。
合成一条事件 JSON 并直接送入规则引擎,只能验证检测逻辑本身。它会绕过最容易出问题的主机传感器、字段标准化和传输链路。人工紫队拨测可以覆盖完整链路,但每条规则都需要分析人员重新完成以下工作:
- 理解规则真正描述的行为;
- 确定哪些字段能够由动作控制;
- 处理主机、应用和关联主体等环境变量;
- 避开规则中的排除条件;
- 保持多阶段事件的顺序和时间窗口;
- 执行拨测并检查目标告警;
- 命中失败后逐层定位原因。
这项工作昂贵而且很难扩展。
语言模型看起来适合完成“规则到行为”的语义转换,但直接让模型生成脚本会产生三个根本问题。
第一,模型可能输出危险或环境无效的任意命令。第二,模型的自我反思不能证明遥测是否真的满足规则。第三,如果把模型自己的输出重新作为正确答案训练,错误会在自训练过程中持续放大。
Rule2Probe 的核心思想是:模型负责提出假设,独立系统负责判真。
Sigma / Esper Rule
|
v
Constraint Compiler
|
v
Event Constraint Graph
|
+----------> Deterministic Event Solver
|
v
Telemetry Causality Layer
|
v
Typed Behavior Planner
|
v
Authorized Execution Environment
|
v
Telemetry / Strong-hit Verifier
|
v
Residual Predicates -> Minimal Repair -> Next Attempt
本文的主要贡献如下:
- 实现一个面向 Sigma 与 Esper/CEP 的规则约束编译器,保留事件角色、跨字段关系和显式排除块;
- 提出遥测因果分类,阻止系统把传感器或关联引擎生成的字段错误地当成行为参数;
- 设计一个只包含审核原语的类型化拨测 DSL,禁止模型生成任意 Shell;
- 建立独立 verifier 和结构化残差反馈,实现反例驱动的最小修复;
- 构造按完整事件来源家族隔离的 ProbeGym 反例修复数据集;
- 完成本地 4B 量化模型的 QLoRA 训练、反馈消融、统计检验和失败归因;
- 将历史人工拨测与告警响应转换成可哈希、可重复审计的 strong-hit 证据。
2. 研究背景与相关工作
2.1 从威胁描述生成检测规则
大模型在检测工程中的常见应用是正向生成:输入威胁报告、攻击步骤或 ATT&CK 技术,输出 Sigma、YARA 或 SIEM 规则。
SIGMERGE 使用分层信息提取、检索和闭环验证,从网络威胁报告生成 Sigma 规则。From Attack Simulation to SIEM Rule 则强调从固定攻击探针到 SIEM 规则的确定性、可追踪合成。
Rule2Probe 研究的是相反方向:
已有检测规则 -> 行为假设 -> 真实遥测 -> 目标告警
规则描述的是行为被观测后的结果,却通常不会告诉我们怎样制造这些结果,因此逆向问题比结构化文本生成多出一个不完备的环境因果层。
2.2 检测规则执行验证
NIDSFuzz 通过面向规则的网络流量变异系统化验证 NIDS 规则执行。Rule2Probe 与它共享“规则需要被动态验证”的出发点,但研究对象进一步覆盖主机进程、文件、网络、Web、DNS、对象存储、RASP 和多事件 CEP 关联。
这些场景不能只靠修改报文完成验证。一个进程规则可能依赖父子进程关系,一个文件规则可能依赖 Agent 对写入类型的分类,一个关联规则还可能依赖同主机、同应用或同链路 PID 下的多个事件。
2.3 反例引导学习
传统 CEGIS 将候选程序交给验证器,验证器发现反例后再驱动下一轮合成。近期工作也开始研究如何把结构化反例用于大模型推理,例如 Counterexample Guided Learning in the Large。
Rule2Probe 不采用“请反思为什么失败”这种宽泛提示,而是直接返回未满足谓词、期望值、观测值和所属事件角色。其目标不是让模型写出更流畅的解释,而是让每次失败都产生一个可执行的修复约束。
3. 问题定义
给定检测规则 (R),规则编译器生成约束集合 (C)。行为计划 (p_t) 在授权环境 (E) 中执行后,遥测系统产生观测集合:
[ O_t = \operatorname{Observed}(E, p_t). ]
verifier 返回尚未满足的残差:
[ \mathcal{R}_t = C \setminus O_t. ]
模型或规划器根据残差生成最小补丁 (\Delta_t):
[ p_{t+1} = p_t \oplus \Delta_t. ]
搜索在以下任一条件成立时停止:
- 所有事件约束得到符号满足;
- 行为执行后观察到目标 strong-hit;
- 候选计划违反安全策略;
- 达到固定执行预算。
本文严格区分两种验证等级。
3.1 事件级验证
事件级拨测直接构造结构化 telemetry fixture,再使用约束求解器检查它是否满足规则。
它适合验证:
- 规则逻辑是否自洽;
- 字段值是否满足谓词;
- 跨字段关系是否正确;
- 最小反例修复是否有效。
但它绕过了真实 Agent,因此不能证明传感器保真度。
3.2 行为级验证
行为级拨测需要在授权主机或靶场执行类型化计划,并要求真实遥测链路产生目标告警。
其判定条件不是模型认为“应该命中”,也不是生成脚本返回码为零,而是:
execution_success = true
strong_hit_configured = true
target_strong_hit = true
任何事件级结果都不能填入行为级 strong-hit 指标。
4. Rule2Probe 系统设计
4.1 规则约束编译器
编译器读取 Sigma YAML 与 Esper EPL,将终端检测 statement 转换为事件约束图。节点表示事件角色与字段谓词,边表示跨字段相等、关联主体绑定、先后顺序和时间约束。
当前支持的主要谓词包括:
eq与in;not_null;contains_any;regexp与like;- 数值比较;
- 跨事件字段相等。
否定表达式不会被粗暴转换成正向字面量,而是保存在独立的 exclusion block 中。对于嵌套析取、复杂时间运算和自定义字符串函数,编译器选择标记为 unsupported,而不是静默赋予错误语义。
4.2 遥测因果层
检测规则中的字段并不具有相同的可控性。本文将其分成五类:
| 因果角色 | 含义 | 例子 |
|---|---|---|
| Action-controlled | 可由行为参数直接选择 | 目标地址、端口、路径、命令参数 |
| Environment-bound | 运行时环境决定 | hostname、appkey、容器身份 |
| Sensor-derived | Agent 或内核推导 | process name、PID、行为类型 |
| Correlation-derived | 流处理或 CEP 生成 | grouping key、rule name、阶段标签 |
| Unresolved | 组织特有且尚未建模 | 私有基线或内部语义字段 |
规划器只能给第一类字段赋值。环境绑定字段由运行时 binder 注入,传感器派生字段只能执行后观测,关联字段则由 verifier 在窗口中确认。
这是系统与普通“规则转命令”模型最关键的差异。
4.3 类型化行为 DSL
行为层不允许模型输出任意 Shell,而是只能选择审核过的抽象原语:
process.spawn
file.operate
network.connect
web.request
dns.query
object.upload
application.invoke
每个原语声明:
- 允许使用的场景;
- 参数 schema;
- 预期遥测契约;
- 风险等级;
- 是否需要人工审核;
- 清理策略。
例如,网络连接原语只能连接授权接收端,文件原语只能在分配的测试目录中操作并负责清理,对象上传原语只能使用隔离测试桶。模型生成的是计划,不是突破边界的自由代码。
4.4 独立 verifier
事件 verifier 对 fixture 执行确定性谓词求值,并返回:
{
"matched": false,
"unsatisfied": [
{
"predicate_id": "p003",
"field": "event_b.hostname",
"operator": "field_=",
"expected": ["event_a.hostname"],
"observed": {
"event_a.hostname": "host-a",
"event_b.hostname": "host-b"
}
}
]
}
行为 verifier 还需要检查:
- DSL 是否通过静态安全检查;
- 行为执行是否成功;
- 预期遥测是否出现;
- 目标规则是否 strong-hit;
- 是否产生非目标旁路告警;
- 是否完成清理。
候选模型无权修改 verifier,也不能把自己的自然语言结论写入命中字段。
4.5 可验证经验与自学习
真正的自学习不是把模型输出重新喂给自己。
Rule2Probe 将一次轨迹拆成任务、候选计划、执行结果、遥测、残差、修复和最终结论。只有 verifier 接受的轨迹才能进入正样本池:
Rule
-> Candidate Plan
-> Human/Policy Approval
-> Execution
-> Telemetry Verification
-> Strong-hit
-> Verified Experience
失败轨迹保留为反例或偏好负样本,但不能伪装成成功标签。新经验首先进入可检索记忆;当同类经验数量足够、收益稳定并通过脱敏后,才离线训练独立 LoRA。新适配器必须通过冻结回归集才能晋级,并且可以随时回滚。
5. 从零小模型到神经符号系统
这项研究最初确实从“训练一个会成长的小模型”开始,但实验结果逐步改变了技术路线。
5.1 0.527M 参数冒烟模型
第一轮使用随机初始化的 0.527M 参数 Transformer 训练 200 步,验证 loss 降至 0.6983,perplexity 为 2.01。模型学会了固定输出格式和重复告警规则,却不能解决未见数字的加法与排序。
这次实验只证明了 Tokenizer、数据管线、Metal 训练、检查点保存和重新加载是可用的。它同时给出第一个负结果:
语言模型 loss 下降,并不等于智能形成。
5.2 10.238M 本地规则模型
第二轮模型包含 10,238,208 个参数,使用本地规则预训练 2,000 步,再进行 500 步监督微调。在 31 条未见测试规则派生的 62 个任务上:
| 指标 | 结果 |
|---|---|
| JSON 合法率 | 100% |
| 完整答案匹配 | 41/62(66.1%) |
| 字段级准确率 | 140/186(75.3%) |
| 规则分类完整匹配 | 17/31(54.8%) |
| 拨测策略完整匹配 | 24/31(77.4%) |
这个模型能够学习规则解析器生成的标签,但监督答案本身来自确定性规划器,并不是服务器执行结果;测试也只按规则 ID 隔离,没有隔离共享的事件来源模板。
它证明了小模型可以学习本地协议,却没有证明模型会进行真实拨测。
5.3 重新划分模型边界
前两轮实验促使我们放弃“所有问题都交给一个从零模型”的路线:
- 精确规则语义由编译器处理;
- 精确事件字段修复由求解器处理;
- 开放世界行为语义由预训练小模型处理;
- 真实环境是否命中由外部 verifier 处理;
- 自学习只使用经过验证的工作轨迹。
最终模型改为 Qwen3-4B-Instruct 4bit 基座,通过小型 LoRA 学习本地修复协议。这里使用预训练基座不是退步,而是承认语言和安全语义需要足够先验;真正需要本地学习的是工具协议、遥测因果和经过验证的工作经验。
6. 数据集与实验设置
6.1 私有规则语料
本地语料共包含 299 条规则:
| 类型 | 数量 |
|---|---|
| Esper | 297 |
| Sigma | 2 |
| Esper 叶子规则 | 151 |
| Esper 关联规则 | 100 |
| Esper 基础设施规则 | 15 |
| Esper 测试规则 | 31 |
原始规则包含内部标识,因此本文只报告聚合统计,不公开字面量、环境地址和内部规则名称。
6.2 编译器输出
| 编译指标 | 结果 |
|---|---|
| 已解析谓词 | 712 |
| 跨字段关系 | 175 |
| 显式排除块 | 2,397 |
| 不支持表达式 | 325 |
| 至少包含一个可执行谓词的规则 | 173 |
| 可做事件级验证的 Esper 叶子规则 | 112/151 |
| 七类行为契约完整覆盖 | 107/173(61.8%) |
| 平均行为契约覆盖率 | 77.3% |
6.3 ProbeGym 反例数据
对每条可生成正向 witness 的叶子规则,系统构造两类单反例:
wrong_value:把一个满足值替换为错误值;missing_field:删除一个必要字段。
只有恰好产生一个残差谓词的样本才进入数据集。这样可以明确判断模型是否修复了指定反例,而不是碰巧改动其他字段。
数据按完整事件来源家族切分,而不是随机按规则 ID 切分:
| Split | 规则 | 分配的来源家族 | 原始记录 |
|---|---|---|---|
| train | 73 | 25 | 192 |
| valid | 20 | 4 | 125 |
| test | 19 | 9 | 48 |
训练前使用真实 Chat Template 计算序列长度,删除 4 条超过 1,024 Token 的训练样本。最终训练集为 188 条,验证集和测试集保持不变。测试记录实际覆盖 8 个能够生成反例的未见来源家族。
6.4 模型与训练
| 配置 | 数值 |
|---|---|
| 基座 | Qwen3-4B-Instruct-2507-4bit |
| 训练方式 | QLoRA |
| 适配层 | 最后 8 层 |
| 可训练参数 | 3.670M / 4.022B(0.091%) |
| LoRA rank / scale | 8 / 20 |
| Batch size | 1 |
| 梯度累积 | 4 |
| 学习率 | (1\times10^{-5}) |
| 最大长度 | 1,024 |
| 训练步数 | 300 |
| Seed | 20260805 |
| Assistant-only loss | 是 |
| 峰值统一内存 | 3.742GB |
| 最终适配器 | 约 14MB |
训练使用 Apple Silicon 和 MLX-LM。模型只对 assistant 答案区计算 loss,避免长规则输入淹没短修复答案。
6.5 基线与消融
本文比较以下方法:
- 不修复;
- 随机训练集 patch;
- 按场景、字段和操作符检索最近邻 patch;
- Qwen3-4B 零样本;
- QLoRA 无反馈;
- QLoRA 仅二值
matched=false反馈; - QLoRA 自由文本反馈;
- QLoRA 结构化残差反馈;
- 确定性残差求解器。
主要指标包括 JSON 合法率、严格 patch 匹配、verifier 修复成功率、最小 patch 率和来源家族宏平均。
7. 实验结果
7.1 遥测因果审计
173 条可执行规则中共保留 500 个行为规划谓词:
| 因果角色 | 谓词数 | 比例 |
|---|---|---|
| 动作直接可控 | 115 | 23.0% |
| 传感器派生 | 218 | 43.6% |
| 关联引擎派生 | 93 | 18.6% |
| 环境绑定 | 63 | 12.6% |
| 暂未解析 | 11 | 2.2% |
按规则计算,平均直接可控率只有 17.3%,已知因果覆盖率为 97.8%。132 条规则需要传感器 oracle,64 条需要关联验证,53 条需要运行时环境绑定,7 条仍包含私有未解析字段。
这个结果意味着:即使模型完全理解规则文本,它也无法在执行前决定大部分目标字段。PID、行为类型、证据类型、关联键和规则阶段都不是一句命令能够直接赋值的。
7.2 训练过程
| Iteration | Validation loss |
|---|---|
| 1 | 7.919 |
| 50 | 1.531 |
| 100 | 0.817 |
| 150 | 0.718 |
| 200 | 0.401 |
| 250 | 0.271 |
| 300 | 0.201 |
验证 loss 在 300 步内持续下降,没有出现选择更早 checkpoint 的依据,因此采用第 300 步适配器。
7.3 反例修复
| 方法 | JSON 合法 | 严格 patch | Verifier 修复 | 家族宏平均 |
|---|---|---|---|---|
| 不修复 | N/A | N/A | 0/48(0%) | 0% |
| 随机训练 patch | N/A | N/A | 0/48(0%) | 0% |
| 最近邻谓词签名 | N/A | N/A | 6/48(12.5%) | N/A |
| Qwen3-4B 零样本 + 残差 | 100% | 0% | 0/48(0%) | 0% |
| QLoRA,无反馈 | 100% | 47.9% | 30/48(62.5%) | 72.7% |
| QLoRA,二值反馈 | 100% | 47.9% | 30/48(62.5%) | 74.1% |
| QLoRA,自由文本反馈 | 100% | 47.9% | 31/48(64.6%) | 70.8% |
| QLoRA,结构化残差 | 100% | 85.4% | 45/48(93.8%) | 96.3% |
| 确定性残差求解器 | 100% | 100% | 48/48(100%) | 100% |
零样本模型经常找对字段和值,却自作主张输出 RFC 6902 JSON Patch,而系统要求 {"set_fields": ...}。这说明它具备一定语义能力,但没有学会本地接口契约。
QLoRA 后,所有输出都成为合法 JSON 和单字段最小 patch。结构化残差比无反馈与二值反馈分别净改善 15 条,没有产生回退;双侧精确 McNemar 检验:
[ p=6.10\times10^{-5}. ]
相对自由文本反馈,结构化残差净改善 14 条,同样没有回退:
[ p=1.22\times10^{-4}. ]
使用 10,000 次记录级 Bootstrap,结构化反馈修复率的 95% 区间为 ([85.4\%, 100\%]),无反馈为 ([47.9\%, 75.0\%]),自由文本反馈为 ([50.0\%, 77.1\%])。
结果支持以下判断:
“执行失败,请反思”并不是高质量学习信号。指出具体未满足谓词的结构化反例,才真正改变模型行为。
7.4 失败分析
结构化反馈仍失败 3 条,全部来自同一个未见 Kerberos 事件家族,且全部属于跨事件字段相等:
- 两次把赋值方向反转;
- 一次把缺失关系字段错误修复为
null。
因此剩余问题不是泛化 JSON 格式,也不是常量值选择,而是有向字段关系的语义。这些失败会进入单独的 relation-direction hard set,但不会修改当前冻结测试集。
7.5 最重要的负结果
确定性残差求解器达到 48/48,优于训练模型的 45/48。
如果只希望让面试或论文数字好看,很容易忽略这个结果,继续宣称“模型学会了自动修复”。但这项实验真正改变了系统架构:
闭世界、可精确求解的事件字段 -> 使用符号求解器
开放世界、语义不完备的行为规划 -> 使用语言模型
候选是否正确 -> 使用独立 verifier
语言模型不应该替代已经达到 100% 的算法。它应该被放在规则没有给出完整答案、环境经验具有价值的地方。
7.6 历史 strong-hit 审计
本地还存在两组人工编写的多阶段拨测脚本及其告警平台响应。审计器对脚本和响应分别计算 SHA-256,并要求以下标记同时出现在同一个告警对象:
- 目标规则标记;
- 第一攻击阶段标记;
- 第二攻击阶段标记。
两组历史案例均通过审计:
| 历史案例 | 响应告警数 | 同告警满足全部标记 |
|---|---|---|
| 多阶段案例 A | 1 | 1 |
| 多阶段案例 B | 26 | 26 |
这些结果说明真实行为、遥测、关联和告警链路曾经成功闭环,也证明 verifier 能够读取真实证据。
但必须明确:
这两组脚本由人工编写,不是 Rule2Probe 模型生成,因此只能作为 verified experience seed,不能报告为模型行为级成功率。
8. 攻防工作中的实际价值
8.1 持续检测回归
Rule2Probe 可以把生产规则变成持续运行的回归测试。规则或 Agent 更新以后,不再只检查 YAML 和 EPL 是否能解析,而是重新执行被审核的最小行为计划,确认目标告警仍能到达。
它可以发现:
- Agent 不再采集某类事件;
- 字段 schema 发生漂移;
- 预处理丢失了必要字段;
- 排除条件被意外扩大;
- CEP 窗口没有收到前置事件;
- 关联主体或时间顺序发生变化;
- 告警投递链路中断。
8.2 授权紫队验证
对多阶段关联规则,系统可以复用已验证的叶子拨测,将多个低风险原语组合成同主体、正确顺序和正确时间窗口的攻击链。
分析人员审核的是一个短小、类型化的计划,而不是模型生成的任意脚本。计划执行以后,系统不仅报告“命中或未命中”,还会给出缺失的事件角色与谓词。
8.3 检测盲区定位
当真实事件没有命中规则时,可以把事件遥测与规则约束图做差,将原因分成四类:
- 传感器没有产生必要遥测;
- 字段映射或事件 schema 不一致;
- 排除条件过宽;
- 规则本身没有覆盖该行为。
这比让分析人员从告警平台、Agent 日志、规则代码和 CEP 窗口之间手工跳转更容易形成可复核结论。
8.4 最小反事实与规则脆弱性
在防守授权范围内,系统可以从正向 witness 生成只改变一个条件的 near-miss:
positive witness: 所有条件满足
minimal near-miss: 仅一个条件不满足
通过比较两者,可以识别规则是否过度依赖某个容易漂移的字段、工具名称或路径模式。这有助于加固规则,但同样可能暴露环境相关绕过面,因此具体反事实不进入公开数据集。
8.5 伴随工作的轻量自训练
本次适配器只有约 14MB,训练峰值统一内存 3.742GB。对窄场景来说,团队不需要不断训练一个巨大通用模型,而可以保持基座稳定,把本地验证经验固化进可插拔适配器。
这种模式的关键优势不是参数越少越好,而是:
- 训练成本足够低,可以重复实验;
- 每次能力变化可定位;
- 不同环境可以使用不同 Adapter;
- 更新失败时可以快速回滚;
- 内部知识不必全部写入基础模型参数。
9. 讨论
9.1 为什么不继续从随机参数训练
完全从零训练在研究上很有吸引力,但语言理解、规则语义和工具规划本身需要大量先验数据。10M 模型能够记住本地结构,却很难在几百条规则上形成可靠的开放世界行为知识。
因此更合理的分工是:
- 通用语言和基础推理由预训练基座提供;
- 本地协议与工作经验由轻量 Adapter 学习;
- 精确逻辑由编译器和求解器处理;
- 实时事实放在外部状态与检索系统;
- 成败由环境 verifier 判定。
9.2 为什么自由文本反思效果有限
自由文本反馈只告诉模型“失败了”,却没有确定错误位于哪个事件、哪个字段和哪个关系。模型需要同时猜测故障原因与修复动作。
结构化残差把搜索空间缩小到具体谓词,因此模型只需完成局部语义修复。这种反馈不仅训练效果更好,也更方便审计和统计。
9.3 为什么仍然需要模型
既然事件求解器达到 100%,为什么还要模型?
因为事件字段修复属于闭世界问题,而行为到遥测属于开放世界逆问题。规则会要求 processname=bash,却不会告诉系统在某个容器、某个父进程和某个 Agent 版本下,哪种审核动作才能稳定产生对应遥测。模型可以利用历史经验提出语义候选,verifier 则负责在当前环境中判断候选是否成立。
10. 有效性威胁与伦理边界
本文存在以下限制:
- 私有规则语料来自单一组织,不能证明跨企业泛化;
- 测试集只有 48 条反例,Bootstrap 区间仍然较宽;
- 当前只完成一个训练 seed,不能声称优化器种子鲁棒性;
- 编译器尚未完整支持嵌套 OR、复杂时间运算和私有函数;
- 事件 fixture 成功不能证明主机传感器保真;
- 两组 historical strong-hit 由人工脚本产生;
- 模型生成计划的前瞻在线 strong-hit 尚未完成。
Rule2Probe 的 near-miss 分析具有双重用途。系统因此采取以下限制:
- 只允许在授权环境执行;
- 模型只能使用审核原语;
- 所有执行记录留痕;
- 环境相关绕过细节不公开;
- strong-hit 与普通逻辑满足分开报告;
- 模型不能修改验证器或执行策略。
11. 下一阶段
下一轮实验将选择 30 条授权规则,在相同三次执行预算下比较:
- 人工拨测计划;
- 最近邻检索计划;
- 模型 one-shot;
- 模型 best-of-k;
- 结构化残差驱动的 CEGIS 修复。
行为级指标包括:
- DSL 编译率;
- 静态安全检查通过率;
- 执行成功率;
- 目标 strong-hit;
- 非目标旁路告警数;
- 中位人工修改次数;
- 每条成功规则的执行次数与总耗时。
离线训练将使用三个不同种子重复,并将行为轨迹按主机和规则家族隔离。当前三条跨字段关系失败会进入新增 hard set,但冻结测试集保持不变。
12. 结论
Rule2Probe 最初来自一个朴素问题:能不能训练一个足够小、能够伴随安全工作不断成长的模型?
真正做完实验以后,答案不再是“让模型自己不断训练自己”,而是建立一套严格的学习边界:
- 规则首先被编译,而不是只作为提示词;
- 行为计划受到类型系统和安全策略约束;
- 环境反馈被转换成结构化反例;
- 正确性由独立 verifier 判断;
- 只有可验证经验才能进入训练;
- 确定性算法优于模型时,直接使用确定性算法。
本次实验已经证明,结构化反例可以让一个本地 4B 量化模型在未见来源家族上显著改善修复协议;也证明大多数检测谓词并不是动作直接可控字段。后一个发现比单纯提升模型分数更重要,因为它明确了神经系统、符号系统和真实环境之间应该如何分工。
Rule2Probe 当前还不是一个已经完成全自动在线拨测的产品。它是一套具备真实数据、真实训练、冻结评测、负结果、统计检验和明确晋级门槛的研究原型。
这比再做一个会写脚本、会自我反思、却无法证明自己真的命中过规则的安全 Agent 更有价值。
参考文献
- Cai et al. From Texts to Rules: Generating Sigma Rules with Large Language Models from Cyber Threat Reports. USENIX Security 2026.
- Maiorano. From Attack Simulation to SIEM Rule: Deterministic Detection-as-Code Synthesis with Probe-Level Traceability. arXiv:2606.05252, 2026.
- Liu et al. Counterexample Guided Learning in the Large using Reasoning Agents. arXiv:2606.11521, 2026.
- Liu et al. From Intention to Practice: Towards Systematic Validation of NIDS Rule Enforcement. NSDI 2026.
- Qwen Team. Qwen3-4B-Instruct-2507 Model Card.
- Apple ML Research. MLX-LM.