Sigma规则测试框架详解:test_rules.py如何保障规则质量

Sigma规则测试框架详解:test_rules.py如何保障规则质量

【免费下载链接】sigma 【免费下载链接】sigma 项目地址: https://gitcode.com/gh_mirrors/sig/sigma

Sigma规则(Sigma规则是一种通用的日志事件检测规则格式)作为威胁检测的核心资产,其质量直接决定检测效果。本文将深入解析Sigma项目的自动化测试框架,重点介绍test_rules.py如何通过多维度校验确保规则准确性与一致性,帮助安全分析师理解规则验证机制并编写高质量检测规则。

测试框架架构与核心组件

Sigma测试框架采用Python unittest框架实现,通过遍历指定规则目录(tests/test_rules.py中定义的path_to_rules数组包含rulesrules-emerging-threats等核心目录),对每个YAML格式的规则文件执行自动化校验。框架主要包含三大模块:

  • 规则遍历器:通过yield_next_rule_file_path方法递归扫描所有.yml文件,支持多目录并行检测
  • YAML解析器get_rule_yaml方法处理多文档YAML文件,get_rule_part实现规则片段精准提取
  • 校验器集合:12+专项测试用例(如重复过滤器检测、字段命名规范校验等)构成完整质量防线

Sigma测试框架工作流程

关键测试用例深度解析

1. 重复过滤器检测(test_look_for_duplicate_filters)

该测试通过递归检查规则检测逻辑中的列表型字段,识别重复过滤条件。核心逻辑位于tests/test_rules.py#L110-L164,采用以下策略:

  • 对普通列表进行小写归一化比较(忽略大小写差异)
  • 对含|base64/|re修饰符的特殊列表保留原始大小写
  • 通过collections.Counter统计重复项并生成详细报告

示例检测逻辑

duplicates = [i for i, count in collections.Counter(item_).items() if count > 1]
if duplicates:
    print(Fore.RED + "Rule {} has duplicate filters {}".format(file, duplicates))

2. 字段命名规范校验(test_field_name_with_space)

Sigma规范要求字段名使用下划线分隔而非空格。测试通过key_iterator方法遍历所有检测字段,扫描包含空格的非法命名(tests/test_rules.py#L166-L188)。常见错误案例:

  • Process Name 应改为 Process_Name
  • Event ID 应改为 Event_ID

3. 检测逻辑重复校验(test_duplicate_detections)

该测试通过对比不同规则文件的日志源定义、检测条件和逻辑结构,识别实质性重复的规则。核心比较逻辑包含:

  • 日志源信息标准化(移除definition字段后比较)
  • 检测条件逐条比对(忽略时间窗口差异)
  • 字段值类型一致性校验(列表与字典类型严格区分)

重复规则检测流程图

配置驱动的灵活验证机制

测试框架通过sigma_cli_conf.yml配置文件实现灵活的验证策略管理,主要功能包括:

  • 验证器开关:通过validators数组启用/禁用特定校验(tests/sigma_cli_conf.yml#L1-L9),如-tlptag表示禁用TLP标签校验
  • 规则例外清单:对特殊规则添加临时豁免,如tests/sigma_cli_conf.yml#L12为UUID021310d9-...的规则豁免escaped_wildcard检查
  • 分类豁免管理:按错误类型分组管理豁免规则,如number_as_string类别下的规则允许数字字符串形式

实战应用:如何运行与解读测试

基本执行流程

# 克隆项目仓库
git clone https://gitcode.com/gh_mirrors/sig/sigma
cd sigma/tests

# 运行完整测试套件
python test_rules.py

# 使用sigma-cli执行指定验证器
sigma check --validation-config sigma_cli_conf.yml ../rules

典型错误输出解读

当检测到规则文件存在重复过滤器时,框架会输出类似:

Rule rules/windows/process_creation/proc_creation_win_susp_powershell.yml has duplicate filters ['-enc', '-encodedcommand']

此时需检查对应规则的detection部分,移除重复的CommandLine过滤条件。

集成CI/CD流程

建议在PR流程中集成测试框架,通过以下方式:

  1. 在GitHub Actions中配置Python环境
  2. 执行test_rules.py并生成测试报告
  3. 设置测试通过率阈值(如100%通过方可合并)

扩展与定制测试框架

高级用户可通过两种方式扩展测试能力:

  1. 添加新测试用例:在TestRules类中添加以test_开头的方法,如检测特定攻击技术标签的test_attack_technique_validity

  2. 自定义验证器:参考tests/test_rules.py#L462-L481test_optional_license实现,添加业务特定的校验逻辑

Sigma测试覆盖率

总结与最佳实践

Sigma测试框架通过系统化的自动化校验,有效保障了数千条检测规则的质量一致性。建议规则编写者遵循:

  1. 增量测试:本地开发时先运行test_rules.py验证基本格式
  2. 关注警告:即使测试通过,也应检查YELLOW级别的警告信息(如文件名过短)
  3. 规范命名:严格遵循tests/test_rules.py#L546定义的文件名规范,如Windows规则以win_为前缀
  4. 合理豁免:对确需例外的规则,通过sigma_cli_conf.yml添加明确注释的豁免条目

通过本文介绍的测试框架,Sigma项目实现了"编写-验证-改进"的闭环质量管理,为全球安全社区提供了可靠的威胁检测规则资产。完整测试逻辑参见tests/test_rules.py,更多规则开发规范可参考CONTRIBUTING.md

【免费下载链接】sigma 【免费下载链接】sigma 项目地址: https://gitcode.com/gh_mirrors/sig/sigma

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值