Sigma规则测试框架详解:test_rules.py如何保障规则质量
【免费下载链接】sigma 项目地址: https://gitcode.com/gh_mirrors/sig/sigma
Sigma规则(Sigma规则是一种通用的日志事件检测规则格式)作为威胁检测的核心资产,其质量直接决定检测效果。本文将深入解析Sigma项目的自动化测试框架,重点介绍test_rules.py如何通过多维度校验确保规则准确性与一致性,帮助安全分析师理解规则验证机制并编写高质量检测规则。
测试框架架构与核心组件
Sigma测试框架采用Python unittest框架实现,通过遍历指定规则目录(tests/test_rules.py中定义的path_to_rules数组包含rules、rules-emerging-threats等核心目录),对每个YAML格式的规则文件执行自动化校验。框架主要包含三大模块:
- 规则遍历器:通过
yield_next_rule_file_path方法递归扫描所有.yml文件,支持多目录并行检测 - YAML解析器:
get_rule_yaml方法处理多文档YAML文件,get_rule_part实现规则片段精准提取 - 校验器集合:12+专项测试用例(如重复过滤器检测、字段命名规范校验等)构成完整质量防线
关键测试用例深度解析
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_NameEvent 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为UUID
021310d9-...的规则豁免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流程中集成测试框架,通过以下方式:
- 在GitHub Actions中配置Python环境
- 执行
test_rules.py并生成测试报告 - 设置测试通过率阈值(如100%通过方可合并)
扩展与定制测试框架
高级用户可通过两种方式扩展测试能力:
-
添加新测试用例:在
TestRules类中添加以test_开头的方法,如检测特定攻击技术标签的test_attack_technique_validity -
自定义验证器:参考tests/test_rules.py#L462-L481的
test_optional_license实现,添加业务特定的校验逻辑
总结与最佳实践
Sigma测试框架通过系统化的自动化校验,有效保障了数千条检测规则的质量一致性。建议规则编写者遵循:
- 增量测试:本地开发时先运行
test_rules.py验证基本格式 - 关注警告:即使测试通过,也应检查
YELLOW级别的警告信息(如文件名过短) - 规范命名:严格遵循tests/test_rules.py#L546定义的文件名规范,如Windows规则以
win_为前缀 - 合理豁免:对确需例外的规则,通过
sigma_cli_conf.yml添加明确注释的豁免条目
通过本文介绍的测试框架,Sigma项目实现了"编写-验证-改进"的闭环质量管理,为全球安全社区提供了可靠的威胁检测规则资产。完整测试逻辑参见tests/test_rules.py,更多规则开发规范可参考CONTRIBUTING.md。
【免费下载链接】sigma 项目地址: https://gitcode.com/gh_mirrors/sig/sigma
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






