编写 Sigma 规则
可移植的检测规则语法。
编写 Sigma 规则 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
什么是西格玛
西格玛是一种通用且不依赖供应商的、用于基于日志进行检测的签名格式。您只需在 YAML 中编写一次检测逻辑,随后即可将其转换为斯普伦克 SPL、弹性查询、哨兵 KQL 以及许多其他后端所使用的查询。
西格玛之于日志检测,正如 YARA 之于文件检测:是一种可移植的通用语言。它让团队能够公开共享规则,并避免针对每个 SIEM 重写同一个思路。
规则的结构
西格玛规则是一个包含必需和可选部分的 YAML 文档。必不可少的部分是 title、logsource 和 detection。
title: Suspicious PowerShell Encoded Command
id: 7e3f3c1a-1f2b-4c3d-9a8b-1234567890ab
status: experimental
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\\powershell.exe'
CommandLine|contains: '-enc'
condition: selection
level: highlogsource 块
logsource 块告诉转换器规则适用于哪些日志。它不会直接查询数据,而是在转换过程中选择正确的字段映射和索引。
常见键:
product— 例如 windows、linux、awscategory— 例如 process_creation、network_connection、file_eventservice— 例如 sysmon、security、sshd
请选择数据所支持的最具体组合,以便流水线正确映射字段。
选择项与搜索标识符
在 detection 中,您可以定义一个或多个命名的搜索标识符(选择项)。每个标识符都是一组字段到值的条件映射。一个选择项中的多个字段通过逻辑 AND 连接。
在这里,两个条件都必须为真,selection 才能匹配。
detection:
selection:
EventID: 4688
NewProcessName|endswith: '\\whoami.exe'
condition: selection字段修饰符
修饰符可以细化值的匹配方式。它们位于字段名后的竖线之后。
contains— 子字符串匹配startswith/endswith— 锚定匹配all— 列表中的每个值都必须存在re— 正则表达式base64offset|contains— 匹配经过 base64 编码的子字符串
修饰符按从左到右的顺序串联,并依次应用。
detection:
selection:
CommandLine|contains|all:
- 'Invoke-WebRequest'
- 'DownloadString'
condition: selection列表与映射中的 OR / AND
选择项中的逻辑遵循两条规则:
- 一个字段下的值列表表示 OR — 任意值匹配即可。
- 包含多个字段的映射表示 AND — 所有字段都必须匹配。
在下面的示例中,Image 可以匹配任意一个二进制文件,而 User 还必须等于 SYSTEM。
detection:
selection:
Image|endswith:
- '\\net.exe'
- '\\net1.exe'
User: 'SYSTEM'
condition: selection条件表达式
condition 使用布尔逻辑组合您命名的选择项。您可以在这里表达过滤条件和排除条件。
运算符包括 and、or、not、括号,以及 count() 等聚合函数。您还可以使用 1 of selection* / all of selection*,按前缀引用标识符组。
detection:
selection:
EventID: 4625
timeframe: 5m
condition: selection | count() by SourceIp > 10过滤噪声
要抑制已知正常活动,请定义一个单独的标识符,并在条件中使用 not 将其排除。这样既能保持恶意逻辑清晰,也能明确列出排除项。
在这里,规则会在 rundll32 生成网络连接时触发,但已知的正常更新进程除外。
detection:
selection:
Image|endswith: '\\rundll32.exe'
filter_legit:
ParentImage|endswith: '\\MicrosoftEdgeUpdate.exe'
condition: selection and not filter_legit用于研判的元数据
除了逻辑之外,优质规则还应包含有助于响应人员快速采取行动、帮助工程师维护覆盖范围的元数据。
level— 信息、低、中、高、严重tags— ATT&CK 技术,例如 attack.t1059.001falsepositives— 已知的正常触发因素references— 威胁报告或文档author和date
编写这些字段只需几分钟,却能在事件期间节省数小时。
关联规则
单事件规则无法表达多步骤攻击。西格玛关联规则会在一段时间内组合多个基础规则,以捕获序列和模式。
支持的类型包括 event_count(时间窗口内的 N 次匹配)、value_count(不同值的数量,例如大量失败登录的用户)和 temporal(先匹配规则 A,再匹配规则 B)。这样,您就可以检测例如紧接在大量失败登录之后发生的成功登录。
name: bruteforce_then_success
correlation:
type: temporal
rules: [failed_logins, successful_login]
group-by: [SourceIp, TargetUser]
timespan: 10m转换为后端
使用西格玛命令行工具,您可以将规则转换为目标查询语言。处理流水线会将西格玛字段名映射到您的实际架构。
输出结果是可以直接部署的查询,您可以将其粘贴到系统中,或通过 API 推送。
sigma convert -t splunk -p sysmon \
-f default rule.yml
# Example output (Splunk SPL):
# Image="*\\powershell.exe" CommandLine="*-enc*"快速检查
检查您对西格玛检测逻辑的掌握程度。
总结
现在,您已经能够编写可移植的西格玛规则:
logsource选择适用的日志和字段映射- 选择项是命名的字段-值条件(字段 = AND,值列表 = OR)
- 使用 contains、endswith、all、re 等修饰符细化匹配
condition使用 and/or/not、过滤条件和聚合函数连接选择项- 单独的过滤标识符用于排除已知正常的噪声
- 元数据(level、tags、falsepositives)可加快研判
sigma convert将规则编译为您的 SIEM 后端所需的格式
接下来,您将使用 MITRE ATT&CK 将这些规则关联到对手技术。
常见问题解答
「编写 Sigma 规则」课时是免费的吗?
是的 — 「编写 Sigma 规则」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「编写 Sigma 规则」这节课中我会学到什么?
可移植的检测规则语法。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「编写 Sigma 规则」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 检测即代码原则
- 编写 Sigma 规则
- 映射到 MITRE ATT&CK
- 测试与调优检测