ping2A/sigmazero

GitHub: ping2A/sigmazero

一款纯 Rust 实现的高性能 Sigma 规则评估工具,支持并行处理海量安全日志并输出结构化告警,无需完整 SIEM 即可在本地完成检测规则匹配与验证。

Stars: 2 | Forks: 1

Sigma Zero

![状态](https://img.shields.io/badge/status-active-success?style=for-the-badge) [![许可证: APACHE 2.0](https://img.shields.io/badge/License-APACHE_2.0-2596be.svg?style=for-the-badge)](LICENSE)

# Sigma (Zero) 规则评估器 一款高性能的 Rust 应用程序,用于通过并行处理能力针对海量安全日志评估 Sigma 检测规则。 ## 功能特性 - ⚡ **并行处理**:利用 Rayon 发挥所有 CPU 核心性能以实现最大吞吐量 - 📊 **高扩展性**:通过流式和批处理高效处理超大日志文件 - 🎯 **灵活的规则支持**:支持标准 Sigma 规则 YAML 格式 - 🔍 **模式匹配**:包含通配符匹配、正则表达式支持,以及 IP/域名检测 - 🚀 **极速运行**:尽可能采用零拷贝解析进行速度优化 - 📝 **JSON 输出**:结果采用结构化 JSON 格式,便于轻松集成 - **嵌入式测试规则 (JSONL)**:每行可选的 `_sigma_injected_rule` / `_sigma_injected_rules` 字段,用于将 Sigma YAML 封装在日志中并对其进行独立评估(无需全局规则文件;适用于测试和 CI) ## 安装说明 ### 前置条件 - Rust 1.70+(从 https://rustup.rs 安装) ### 从源码构建 ``` # 克隆或下载项目 cd sigmazero # 在 release 模式下构建以获得最大性能 cargo build --release # 二进制文件将位于 target/release/sigma-zero ``` ## 使用说明 ### 基本用法 ``` sigma-zero --rules-dir ./examples/rules --logs ./examples/logs ``` 如果每一行需要匹配的日志都通过 [`_sigma_injected_rule`](#embedded-test-rules-in-logs) 提供了自身的规则(参见 `examples/logs/injection_test.jsonl`),则可省略 `--rules-dir`。 ### 命令行选项 ``` Options: -r, --rules-dir Directory or file of Sigma rules (YAML). Optional if logs use only per-line _sigma_injected_rule / _sigma_injected_rules -l, --logs Path to log file or directory (JSON/JSONL; one object per line) -c, --correlation-rules Optional correlation rules directory -w, --workers Parallel workers (default: CPU count) -o, --output Output file (default: stdout) -f, --format [default: text] --validate Parse rules and exit (no log evaluation) --filter-tag / --filter-level / --filter-id --field-map e.g. CommandLine:command_line; comma-separated or repeated -v, --verbose -h, --help -V, --version ``` 运行 `sigma-zero --help` 以获取您所构建版本的准确列表。 ### 示例 **处理单个日志文件:** ``` sigma-zero -r ./rules -l ./logs/security.json ``` **评估仅使用嵌入式测试规则的 JSONL 文件(无 `--rules-dir`):** ``` sigma-zero -l examples/logs/injection_test.jsonl ``` **使用 8 个并行 Worker 处理日志目录:** ``` sigma-zero -r ./rules -l ./logs -w 8 ``` **以 JSON 或 JSONL 格式输出:** ``` sigma-zero -r ./rules -l ./logs -f json -o matches.json sigma-zero -r ./rules -l ./logs -f jsonl ``` **仅验证规则(不进行日志评估):** ``` sigma-zero -r ./rules --validate ``` **按标签或级别过滤规则:** ``` sigma-zero -r ./rules -l ./logs --filter-tag attack.execution --filter-level high ``` **将规则字段名映射到日志字段名(例如将 Windows 规则字段映射到您的日志 schema):** ``` sigma-zero -r ./rules -l ./logs --field-map CommandLine:command_line,ProcessName:process_name ``` **将结果保存到文件:** ``` sigma-zero -r ./rules -l ./logs -o matches.json ``` **启用详细日志记录以进行调试:** ``` sigma-zero -r ./rules -l ./logs -v ``` ### 流式模式 对于实时或基于管道的评估,请使用 **sigma-zero-streaming**。它从 stdin 读取 JSON 日志并在数据到达时进行评估: ``` tail -f /var/log/app.json | sigma-zero-streaming -r ./rules journalctl -f -o json | sigma-zero-streaming -r ./rules ``` **流式选项:** - `-r, --rules-dir` – Sigma 规则路径(如果 stdin 输入行仅使用 `_sigma_injected_rule`,则此项可选) - `-c, --correlation-rules` – 可选的关联规则目录 - `-b, --batch-size ` – 以每 N 条为一批处理日志(默认:1 代表实时) - `-f, --output-format ` – 输出格式(默认:text) - `-m, --min-level ` – 仅输出达到或高于此级别的匹配项(low、medium、high、critical) **吞吐量:** 从管道或文件读取时,使用较大的批处理大小(例如 `-b 100`)以牺牲延迟换取更高的吞吐量。 ## 日志格式 日志必须为 JSON 格式,每行一个日志条目(JSONL)。每个日志条目应为包含任意字段的 JSON 对象: ``` { "timestamp": "2025-11-06T10:15:30Z", "event_type": "process_creation", "process_name": "powershell.exe", "command_line": "powershell.exe -enc ZQBjAGgAbwAgACIASABlAGwAbABvACIACgA=", "user": "john.doe", "source_ip": "192.168.1.50" } ``` ### 日志中的嵌入式测试规则 对于**测试、调试和 CI**,任何 JSONL 行都可以在该行本身中包含 Sigma 规则 YAML。这些字段在匹配前会被**移除**,因此它们永远不会成为被评估事件的一部分(并且不会出现在输出的 `matched_log` 中)。 | 字段 | 含义 | |-------|--------| | `_sigma_injected_rule` | 字符串:一个作为 **YAML** 的完整 Sigma 规则(结构与 `.yml` 文件相同)。 | | `_sigma_injected_rules` | 字符串数组(每项为一个完整的规则 YAML),**或者**单个字符串。一个字符串中的多个 YAML 文档可以通过仅包含 `---` 的行分隔开来。 | **行为** - 包含 `_sigma_injected_rule`(和/或 `_sigma_injected_rules`)的行将**仅**使用嵌入的规则进行评估——该行不会使用来自 `--rules-dir` 的全局引擎规则。 - **不包含**这些键的行将使用**全局**规则集(当提供了 `--rules-dir` 时)进行评估。 - 您可以完全省略 `--rules-dir`,仅在您关注的行上使用嵌入规则。 **示例(单行,为便于阅读进行了美化打印):** ``` { "_sigma_injected_rule": "title: test-rule\ndetection:\n selection:\n command_line|re: '.*-enc\\s+ABC.*'\n condition: selection\n", "command_line": "powershell.exe -enc ABC", "process_name": "powershell.exe" } ``` 可运行的示例文件位于 **`examples/logs/injection_test.jsonl`**。要在不使用全局规则的情况下进行测试: ``` sigma-zero -l examples/logs/injection_test.jsonl ``` 流式二进制文件 **`sigma-zero-streaming`** 支持在 stdin 上使用相同的逐行字段:当输入行仅使用嵌入式规则时,`--rules-dir` 是可选的。 **库 API:** `sigma_zero::injected_log::parse_json_log_line` 和 `SigmaEngine::evaluate_log_entry_with_injected_rules` 提供了代码中相同的功能。完整的文件管道测试位于 `src/engine_tests.rs` 中的 `test_evaluate_jsonl_file_with_embedded_sigma_rules`。 ## Sigma 规则格式 规则遵循标准的 Sigma 格式。以下是一个示例: ``` title: Suspicious Process Execution id: 12345678-1234-1234-1234-123456789abc description: Detects execution of suspicious processes status: experimental level: high detection: selection: process_name: - '*powershell.exe' - '*cmd.exe' - '*mimikatz*' command_line: - '*-enc*' - '*bypass*' condition: selection tags: - attack.execution - attack.t1059 ``` ### 支持的功能 - **字段匹配**:精确匹配、子串匹配、通配符(*)支持 - **字段修饰符**: - `startswith` - 匹配以指定模式开头的值 - `endswith` - 匹配以指定模式结尾的值 - `contains` - 匹配包含指定模式的值(默认) - `all` - 要求所有值都匹配(而不是任意一个) - `re` - 正则表达式匹配 - `base64` - 匹配 base64 解码后的内容 - `lt/lte/gt/gte` - 数值比较 - **高级条件**: - `AND` - 所有条件必须匹配 - `OR` - 至少一个条件必须匹配 - `NOT` - 否定/排除条件 - 使用括号 `()` 进行分组 - `1 of them`,`all of them` - 基于模式的选择 - `1 of selection_*` - 通配符选择匹配 - **阈值/计数条件**:`selection_name | count > 5` 或 `| count >= N` – 当匹配到选择的日志数量(在当前批次中)满足阈值时触发规则。仅在批处理模式(文件或 `evaluate_log_batch`)下进行评估。 📖 **有关所有操作符和修饰符的完整文档,请参见 [CONDITION_OPERATORS.md](docs/CONDITION_OPERATORS.md)。** - **多值**:值数组用于实现 OR 逻辑 - **条件**: - 单个 selection - AND 条件(所有 selection 必须匹配) - OR 条件(至少一个 selection 必须匹配) - **通配符**:使用 `*` 进行通配符匹配(例如,`*powershell*`) **有关完整的字段修饰符文档,请参见 [FIELD_MODIFIERS.md](docs/FIELD_MODIFIERS.md)。** ### 包含的示例规则 1. **suspicious_process.yml**:检测可疑的进程执行,例如带有编码命令的 PowerShell 2. **suspicious_network.yml**:检测到已知恶意域名的连接或可疑 IP 3. **privilege_escalation.yml**:检测权限提升尝试 4. **modifiers_startswith.yml**:演示 startswith 修饰符的用法 5. **modifiers_endswith.yml**:演示用于文件扩展名的 endswith 修饰符 6. **modifiers_regex.yml**:演示正则表达式模式匹配 7. **modifiers_all.yml**:演示用于多条件匹配的 all 修饰符 8. **modifiers_base64.yml**:演示 base64 内容检测 9. **modifiers_comparison.yml**:演示数值比较操作符 ### 包含的示例日志文件 本项目包含 4 个真实的安全日志文件(共 170 个事件): 1. **security_events.json**(15 个事件) - 混合了合法与可疑活动的基础安全事件 2. **critical_security_events.json**(50 个事件) - 从最初入侵到勒索软件的全面攻击生命周期 3. **apt_attack_chain.json**(50 个事件) - 高级持续性威胁 (APT) 多阶段攻击活动 4. **mixed_traffic.json**(55 个事件) - 真实的合法流量 (70%) 与恶意流量 (30%) 混合,用于误报测试 **攻击覆盖范围**:涵盖了所有 12 种 MITRE ATT&CK 战术 **使用场景**:开发、测试、培训、事件响应模拟 ## 性能考量 ### 并行处理 该引擎会自动使用所有可用的 CPU 核心。您可以使用 `-w` 标志控制此设置: ``` # 在 16 核以上的系统上使用 16 个 worker 以获得最大吞吐量 sigma-zero -r ./rules -l ./huge-logs -w 16 ``` ### 内存效率 - 日志逐行流式处理以最小化内存使用 - 解析后的日志分批处理 - 结果以增量方式收集 ### 优化建议 1. **以 release 模式编译**:务必使用 `cargo build --release` 2. **调整 worker 数量**:与您的 CPU 核心数相匹配以获得最佳结果 3. **使用 SSD 存储**:更快的磁盘 I/O 可显著提升性能 4. **规则优化**:更具体的规则(更少的通配符)评估速度更快 ## 基准测试 要在您的系统上进行性能基准测试: ``` # 创建大型测试日志文件 seq 1 1000000 | while read i; do echo "{\"id\": $i, \"process_name\": \"test.exe\", \"command_line\": \"test command $i\"}" done > large_test.json # 计算评估时间 time sigma-zero -r ./examples/rules -l large_test.json -w $(nproc) ``` ## 输出格式 匹配结果以 JSON 格式输出: ``` { "rule_id": "12345678-1234-1234-1234-123456789abc", "rule_title": "Suspicious Process Execution", "level": "high", "matched_log": { "timestamp": "2025-11-06T10:15:30Z", "process_name": "powershell.exe", "command_line": "powershell.exe -enc ...", "user": "john.doe" }, "timestamp": "2025-11-06T12:30:45.123Z" } ``` ## 局限性 - **条件复杂性**:带有嵌套括号和 NOT 操作符的复杂条件表达式已被简化处理 - **聚合**:尚不支持基于时间的聚合和关联 - **字段修饰符**:已实现大多数常见修饰符(startswith、endswith、contains、all、re、base64、比较操作)。高级修饰符(如 utf16le/utf16be)计划在未来版本中发布 ## 资源 - [Sigma 规则格式](https://github.com/SigmaHQ/sigma) - [MITRE ATT&CK 框架](https://attack.mitre.org/) ## 关于 本项目主要是在为初创公司出差阿姆斯特丹期间,借助 [Claude.ai](https://claude.ai) 生成的,但它似乎能正常工作,并且无需完整的 SIEM 即可处理许多场景! 您可以将其视为用于本地日志评估的微型 SIEM,或者当您想针对边缘情况评估特定日志时使用!
标签:AMSI绕过, API安全, JSON输出, Rust, Sigma规则, YAML解析, 云计算, 可视化界面, 威胁检测, 安全日志分析, 并行处理, 开源安全工具, 日志解析, 时序数据库, 流式处理, 目标导入, 网络安全, 网络流量审计, 规则引擎, 证书伪造, 逆向工程平台, 通知系统, 隐私保护, 零拷贝, 高性能计算