我是Infosecurity SOC(安全运营中心)负责人Sergey Rublev。
在本文中,我将详细研究雄心勃勃的
Sigma Rules项目,其座右铭是:“用于日志的Sigma就像流量的Snort一样,对于文件就像Yara一样。”

这将涉及三个方面:
- Sigma-rule语法在维护威胁检测脚本的知识库中的适用性
- 盒装SIEM系统的规则生成工具的功能
- Sigma规则公共存储库中当前内容的SOC值
曾几何时,在遥远的星系中
一切始于几年前的树木大,而我们的监控团队仍然很小。 我们面临很多问题,几乎所有成长为三人团队的团队都需要经历这一过程。

出现问题的原因不同:
如果您必须接受SIEM某人已经配置的支持,问题的数量会像雪崩般增加。
用例库
建立监控中心的全球经验已经提出了解决混乱的解决方案,其名称是案例研究库。 每种情况的目的都是在信息安全监视框架中全面描述问题的解决方案。
在每种情况下积累的知识组成可能有所不同;我们从以下几组着手:
- 目标 -案件解决的任务
- 威胁 -检测规则试图检测的威胁。
- 利益相关者 -对此规则感兴趣的人:IB / IT /商业
- 数据要求 -识别威胁所需的数据集
- 逻辑 -威胁检测规则逻辑
- 测试 -一种测试检测规则正确性的算法
- 优先级 -根据案例处理事件的优先级(通常根据成功实施的威胁造成的潜在损害来计算)
- 输出 -解析警报的操作列表,解析过程正确退出的描述以及解析结果中记录的数据组成
用于检测与僵尸网络管理服务器(通常称为C&C或仅称为C2)的通信的任务的用例示例:

该示例已大大简化;实际上,只要有适当的描述,案例就会发展成多页文档。
那时,当案例数超过几十时,我们开始寻找现成的工具来维护这样的知识库,最好是除了对人类友好之外,还具有某种机器友好的工作界面。
西格玛项目
在基于事件检测规则的知识库中,Sigma项目当然值得考虑。 它始于2016年,我几乎从一开始就一直关注它。
实际上,该项目包括
- 适马自己统治
- 用于将规则转换为各种SIEM系统查询的实用程序
SIEM列表令人印象深刻:几乎所有流行的事件分析解决方案都存在。 关于所有细节的详细信息和顺序。
规则语法
Sigma规则是YAML文档,描述了检测特定攻击的方案。 从语法上讲,规则包括以下块:
元信息
描述性部分,用于结构化和简化对必要规则的搜索。
title: Access to ADMIN$ Share description: Detects access to $ADMIN share author: Florian Roth falsepositives: - Legitimate administrative activity level: low tags: - attack.lateral_movement - attack.t1077 status: experimental
我还想指出,根据MITER ATT&CK方法,已经提供了许多与攻击技术的链接的规则。
数据源声明
基于实现了检测逻辑的事件的源描述。
logsource: product: windows service: security
从句法上讲,既可以描述特定产品的最终服务,又可以描述整个系统类别。
处理逻辑声明
在检测逻辑级别,描述了以下内容:
逻辑可以很简单,例如,施加在一组字段上的条件:
detection: selection: EventID: 5140 ShareName: Admin$ filter: SubjectUserName: '*$' condition: selection and not filter
而且很复杂:
detection: selection1: EventID: - 529 - 4625 UserName: '*' WorkstationName: '*' selection2: EventID: 4776 UserName: '*' Workstation: '*' timeframe: 24h condition: - selection1 | count(UserName) by WorkstationName > 3 - selection2 | count(UserName) by Workstation > 3
该语言的表达方式虽然不是通用的,但仍然很广泛,可以让您描述大量识别攻击的案例。
规则开发工具
除了您最喜欢的YAML文本编辑器之外,还可以使用SOC Prime的WEB UI,它使您既可以验证已编写规则的语法,又可以从图形块手动创建规则。

Sigma作为知识库工具
总结一个简短的总结。
目前,规则的语法主要集中在威胁检测逻辑的描述上,并不打算对用例进行全面描述;因此,仅使用Sigma规则来维护完整的库将不起作用。
对于我们选择的用例结构,Sigma仅关闭一半(目标,数据需求,逻辑和优先级)。

