Sigma规则
Sigma是一种开放、人类可读的规则格式,用于通过日志分析检测可疑或恶意行为。采用YAML编写且设计为平台无关,Sigma规则描述了常见攻击模式(如失败的登录尝试或异常的PowerShell活动),可跨不同安全工具和日志系统应用。
安全数据湖 将Sigma规则直接集成到其事件处理引擎中,使传入日志能自动匹配不断增长的威胁检测规则库。该功能支持实时告警和更快的事件响应,将威胁情报转化为可操作的检测结果。
本文档本节将介绍Sigma规则与Sigma关联规则;如何添加、导入和配置Sigma规则及关联规则;以及如何管理或修改现有规则。
Sigma规则与 安全数据湖
安全数据湖 为您提供灵活使用Sigma规则的方式。设计为平台无关的 安全数据湖 允许您编写或添加Sigma规则并应用于您的环境。此功能使这些规则具有高度可重用性,便于跨组织和团队共享。
通过 安全数据湖 ,您可以:
-
直接从SigmaHQ GitHub仓库或任何公共Git仓库导入规则。
-
从本地文件系统批量或单独上传规则。
-
使用内置YAML编辑器创建或修改规则。
-
克隆并自定义现有规则,使检测适配您的环境。
-
安排执行计划并将规则与特定数据流关联,进行定向分析。
-
关联多条规则以检测复杂或多阶段的攻击场景。
核心亮点
以下亮点总结了本文的关键要点:
-
安全数据湖 支持Sigma规则(一种基于YAML的通用格式)和Sigma关联分析,通过日志分析检测威胁。
-
可从SigmaHQ或任意Git仓库导入规则,本地上传规则,或使用内置YAML编辑器创建/编辑规则。
-
每条规则自动生成事件定义,支持实时告警和响应工作流。
-
Sigma关联分析通过识别跨时间跨日志事件的模式,扩展检测能力。
Sigma规则与关联分析
安全数据湖 支持两种基于Sigma的检测逻辑:Sigma规则和Sigma关联分析。二者结合为日志数据中的可疑活动检测提供精准度和深度。
Sigma规则
Sigma规则是Sigma框架中的基本检测单元,用于识别符合特定模式或条件的日志,非常适合检测环境中可能指示可疑活动的独立事件——例如登录失败、执行已知恶意命令或访问受限文件。
Sigma关联分析
关联分析通过跨时间分析多个日志事件的模式来扩展Sigma能力。它擅长识别单事件中不明显的复杂多阶段攻击,通过关联相关事件形成连贯检测,可发现需要上下文和累积的行为(如暴力破解、权限提升或横向移动)。
安全数据湖 支持 Sigma 2.0规范 :
|
关联类型 |
描述 |
|---|---|
|
|
同一来源的重复事件(例如同一IP地址的10次登录失败尝试)。 |
|
|
与单一字段关联的数值多样性。当特定字段(如
|
|
|
检测在给定时间范围内按顺序发生的特定事件类型序列(例如:用户禁用杀毒软件后下载可执行文件)。 |
创建或添加Sigma规则
可通过YAML编辑器手动添加规则、上传文件或从Git仓库导入。Sigma规则和Sigma关联功能会自动生成对应的事件定义,使您能够充分利用 安全数据湖 中的全套告警与自动化功能。详见 创建或添加Sigma规则 获取更多信息。
创建或添加Sigma规则
本文档仅适用于 安全数据湖 安全 功能模块。 安全数据湖 安全是 安全数据湖 集中式日志管理平台的组成部分,需单独授权许可。请联系 安全数据湖 销售 团队获取产品详情。
安全数据湖 支持Sigma规则(用于识别单个日志事件中的特定模式)和Sigma关联(通过关联时序相关的多个事件检测更复杂或分阶段的行为)。
本文阐述如何将Sigma规则集成至 安全数据湖 ,包括如何手动添加规则、从公共GitHub仓库导入规则,或从本地文件系统上传规则。本文还介绍了如何配置和部署Sigma关联规则。
添加Sigma规则的方法
有三种方式可以向 安全数据湖 添加Sigma规则:您可以手动添加、从Sigma HQ等公共Git仓库导入,或直接从本地文件系统上传。
注意
Sigma规则也可通过Illuminate功能包启用。详见 安全数据湖 Illuminate 获取更多信息。
手动添加规则
安全数据湖 提供YAML编辑器,您可以直接在 安全数据湖 界面中创建自定义规则。手动添加Sigma规则的步骤:
-
在 安全数据湖 中导航至安全布局,或点击通用布局中的 安全 选项卡。
-
进入 Sigma规则 > 规则 .
-
点击 添加规则 ,然后选择 手动添加 .
-
使用YAML编辑器创建或粘贴Sigma规则。
-
在以下字段中输入所需的配置值:
-
数据流:设置为包含您事件的流(例如windows-security-logs或auth-logs),以便规则评估正确的日志源。
-
流类别:这有助于大规模筛选或组织。
-
通知:您可以将此规则绑定到通知,以便在触发警报时接收电子邮件、Slack消息或webhook .
-
搜索时间范围:此字段指定用于评估事件的时间范围。
-
使用Cron调度:切换cron调度选项以自动化运行事件的过程,使其可以在固定时间、日期或其他间隔定期运行事件。
-
Cron表达式:cron表达式是由空格分隔的字段字符串。 安全数据湖 使用 Quartz cron语法 ,例如:
<秒><分钟><小时><日><月><星期><年>
-
-
执行频率:规则每5分钟运行一次以检查是否匹配。可根据需要调整。
-
搜索过滤器:添加搜索过滤器以进行更具体的匹配,而无需更改YAML(例如,仅统计域控制器上的故障)。
-
修复步骤:包括具体的、可操作的指令(表示为文本值)以解决已识别的问题。
-
-
点击 添加规则 以完成。
在您尝试保存并退出之前,编辑器会通知您是否缺少必填字段(例如标题)或某个字段应为特定类型(例如字符串)。如果您尝试使用不受支持的搜索修饰符或在条件字段中输入聚合,您将收到这些输入不受支持的通知。
查看 支持的Sigma规则修饰符和运算符表 以了解当前支持的功能、规则规范、 安全数据湖 要求但Sigma规范可能不要求的字段,以及不支持的条件和修饰符。
创建Sigma规则时,请注意还会创建事件定义。这是因为事件需要数据流和搜索窗口来知道在什么时间窗口内以及搜索频率才能正常运行。这些选项可以在编辑器中修改。
从公共GitHub仓库导入规则
要从Git仓库导入Sigma规则,您首先需要将源仓库添加到 安全数据湖 。本示例中,我们将从SigmaHQ的公开GitHub仓库导入规则。
将SigmaHQ仓库添加至 安全数据湖
-
在 安全数据湖 .
-
进入 Sigma规则 > Sigma仓库 .
-
点击 添加仓库 按钮。
-
填写仓库详细信息:
-
名称: 输入唯一仓库名称(例如
SigmaHQ). -
分支: 指定分支或留空使用默认分支。
-
Git仓库URI: 仓库URL(例如
https://github.com/MyGitRepo/myrepo.git). -
规则目录: 指定目录或留空以扫描整个仓库。
-
-
点击 确认 .
安全数据湖 会扫描并验证存储库中所有.yml或.yaml文件。仅符合Sigma规范格式且受支持的规则会被验证并可供导入。非.yml文件将被跳过。
-
从添加的存储库中导入所有Sigma规则,或选择要导入的规则。添加存储库后,它会出现在 Sigma规则GIT存储库 页面。
添加存储库时,
安全数据湖
会将Git数据拉取到运行
安全数据湖
服务器的系统磁盘上,以填充可用规则列表。操作完成后文件将被删除。默认情况下文件保存在临时目录,但具有特殊系统要求或权限限制的用户可选择自定义存储位置。您可通过在
安全数据湖
服务器配置文件中添加Sigma_git_repository_dir属性来修改目录,例如
Sigma_git_repository_dir=/etc/graylog/Sigma_data
.
从GitHub存储库导入规则
通过连接SigmaHQ GitHub项目等公共存储库,利用社区维护的现有规则。 安全数据湖 可扫描存储库、验证受支持的规则文件,并允许选择性导入或批量添加到您的环境中。
添加存储库后:
-
在 安全数据湖 .
-
前往 Sigma规则 > 规则 .
-
点击 添加规则 按钮,然后选择 从Git导入 .
-
在弹出的窗口中选择SigmaHQ仓库。
-
在SigmaHQ仓库的子目录中定位并选择要导入的规则。
-
点击 导入规则 ,所选规则将被导入至 安全数据湖 .
您还可以通过导航至 Sigma仓库 标签页,点击所选仓库右侧的省略号,并选择 全部导入 选项,以导入仓库中的所有规则。
从本地文件系统上传
若您已有本地存储或从其他系统导出的Sigma规则,可直接将其上传至 安全数据湖 .
-
在 安全数据湖 .
-
进入 Sigma规则 > 规则 .
-
点击 添加规则 按钮,然后从本地文件系统选择 上传规则 。
-
上传单个Sigma YAML文件或包含多个YAML文件的.zip压缩包。
-
点击 上传规则 以完成该流程。
创建带有正则表达式的Sigma规则
包含正则表达式(Regex)的Sigma规则同样可被导入、创建或使用,其方式与其他规则无异。
注意
使用正则表达式编写的Sigma规则必须遵循 Elasticsearch正则表达式语法规范 .
通过在选择字段名添加Sigma
re
修饰符来创建规则时,将触发
安全数据湖
使用正则表达式解析并构建内部查询。例如:
检测部分:
选择条件:
WorkstationName|re: '^[A-Za-z0-9]{16}$'
条件: 选择
这将生成如下内部查询:
WorkstationName:/[A-Za-z0-9]{16}/
SigmaHQ发布的规则中有大量包含技术层面不受支持的正则表达式。我们已针对以下两种情况进行适配, 安全数据湖 会将这些规则转换为Elasticsearch正则表达式语法:
-
数字匹配:
\d将被转换为[0-9] -
定位符:
^$例如^<regex>$Elasticsearch语法虽不支持定位字符,但查询默认具有定位特性。 安全数据湖 将移除不支持的锚定字符并添加通配符以实现相同效果。
-
^<regex>$将被转换为<regex> -
^<regex>将被转换为<regex>.* -
<regex>$将被转换为.*<regex>
有关锚定的更多信息,请参阅 Elasticsearch文档 .
-
注意
创建规则时可不验证其正则表达式语法正确性。这种情况下规则能成功创建,但可能无法达到预期效果。
正则表达式示例
以下是Sigma规则中使用正则表达式的示例:
-
已知某恶意软件会在
\Windows\System32目录下生成随机8字符文件名的.tmp文件。我们需要检测\Windows\System32目录中创建的恰好8字符长度的.tmp文件:检测项: 选择器: Image|endswith: '\svchost.exe' TargetFilename|re: '\\Windows\\System32\\[a-zA-Z0-9]{8}\.tmp$' 条件: 选择器 -
PowerShell滥用的一个特征是非常长的命令。我们需要检测1000字符或更长的PowerShell命令:
检测项: PowerShell选择器: - CommandLine|contains: - 'powershell' - 'pwsh' 长度选择器: CommandLine|re: '.{1000,}' 条件: 所有选择器
启用Sigma规则
在 Sigma规则 页面中,您可以通过切换 启用 按钮。您也可以使用 批量操作 功能来启用、禁用或删除Sigma规则。
创建Sigma关联规则
警告
当前, 安全数据湖 不支持多文档文件格式(即所有关联规则及关联规则本身包含在通过三个连字符分隔的单个.yml或.yaml文件中)。每条规则必须单独添加为独立的YAML文件。同样地, 安全数据湖 目前不支持 别名 字段(该字段用于跨不同事件类型的字段进行聚合)。
创建Sigma规则后,您可以通过配置Sigma关联规则来增强检测覆盖范围,以检测多阶段或链式威胁活动。添加关联规则的步骤与添加标准Sigma规则相同。您可以手动创建、从公共Git仓库导入或从本地文件系统上传。添加后,您需要定义关联逻辑,该逻辑基于时间、字段关系或共享属性来确定如何关联单个事件。
使用event_count关联事件
使用event_count或value_count关联时,用于聚合的Sigma规则无需启用。此关联仅利用该规则生成底层查询逻辑,不依赖该规则是否激活或生成事件。
例如,要创建一个识别用户多次登录失败尝试的event_count关联规则,您首先需要定义一个指定登录失败事件搜索条件的Sigma规则。
符合该条件的规则可能如下所示:
标题: 多次登录失败
ID: 0e95725d-7320-415d-80f7-004da920fc22
关联:
类型: event_count
规则:
- 登录失败尝试
分组依据:
- 用户名
时间跨度: 5分钟
条件:
大于等于: 5
级别: 高
状态: 实验性
该规则用于检测多次登录失败,其YAML结构说明如下:
-
类型 : event_count
-
此参数定义Sigma关联规则的类型。
-
-
规则 : 登录失败尝试
-
此处引用预定义的检测Sigma规则名称,可视为规则的逻辑来源。它是Sigma规则中的"name"字段(而非"title"字段)。规则"id"也可在此处使用。
-
-
分组依据 : 用户名
-
关联规则按用户范围限定。 安全数据湖 将统计每个用户的失败尝试次数。
-
-
时间窗口 : 5分钟
-
评估事件的时间范围。本例中设置为5分钟。
-
-
触发条件 : 大于等于: 5
-
若某用户在5分钟窗口期内出现5次及以上匹配事件,则触发该规则。
-
级别和状态值用于元数据标注,便于规则筛选与理解。
注意
Sigma关联规范要求必须设置timespan参数。但在 安全数据湖 中该参数为可选,且不用于配置 搜索时间范围 字段。 搜索时间范围 配置选项在执行关联分析时始终生效,无论规则中是否指定时间范围。
时序事件关联(temporal_ordered)
使用时序关联时,表单结构略有不同——由于不涉及数据流和搜索过滤器,检测到temporal_ordered规则时会自动移除这两个字段。启用时序关联时,所有被引用规则必须处于激活状态,因为关联引擎仅在每条规则都能主动生成事件时才会工作。
由于不支持别名,序列中所有规则必须使用相同的分组字段。该字段将作为事件键被关联引擎用于同一字段上的事件关联。
可使用数据中任何被索引为关键词或IP地址的字段进行结果分组。
时序关联示例
假设需要检测同一用户在多次登录失败后立即成功登录的情况。这需要两条Sigma规则:
-
多次登录失败(many-failed-logins):检测5分钟内同一用户5次及以上失败登录。
标题:多次登录失败 名称:many-failed-logins ID:0e95725d-7320-415d-80f7-004da920fc22 关联类型:event_count 引用规则: - failed-logon-attempt 分组字段: - user_name 时间窗口:5m 触发条件: gte: 5 级别:high 状态:experimental -
成功登录(successful-login):检测该用户的成功登录行为。
标题:5次失败后成功登录 ID:0e95725d-beef-415d-80f7-004da920fc22 关联类型:temporal_ordered 引用规则: - many-failed-logins - successful-login 分组字段: - user_name 时间窗口:1m
随后配置名为
5次失败后成功登录
的时序关联规则,同时引用many-failed-logins和successful-login两条规则。该关联以user_name为分组字段,时间窗口为
1
分钟,意味着成功登录必须在失败尝试后一分钟内发生,才能触发关联规则。
标题: 5次失败登录后的成功登录
ID: 0e95725d-beef-415d-80f7-004da920fc22
关联规则:
类型: 时序关联
包含规则:
- 多次失败登录
- 成功登录
分组字段:
- 用户名
时间窗口: 1分钟
为Sigma规则分配告警
您可以在Sigma规则工作流中为Sigma规则分配告警。当编辑Sigma规则时,会出现带下拉菜单选项的"通知"字段。若已配置现有告警,在创建或编辑Sigma规则时这些告警将显示在通知字段中。
批量添加告警
导入一个或多个规则时,您可以通过选择通知类型并点击"对所有规则应用此设置"按钮,批量添加告警类型到所有规则。也可为每个特定规则单独选择通知设置。
对于现有规则,可选择一个或多个后点击 批量操作 > 添加通知 。在此处可选择要添加的通知类型。
注意
Sigma规则的批量添加通知功能是严格叠加的:新通知会追加到现有通知中,原有规则的通知设置将保留不变。
创建或修改Sigma规则时,您可以选择指定修复步骤或对规则应用搜索过滤器。
您可以在事件定义、Sigma规则和异常检测器中指定修复步骤(以文本值表示)。此功能可让您为安全分析师制定触发告警时的可执行措施。当指定后,这些修复步骤会在安全事件触发时显著显示,指导您采取适当的后续行动。
更多信息请参阅 修复步骤 .
搜索过滤器让您能复用查询片段来优化搜索结果。若某些属性需要频繁包含或排除在事件定义外,可将其创建为搜索过滤器,便于跨不同事件定义应用。
例如,您可能拥有内部用户的IP地址列表。对于某些事件,您可能希望排除这些内部活动。为此可创建搜索过滤器,并在事件定义中使用它来过滤来自这些地址的所有消息。将此查询保存为搜索过滤器可轻松实现跨事件定义的复用。
关于创建和应用搜索过滤器的更多信息,请参见 搜索过滤器 .
支持的Sigma规则修饰符与运算符
安全数据湖 Illuminate 包含一个查找表,可将SigmaHQ仓库中Sigma规则的最常见字段转换为GIM字段。这种转换使得许多规则能够在 安全数据湖 Illuminate处理系统。若需通过添加或覆盖翻译项来自定义该查找表,可按照 文档 .
执行Sigma规则搜索查询时,系统会使用此查找表转换规则中的字段。若查找表未包含特定字段的对应值,则直接采用Sigma规则提供的原字段。
组件
|
组件 |
Sigma规范要求 |
|---|---|
|
标题 |
必填 |
|
ID |
可选 |
|
关联项 |
可选 |
|
状态 |
可选 |
|
描述 |
可选 |
|
作者 |
可选 |
|
参考文献 |
可选 |
|
日志源 |
必填 |
|
分类 |
可选 |
|
产品 |
可选 |
|
服务 |
可选 |
|
定义 |
可选 |
|
检测 |
必需 |
|
搜索标识符 |
可选 |
|
|
可选 |
|
|
可选 |
|
时间范围 |
可选 |
|
条件 |
必需 |
|
字段 |
可选 |
|
误报 |
可选 |
|
级别 |
可选 |
|
标签 |
可选 |
|
[任意自定义字段] |
可选 |
特殊字段值
|
特殊字段值 |
当前支持 |
|---|---|
|
|
不支持 |
|
|
不支持 |
|
值修饰符 |
|
|
|
支持 |
|
|
支持 |
|
|
不支持 |
|
|
不支持 |
|
|
支持 |
|
|
支持 |
|
|
不支持 |
|
|
不支持 |
|
|
不支持 |
|
|
不支持 |
|
|
不支持 |
|
|
支持 |
表达式
|
表达式 |
当前支持情况 |
|---|---|
|
逻辑
|
支持 |
|
|
支持 |
|
|
不支持 |
|
|
支持 |
|
否定运算符
|
支持 |
|
括号 |
支持 |
|
通配符(如
|
支持 |
|
管道符(已弃用)
|
不支持 |
|
聚合表达式(已弃用) |
不支持 |
|
近似聚合表达式(已弃用) |
不支持 |
管理Sigma规则
Sigma规则和Sigma关联通过将日志事件与已知攻击模式匹配来帮助检测威胁。当您 将规则添加到 安全数据湖 后,您可以使用 安全数据湖 内置工具对规则进行管理和维护,确保检测逻辑保持条理化、及时更新并与监控策略保持一致。
本文重点介绍 安全数据湖
管理规则
所有导入和用户自定义的Sigma规则会以表格形式展示在 Sigma规则 页面。每条记录包含关键元数据,如规则描述、运行状态和配置参数。 启用 列包含切换开关,可用于启用或禁用每条规则。
-
启用 :规则按预定计划运行。
-
禁用 :规则处于非活动状态,不会评估日志或生成警报。
管理Sigma规则的操作步骤:
搜索日志
每个导入 安全数据湖 的Sigma规则也可直接作为搜索执行。此操作会使用规则中的逻辑打开搜索视图。该功能在根据规则条件审查实时或历史匹配时非常有用,同时也有助于编写新规则和理解现有规则。
注意
为测试单个规则的性能,建议在激活Sigma规则前使用 搜索日志 选项。
编辑规则
修改现有规则的步骤:
-
点击规则旁边的省略号( ⋯ )。
-
从菜单选项中选择 编辑 。
-
更新YAML定义、元数据、关联数据流或执行计划。
-
点击 保存更改 以更新规则。
注意
来自 Illuminate内容包 的Sigma规则,其规则逻辑和配置设置均源自内容包,因此您只能编辑这些规则以添加通知和过滤器,而不能修改实际的规则逻辑。
克隆规则
若要创建现有规则的变体:
-
点击规则旁边的省略号( ⋯ )。
-
从菜单选项中选择 克隆 。
-
编辑克隆规则的内容以进行自定义。
-
通过点击 添加规则 按钮,保存具有唯一元数据或关联逻辑的新规则。
此功能适用于将标准规则适配到特定环境。新规则可独立修改,不会影响原始规则。
下载规则
-
点击规则旁边的省略号( ⋯ )。
-
从菜单选项中选择 下载 。规则将以.yaml文件格式下载。
此功能适用于备份、离线审查、在环境间传输规则或与团队共享。
编辑事件定义
每个Sigma规则在创建时都会自动关联一个 事件定义 ;但您可以通过以下方式编辑事件定义:
-
点击规则旁边的省略号( ⋯ )位于规则旁。
-
选择 编辑事件定义 从菜单选项中。此操作将打开用于规则触发时告警的关联事件定义。
-
修改事件定义附带的补救说明、添加自定义字段并编辑通知设置。
警告
切勿 更改事件定义的条件类型。此操作会破坏Sigma规则与事件定义之间的关联,导致规则无法正常运行。将事件类型更改为 过滤与聚合 或 关联 会创建一个完全不同的事件定义。
删除规则
此操作将永久从 安全数据湖 中删除该规则。删除前, 安全数据湖 会要求确认。
警告
删除规则会同时移除其检测逻辑并禁用所有关联告警。
批量操作
使用左侧复选框选择多个规则后应用批量操作。支持以下批量功能:启用、禁用、添加通知、下载和删除。
注意
请注意,批量 添加通知 功能仅为叠加操作。新通知会添加到现有规则中,原有通知仍会保留。
管理存储库
在位于 Sigma仓库 选项卡中,您可以执行以下操作。通过点击所选仓库右侧的省略号,然后从下列选项中选择所需操作,即可对单个仓库执行这些操作。
-
编辑 :更新用于获取规则的分支或目录。
-
全部导入 :将仓库中所有有效规则导入到 安全数据湖 .
-
刷新 :刷新可用规则列表,例如当Git仓库中添加或更改了规则时。
-
删除 :从 安全数据湖 中删除仓库元数据。这些规则将不再可供导入,但已添加的任何规则仍会保留。也可批量执行删除操作。选中多个仓库复选框,点击批量操作按钮,然后选择 删除 .
所有已添加的仓库会显示在 Sigma规则GIT仓库 页面。