Zircolite开发者指南:如何扩展自定义SIGMA规则和转换函数
【免费下载链接】ZircoliteA standalone SIGMA-based detection tool for EVTX, Auditd and Sysmon for Linux logs项目地址: https://gitcode.com/gh_mirrors/zi/Zircolite
Zircolite是一款基于SIGMA规则的独立检测工具,专为EVTX、Auditd和Sysmon for Linux日志设计。本指南将详细介绍如何为Zircolite扩展自定义SIGMA规则和转换函数,帮助开发者根据特定需求增强日志检测能力。
为什么扩展Zircolite?
Zircolite作为一款灵活的日志检测工具,默认提供了丰富的规则和转换功能,但在实际应用中,用户可能需要:
- 检测特定环境中的独特威胁
- 处理自定义格式的日志数据
- 集成组织内部的安全策略
- 优化特定场景下的检测性能
通过扩展SIGMA规则和转换函数,您可以充分利用Zircolite的架构优势,打造更贴合实际需求的日志分析解决方案。
Zircolite日志处理和检测工作流程概览
扩展自定义SIGMA规则
SIGMA规则是Zircolite检测能力的核心,通过编写自定义SIGMA规则,您可以定义新的威胁检测逻辑。
SIGMA规则基本结构
一个标准的SIGMA规则文件包含以下关键部分:
title: 规则名称id: 唯一标识符status: 规则状态(如stable、test)description: 规则描述author: 规则作者date: 创建日期modified: 修改日期logsource: 日志来源定义detection: 检测逻辑falsepositives: 误报情况说明level: 威胁级别
创建自定义SIGMA规则文件
在项目的
rules/目录下创建新的规则文件,建议遵循命名约定:rules_<platform>_<description>.json定义规则基本信息:
{ "title": "检测可疑的PowerShell Base64编码命令", "id": "custom-ps-base64-001", "status": "test", "description": "检测包含Base64编码字符串的PowerShell命令行", "author": "Your Name", "date": "2023-07-15", "modified": "2023-07-15", "logsource": { "category": "process_creation", "product": "windows" } }- 添加检测逻辑:
"detection": { "selection": { "Image|endswith": "\\powershell.exe", "CommandLine|contains": ["-EncodedCommand", "FromBase64String"] }, "condition": "selection" }- 完成规则定义,包括误报说明和威胁级别:
"falsepositives": [ "合法的系统管理脚本" ], "level": "high"测试自定义SIGMA规则
Zircolite提供了规则测试工具,可以验证您的自定义规则:
python zircolite.py --test-rules rules/custom_rules.json -t tests/fixtures/sample_events.json规则文件存放位置
自定义规则文件应放在项目的rules/目录下,系统会自动加载该目录中的所有规则文件:
- rules/ - 规则文件存放目录
- rules/rules_windows_generic.json - Windows通用规则示例
- rules/rules_linux.json - Linux规则示例
开发自定义转换函数
转换函数用于对日志字段进行预处理和转换,以便于规则匹配和数据分析。Zircolite支持通过Python脚本扩展转换功能。
转换函数工作原理
转换函数在日志处理流程中执行,主要完成以下任务:
- 字段重命名和标准化
- 数据格式转换(如编码解码)
- 提取关键信息
- 计算衍生指标
- 检测特定模式
Zircolite的转换配置在config/fieldMappings.yaml文件中定义,而具体的转换实现则位于config/transforms/目录下的Python文件中。
Zircolite日志转换和处理流程
创建自定义转换函数
在
config/transforms/目录下创建新的Python文件,文件名建议与转换功能相关,如commandline_base64detect.py实现转换函数,遵循以下格式:
def transform(param): """ 检测命令行中的Base64编码模式 参数: param (str): 原始命令行字符串 返回: str: 检测结果,如果找到Base64模式则返回"BASE64_DETECTED",否则返回空字符串 """ import re # Base64编码模式正则表达式 base64_pattern = r'(?:[A-Za-z0-9+/]{4}){2,}(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?' # 搜索命令行中的Base64模式 if re.search(base64_pattern, param): return "BASE64_DETECTED" return ""配置转换函数
- 编辑config/fieldMappings.yaml文件,添加转换定义:
transforms: CommandLine: - info: "检测命令行中的Base64编码" type: python code: | def transform(param): import re base64_pattern = r'(?:[A-Za-z0-9+/]{4}){2,}(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?' if re.search(base64_pattern, param): return "BASE64_DETECTED" return "" alias: true alias_name: "CommandLine_Base64Detected" source_condition: - evtx_input - json_array_input - json_input- 在
enabled_transforms部分启用新转换:
enabled_transforms: # ...其他转换 - CommandLine_Base64Detected转换函数类型和最佳实践
Zircolite支持多种类型的转换函数,根据用途可以分为:
数据提取型:从复杂字段中提取关键信息
def transform(param): # 从路径中提取文件名 return param.split('\\')[-1] if '\\' in param else param.split('/')[-1]模式识别型:检测特定攻击模式或可疑行为
def transform(param): # 检测可疑的注册表路径 if 'HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run' in param: return "PERSISTENCE_RUN_KEY" return ""格式转换型:转换数据格式以便于分析
def transform(param): # 将十六进制字符串转换为ASCII try: return bytes.fromhex(param).decode('ascii') except: return param计算型:计算衍生指标如熵值、长度等
def transform(param): # 计算字符串熵值 import math from collections import Counter if not param: return "0.0" freq = Counter(param) entropy = 0.0 for count in freq.values(): p = count / len(param) entropy -= p * math.log2(p) return f"{entropy:.2f}"
测试转换函数
Zircolite提供了转换测试工具,您可以使用config/transform_tester.py测试自定义转换函数:
python config/transform_tester.py -t CommandLine_Base64Detected -v "powershell -EncodedCommand ABCDEFG123456=="高级扩展技巧
规则优先级和冲突解决
当多个规则可能匹配同一事件时,可以通过以下方式管理规则优先级:
- 在规则中设置
priority字段(1-3,3为最高) - 使用
related字段关联相关规则 - 通过
tags对规则进行分类,在检测时指定标签过滤
性能优化建议
对于大规模日志分析,自定义规则和转换可能影响性能,建议:
- 限制正则复杂度:避免使用过度复杂的正则表达式
- 添加早期过滤:在规则中使用
filter字段进行初步过滤 - 优化转换函数:减少转换函数中的计算量和内存使用
- 使用并行处理:通过
--parallel参数启用并行处理
与其他工具集成
Zircolite的输出可以与多种安全工具集成:
- ELK Stack:使用templates/exportForELK.tmpl模板
- Splunk:使用templates/exportForSplunk.tmpl模板
- Timesketch:使用templates/exportForTimesketch.tmpl模板
- Attack Navigator:使用templates/exportForAttackNavigator.tmpl模板
Zircolite与安全信息和事件管理系统集成示例
常见问题解答
Q: 如何调试自定义规则和转换函数?
A: 可以使用--debug参数运行Zircolite,查看详细的处理过程和转换结果:
python zircolite.py -f sample.evtx --debugQ: 自定义规则不生效怎么办?
A: 检查以下几点:
- 规则文件是否放在
rules/目录下 - 规则的
logsource配置是否与输入日志匹配 - 检测条件是否正确
- 使用
--test-rules验证规则语法
Q: 如何分享自定义规则和转换函数?
A: 可以通过以下方式分享您的扩展:
- 提交Pull Request到Zircolite项目
- 在社区论坛或安全社区发布
- 创建独立的规则集仓库
总结
通过扩展自定义SIGMA规则和转换函数,您可以显著增强Zircolite的日志检测能力,使其更适应特定的安全监控需求。无论是检测新型威胁、处理特殊日志格式,还是集成组织特定的安全策略,扩展功能都能帮助您充分发挥Zircolite的潜力。
开始扩展Zircolite的最佳方式是参考现有规则和转换函数,从简单的用例入手,逐步构建更复杂的检测逻辑。随着经验的积累,您将能够开发出高效、准确的自定义检测方案,提升组织的安全监控水平。
要开始使用Zircolite,请克隆仓库:
git clone https://gitcode.com/gh_mirrors/zi/Zircolite然后参考docs/Usage.md了解基本使用方法,开始您的自定义扩展之旅!
【免费下载链接】ZircoliteA standalone SIGMA-based detection tool for EVTX, Auditd and Sysmon for Linux logs项目地址: https://gitcode.com/gh_mirrors/zi/Zircolite
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考