搜"Sigma 规则"的时候,搜索引擎经常先给你一堆可编程电源的参数手册——那个叫 ultra sigma 的系列在工业电源圈子里太出名了,噪音大到能把正经的检测规则内容挤到第二页。我最早写检测规则那几年也走过类似的弯路:手里只有一套思路,碰到文件就用文件特征去匹配,碰到日志也想拿同一套逻辑硬套,结果规则写了一大堆,真正能落地的没几条。Yara、Snort、Sigma 这三套规则体系各自守着自己的观测面,它们不是可以互相替代的东西,而是三种完全不同的"提问方式"。这篇内容会把三者的规则语法、写法取舍、调优思路和协同方式讲透,适合刚开始接触检测规则的安全运营同学、SOC 分析师,也适合已经会写但总被误报折磨的同行。
1. 三条检测线各守一段,混着用只会白忙
1.1 先搞清楚每种规则到底"看得到"什么
Yara 的输入是一个文件或者一段内存镜像,它能看到的只有字节。这决定了它的判断依据必须从文件本身提取:字符串常量、十六进制序列、PE 头字段、导入表、节区名、熵值分布。它不知道这个文件是谁传的、从哪个 IP 来的、什么时候被执行的,这些都超出了它的观测范围。
Snort 的输入是网络数据包,而且是经过流重组之后的会话流。它能看到协议栈、方向、端口、载荷内容和它们的相对位置关系,但它看不到磁盘上有什么文件,也看不到主机上启动了哪个进程。
Sigma 的输入是日志记录,本质上是已经被人写过一遍的结构化文本。它能看到的字段取决于日志源本身——Windows 安全日志里有 EventID 和 TargetUserName,进程创建日志里有 Image 和 CommandLine,云平台的审计日志里又是另一套字段名。Sigma 的价值在于,它把这些五花八门的字段名抽象成了一层中间语言。
搞清楚这三条边界之后,很多困惑就自然消解了。有人想用 Yara 去检测"有人在短时间