5、规则创建指南
来源:https://github.com/SigmaHQ/sigma/wiki/Rule-Creation-Guide
https://github.com/SigmaHQ/sigma/wiki/Taxonomy
Sigma是一个非常灵活的标准,有很多可选领域。本指南将帮助您创建一个Sigma规则,它与我们存储库中的其他社区规则保持一致。
一、规则模板
最好的方法是使用与您计划编写的内容相近的现有规则。
确保以下字段在你想推送到公共存储库的规则中设置:
title: a short capitalised title with less than 50 characters
id: generate one here https://www.uuidgenerator.net/version4
status: experimental
description: A description of what your rule is meant to detect
references:
- A list of all references that can help a reader or analyst understand the meaning of a triggered rule
tags:
- attack.execution # example MITRE ATT&CK category
- attack.t1059 # example MITRE ATT&CK technique id
- car.2014-04-003 # example CAR id
author: Michael Haag, Florian Roth, Markus Neis # example, a list of authors
date: 2018/04/06 # Rule date
logsource: # important for the field mapping in predefined or your additional config files
category: process_creation # In this example we choose the category 'process_creation'
product: windows # the respective product
detection:
selection:
FieldName: 'StringValue'
FieldName: IntegerValue
FieldName|modifier: 'Value'
condition: selection
fields:
- fields in the log source that are important to investigate further
falsepositives:
- describe possible false positive conditions to help the analysts in their investigation
level: one of five levels (informational, low, medium, high, critical)
二、常见缺点
1、标题
不要在标题中使用像“检测”这样的前缀。
使用少于50个字符的短标题作为警示名称
为描述保留任何解释
使用标题大小写(例如:'可疑的PowerShell命令行'Suspicious PowerShell CommandLine而不是'可疑的PowerShell命令行'Suspicious powershell commandline)
坏的例子:
在不应该包含可执行文件的Windows文件夹中检测进程执行 Detects a process execution in a Windows folder that shouldn't contain executables(不必要的前缀,太长,全部小写,包含解释)
检测进程注入 Detects process injection (不必要的前缀,太通用,首字符小写)
好的例子:
Process Injection Using Iexplore.exe
Suspicious PowerShell Cmdline with JAB
Certutil Lolbin Decode Use
2、ID
没有任何已知的陷阱。我们在repo中使用可选字段id来提供一个永不更改的惟一标识符,而该规则的所有其他字段值可能会随着时间的推移而更改。您可以简单地在此网页上以UUID的形式创建一个ID。
3、状态Status
每一个新规则都是实验性的。经过几个月的高效使用,并且没有任何来自社区的负面反馈,它得到了状态测试。在使用了大约1年之后,除了过滤器没有进行重大修改,我们将规则归为稳定规则。
4、描述Description
最好的描述从检测....开始。请不要只使用选定的标题。试着尽可能好地描述当规则触发时它意味着什么。看到这种规则触发的分析师应该很好地理解匹配可能表明什么。
坏的例子:
规则检测w3wp.exe生成bitsadmin.exe
新的whoami进程开始
好的例子:
检测IIS web服务器服务可疑执行后台传输服务
检测whoami的执行,它可能是管理活动的一部分,但也经常被利用某些本地特权升级或远程代码执行漏洞的攻击者使用。whoami命令显示当前用户上下文。管理员通常知道他们使用哪个用户登录。攻击者在成功利用后通常需要评估用户上下文。
5、参考文献References
值必须是一个列表。
只使用网页或文档的链接。
不要链接到EVTX文件,PCAPs或其他原始内容
不包括MITRE ATT&CK技术的链接(我们使用标签)
列表中使用的链接可以是:
链接到博客文章或tweet
链接到某个hack工具的项目页面
链接到一个内置Windows工具的手册页
报告的链接
链接到更好地解释检测到的威胁的讨论
6、作者Author
作者字段是字符串,而不是列表
用逗号分隔的多个作者组合
如果你使用特殊字符@作为twitter的句柄,你必须使用上引号,例如author: '@cyb3rops'
你可在括号内加上供款类别,例如:作者:“约翰·高尔(想法),弗洛里安·罗斯(规则)”
7、日期
我们在公共规则中使用可选字段date来显示规则的创建日期,而不需要使用git-log。更改一个已经在主分支中发布的规则,需要使用一个名为modified的新字段来指示初始规则的修改。
我们使用格式YYYY/MM/DD或%Y/%m/%d作为Python的strftime指令。
更改修改日期的原因:
改变标题
变化检测部分
改变等级
改变logsource(罕见)
对于所有其他字段值的更改,不需要更改修改日期。
8、标签
在我们的公共规则集中,我们使用MITRE ATT&CK、CAR和CVE数字标签。
例子
标签:
——attack.credential_access
——attack.t1003.002
——car.2013 - 07 - 001
——cve.2020.10189
只使用小写标记
我们使用。或-作为标签名称中的分隔符
将空格替换为下划线_
9、日志源
这部分比较难。有两种选择:
(1)日志源已经存在
(2)在我们的repo中没有一条针对该日志源的规则
在案例1中,请使用这些规则中的一个作为模板。在情况2中,检查不同文件夹中的现有规则,以了解在本节中可以使用的三个标识符的使用情况:
产品(如linux、windows、cisco)
服务(如sysmon, ldapd, dhcp)
类别(如process_creation)
请注意,这些标识符是在sigmac(旧)或[pySigma](https://github.com/SigmaHQ/pySigma/)(新)使用的。/tools/config中的配置文件中使用的,用于将特定日志源的字段映射到规则中使用的字段。如果你创建了一个新的日志源,如果你能在所有当前配置文件中为不同的后端(qradar, helk, splunk等)添加适当的映射,那就太好了。否则其他用户或我们的维护者就得这么做。
10、检测
检测部分是非常灵活的,但是我们在这个部分中看到了一些常见的错误或样式问题,这些问题需要维护者重新定义。
如果列表只包含一个元素,则不要使用列表(参见下面的示例)
只使用小写标识符
如果你喜欢的话,可以把注释放在行中(使用两个空格来分隔表达式和注释,例如- 'cmd.exe' # command line)
不要使用正则表达式,除非你真的必须(例如,代替CommandLine|re: '\\payload。*\skeyset'使用CommandLine|包含|所有的值\有效负载和keyset)。
在新的源中使用日志源中出现的字段名称,删除空格并保留连字符(例如SAMUserAccount变成SAMUserAccount)
不要在您的条件中使用特定于SIEM的逻辑
创建一个拉请求(所有的拉请求都会被自动检查是否有语法错误、是否符合我们的标准以及是否有误报)
11、反斜杠
反斜杠在Sigma中有两个功能:
(1)反斜杠作为普通值
(2)反斜杠作为前缀来转义具有特殊含义的字符:反斜杠\本身,以及通配符*和?。
以这种方式处理反斜杠有一个好处,即包含单个反斜杠(常见情况)的值可以以普通方式表示。另一方面,一些极端情况需要额外的转义:
只包含单个反斜杠的值可以用普通方式表示:C:\Windows\System32\cmd.exe
不要用反斜杠转义单个反斜杠,从前面的例子中写入普通值,而不是C:\\Windows\\System32\\cmd.exe。
如果你想表达两个普通的反斜杠,可以使用其中的四个:\\\\foo\bar的结果值为\\foo\bar。
如果你想要两个反斜杠,可以写\\\\
如果你想要一个普通的通配符*作为结果值,写\*。
如果您想要一个普通的反斜杠后跟一个通配符*作为结果值,那么写入\\*。
如果你想要一个纯反斜杠后跟一个纯*作为结果值,写\\\*。
请注意,反斜杠在正则表达式中有特殊的语义。在某些情况下,像普通值一样需要更多的反斜杠。例子:
CommandLine|re: ...\\Microsoft...
结果:转义的M (\M)。在许多目标系统使用的perl兼容的正则表达式中,这是无效的,并会在新的Sigmatools中导致错误。解决办法:
CommandLine|re: ...\\\\Microsoft...
12、值修饰符
尽管在技术上可以任意链接值修饰符,但并不是所有的组合都有意义。应遵循以下排序规则:
添加通配符的修饰符(以with开头、以with结尾和包含)后面不能跟着编码修饰符(base64, base64offset),因为它们自己也会对通配符进行编码,导致其特殊功能的丢失。
值修饰符链不能以字符集编码修饰符(utf16, utf16le, utf16be和wide)结束。产生的值在内部表示为字节序列而不是文本字符串,并且包含在查询中通常难以处理的空字符。因此,后面应该有一个编码修饰符(base64, base64offset)。
通常,将re类型修饰符与其他修饰符组合在一起是没有意义的。
一般来说,所有修饰符都可以放在任意位置,因为所有修饰符都可以处理单值和列表,但按照惯例,这个修饰符应该放在末尾。
一些常见的组合是:
|contains|all:列表中的所有值都包含在日志值中。这对于以顺序无关的方式表示命令行参数非常有用。
|utf16|base64offset|包含:value是Base64编码的utf16,可以包含在值的任何位置(例如作为更大的Base64值的一部分)。
13、字段
这些字段在评估某一事件时非常有用。例如,知道一个进程的父进程的命令行参数中包含可疑字符串是有帮助的。
这些字段可以自动提取并呈现给分析人员,以加快分析速度。
14、假阳性
想想可能会触发规则的假阳性条件。这个列表应该包含对分析师有用的提示。例如,注释“删除影子副本的合法进程”可以提示分析师检查该系统上的备份进程,或询问任何涉及删除本地卷影子副本的异常管理活动。
15、等级
现有的四个级别可以进一步分为两类。
具有信息特征的规则,应该以列表或条形图的形式显示(低、中)
应该触发专用警报(高,严重)的规则
设置级别时请遵循以下原则:
关键级别的规则不应该触发假阳性,并具有高度相关性
对于需要人工审查的高相关性威胁的高级别触发规则(需要很少的假阳性>基线)
级别高和关键的规则表示事件(如果不是假阳性)
低级别和中等级别的规则表示可疑活动和违反策略
信息级规则具有信息性质,通常用于遵从性或相关性目的
16、工具
我们推荐使用visual Studio Codewith sigma Extension。