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规则 > 规则 .
-
点击 添加规则 ,然后选择 手动添加 .
-
使用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
修饰符来创建规则,将触发
安全数据湖
使用正则表达式解释和构建内部查询。例如:
检测:
选择:
工作站名称|re: '^[A-Za-z0-9]{16}$'
条件: 选择
这将生成内部查询:
工作站名称:/[A-Za-z0-9]{16}/
SigmaHQ发布的许多规则包含技术上不支持的正则表达式。我们添加了两种情况, 安全数据湖 会将规则转换为Elasticsearch正则表达式语法:
-
数字:
\d将被转换为[0-9] -
锚点符号:
^$例如^<正则表达式>$Elasticsearch语法不支持锚点字符,但查询默认会进行锚定。 安全数据湖 将移除不支持的锚点字符并添加通配符以实现相同效果。
-
^<正则表达式>$将被转换为<正则表达式> -
^<正则表达式>将被转换为<正则表达式>.* -
<正则表达式>$将被转换为.*<正则表达式>
有关锚定的更多信息,请参阅 Elasticsearch官方文档 .
-
注意
创建规则时可不验证其正则表达式语法正确性。这种情况下规则虽能创建成功,但可能无法达到预期效果。
正则表达式示例
以下是Sigma规则中使用正则表达式的几个示例:
-
已知某恶意软件会在
\Windows\System32目录下生成随机8字符文件名的.tmp文件。我们需要检测在\Windows\System32目录中创建且文件名恰好为8个字符的.tmp文件:检测项: 选择器: Image|以结尾: '\svchost.exe' TargetFilename|正则匹配: '\\Windows\\System32\\[a-zA-Z0-9]{8}\.tmp$' 条件: 选择器 -
PowerShell滥用的一个特征是非常长的命令。我们需要检测任何长度达到或超过1000个字符的PowerShell命令:
检测: 选择条件_powershell: - 命令行|包含: - 'powershell' - 'pwsh' 选择条件_length: 命令行|正则: '.{1000,}' 条件: 所有选择条件*
启用Sigma规则
在 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"也可在此处使用。
-
-
group-by : user_name
-
关联范围限定为每个用户。 安全数据湖 将统计每个用户的失败尝试次数。
-
-
timespan : 5m
-
事件评估时间窗口,本例中为5分钟。
-
-
condition : gte: 5
-
若某用户在5分钟窗口期内匹配事件达5次或以上,则触发该规则。
-
级别与状态值用于元数据标注,便于规则筛选与理解。
注意
Sigma关联规范要求必须设置timespan参数。但在 安全数据湖 中该参数为可选,且不用于配置 搜索范围 字段。无论规则是否指定时间范围,执行关联时都会使用 搜索范围 配置选项。
使用temporal_ordered关联事件
使用temporal_ordered关联时,表单略有不同——因数据流与搜索过滤器不相关,检测到temporal_ordered规则时会移除这两个字段。使用此类关联时,所有引用规则必须启用,因为只有每条规则都能主动生成事件时关联引擎才会工作。
由于不支持别名,序列中所有规则必须使用相同的group-by字段。该字段被关联引擎用作事件键,以便在相同字段上关联事件。
可使用数据中任何被索引为关键词或IP地址的字段对结果分组。
temporal_ordered示例
假设需要检测同一用户在多次登录失败后立即成功登录的场景。这需要两条Sigma规则:
-
many-failed-logins:检测同一用户5分钟内5次以上登录失败。
title: 多次登录失败 name: many-failed-logins id: 0e95725d-7320-415d-80f7-004da920fc22 correlation: type: event_count rules: - failed-logon-attempt group-by: - user_name timespan: 5m condition: gte: 5 level: high status: experimental -
successful-login:检测同一用户的成功登录行为。
标题: 5次失败登录后的成功登录 id: 0e95725d-beef-415d-80f7-004da920fc22 关联规则: 类型: 时序有序 规则列表: - 多次失败登录 - 成功登录 分组依据: - 用户名 时间跨度: 1分钟
随后配置一个名为
5次失败登录后的成功登录
的时序有序关联规则,该规则同时引用多次失败登录和成功登录两条检测规则。此关联规则以用户名字段作为分组依据,并设置
1
分钟的时间跨度,这意味着成功登录必须发生在失败尝试后一分钟内才会触发关联警报。
标题: 5次失败登录后的成功登录
id: 0e95725d-beef-415d-80f7-004da920fc22
关联规则:
类型: 时序有序
规则列表:
- 多次失败登录
- 成功登录
分组依据:
- 用户名
时间跨度: 1分钟
为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规则也可直接作为搜索执行。此操作会使用规则逻辑打开搜索视图。该功能既可用于基于规则条件审查实时或历史匹配项,也有助于编写新规则和理解现有规则。
注意
为测试单个规则性能,建议在激活Sigma规则前使用 搜索日志 选项。
编辑规则
修改现有规则步骤:
-
点击规则旁的省略号( ⋯ )。
-
选择 编辑 从菜单选项中选择。
-
更新YAML定义、元数据、关联数据流或执行计划。
-
点击 保存更改 以更新规则。
注意
来自 Illuminate内容包 的Sigma规则其规则逻辑和配置设置均源自内容包,因此您只能编辑这些规则以添加通知和过滤器,而无法修改实际规则逻辑。
克隆规则
如需基于现有规则创建变体:
-
点击规则旁边的省略号( ⋯ )。
-
从菜单选项中选择 克隆 。
-
编辑克隆规则的内容以进行自定义。
-
通过点击 添加规则 按钮,使用唯一元数据或关联逻辑保存新规则。
此功能适用于将标准规则适配到特定环境。新规则可独立修改且不影响原始规则。
下载规则
-
点击规则旁边的省略号( ⋯ )。
-
从菜单选项中选择 下载 。规则将以.yaml文件格式下载。
此功能适用于备份、离线审查、跨环境传输规则或与团队共享。
编辑事件定义
每条Sigma规则在创建时都会自动关联一个 事件定义 ;但您可以通过以下方式编辑事件定义:
-
点击规则旁边的省略号( ⋯ )。
-
从菜单选项中选择 编辑事件定义 。该操作会打开用于规则触发时告警的关联事件定义。
-
可修改事件定义附带的修复说明、添加自定义字段并编辑通知设置。
警告
切勿 更改事件定义的条件类型。此操作会破坏Sigma规则与事件定义间的关联,导致规则失效。若将事件类型改为 过滤与聚合 或 关联分析 ,将生成一个完全不同的事件定义。
删除规则
此操作会从 安全数据湖 永久删除该规则。删除前, 安全数据湖 将要求确认操作。
警告
删除规则会同时移除其检测逻辑,并禁用所有关联告警。
批量操作
使用左侧复选框选择多条规则后,可执行批量操作:启用、禁用、添加通知、下载及删除。
注意
请注意,批量 添加通知 功能是严格叠加的。新通知会添加到现有规则中,且规则的现有通知将保留。
管理存储库
在位于 Sigma存储库 标签页的已导入存储库列表中,您可以执行以下操作。通过点击所选存储库右侧的省略号,然后从下列选项中选择所需操作,可对单个存储库执行这些操作。
-
编辑 :更新用于获取规则的分支或目录。
-
全部导入 :将存储库中所有有效规则导入 安全数据湖 .
-
刷新 :刷新可用规则列表,例如当Git存储库中添加或更改了规则时。
-
删除 :从 安全数据湖 中删除存储库元数据。规则将不再可供导入,但已添加的任何规则仍会保留。删除也可批量操作。选中多个存储库复选框,点击批量操作按钮,然后选择 删除 .
所有已添加的存储库均显示在 Sigma规则GIT存储库 页面。