转换为各种SIEM
由于我们是SOC服务的服务提供者,因此按照相关规则以某种通用格式保留我们所有的开发,并在实施阶段转换为所需的SIEM格式的想法对我们来说很有吸引力。
该项目包括控制台实用程序,用于生成各种SIEM格式的事件请求。 考虑一下什么是转变,什么是她的内幕。

转换分为三个阶段:
- 解析规则-我认为这很明确:YAML文档被分类为组件块
- 简化为SIEM分类法
此阶段的必要性与以下事实有关:SIEM系统中的规范化以稍微不同的方式实现,因此需要将Sigma规则的声明简化为所选SIEM事件的分类法 - SIEM的请求生成
为了使此阶段正常工作,需要另一个组件-该SIEM的后端。
实际上,后端是转换实用程序的插件,其中包含用于转换为SIEM中最终请求格式的逻辑。 检测和日志源块在转换时会考虑到先前叠加的字段映射,并添加了其他特定于SIEM的信息。
结果,启动转换实用程序如下所示:

传递了以下参数:
SOC Prime还具有用于转换功能的现成UI(
uncoder.io )

转换的陷阱
- 在研究了转换机制之后,我们遇到了很大的限制,这使我们无法将所有开发成果都转换为Sigma格式:
- 转换器仅根据请求运行。 SIEM中的关联规则会影响更多方面:时间窗口,聚合,基于已识别警报结果的操作
- 不考虑单个SIEM的关键功能,例如ActiveList。
- 字段映射的详细信息不足-作为映射配置的一部分,仅描述了少数几个源的字段;因此,对于数据库中数十种不同类型的事件源的规则,您将不得不投入大量精力来编写映射。
规则库
让我们看看可公开获得的Sigma规则库的含义。 当前,内容正在积极地添加到两个存储库中:
存储库中的规则具有非零交集。
SOC Prime有许多适用于付费订阅的规则;我不在本文中讨论它们的内容。
对于分析,我们需要
适用于Python的
sigmatools库和一些编程技巧。
要将规则从目录解析并加载到字典中,可以使用以下代码:
from sigma.parser.collection import SigmaCollectionParser import pathlib import itertools def alliter(path): for sub in path.iterdir(): if sub.name.startswith("."): continue if sub.is_dir(): yield from alliter(sub) else: yield sub def get_inputs(paths, recursive): if recursive: return list(itertools.chain.from_iterable([list(alliter(pathlib.Path(p))) for p in paths])) else: return [pathlib.Path(p) for p in paths] BASE_PATH = [r'sigma\rules'] path_list = get_inputs(BASE_PATH, True) rules_map = {} for sigmafile in get_inputs(BASE_PATH, True): f = sigmafile.open(encoding='utf-8') parser = SigmaCollectionParser(f) rule = next(iter(parser)) rules_map[rule['title']] = rule
对相同的规则进行重复数据删除,出现以下情况:

作为唯一规则列表的一部分,我们获得以下分布:
按事件源类型:更大的统计数据
- 窗户〜80%
- 西蒙〜53%
- 代理〜8%
- Linux〜4%
基本上,当前的内容主要集中在Windows和Sysmon系统上,尤其是其余系统的规则很少。
通过内容可用性:事实证明,Sigma-rules的开发者标记为稳定的不到所有现有规则的20%。
总结一下
在公开可用的资源中,有很多规则。 它们会定期更新,并且会很快出现检测指标的规则,有时甚至是最受瞩目的APT公司的技术人员。
在现实生活中应用规则有很多限制:
- Microsoft Sysmon有很多规则,在企业中很少使用。
- 有许多实际执行IoC检查的规则(哈希,IP地址,URL,用户代理)。 这样的规则很快就会过时,并且找到比规则更有效的IoC机制。
- 在调试之前,对高质量的测试分别有很多实验内容和附加要求。
在Infosecurity,我们将Sigma规则的内容用作其他知识来源,以更有效地检测事件。 如果发现一些有趣的东西,我们将在关联规则的框架内实现该规则,该规则同时考虑了规则所基于的内核(Apache Spark)以及基础结构的细节以及我们使用的保护手段。