heraclescap/sigwaz-cli
GitHub: heraclescap/sigwaz-cli
将 Sigma 检测规则转换为生产可用的 Wazuh XML 规则文件的命令行工具,支持批量处理和丰富的过滤配置。
Stars: 1 | Forks: 0
# SigWaz CLI
将 [Sigma](https://github.com/SigmaHQ/sigma) 检测规则转换为生产可用的 [Wazuh](https://wazuh.com) XML —— 通过命令行完成。
SigWaz 支持单条规则转换、递归批量目录处理、ZIP 压缩包以及完整的元数据过滤,所有操作均支持脚本化,无交互式提示。
## 示例
**输入** — 一条标准的 Sigma 规则 (`rule.yml`):
```
title: Suspicious PowerShell Download Cradle
status: stable
description: Detects PowerShell download cradle patterns used for payload delivery
author: SigWaz Example
date: 2024/01/15
logsource:
category: process_creation
product: windows
detection:
selection:
CommandLine|contains:
- 'IEX (New-Object'
- 'Invoke-Expression'
- 'DownloadString('
condition: selection
falsepositives:
- Legitimate administrative scripts
level: high
tags:
- attack.execution
- attack.t1059.001
```
**命令:**
```
python sigwaz.py convert rule.yml
```
**终端输出:**
```
╭──────────────────────────────────────────╮
│ SigWaz v1.0.0 │
│ Sigma → Wazuh · State-of-the-art │
╰──────────────────────────────────────────╯
✓ Suspicious PowerShell Download Cradle
Sigma ID : —
Level : high
Status : stable
Wazuh IDs: 900001
Rules : 1 generated (1.4 ms)
MITRE : T1059.001
✓ XML validation passed (1 rule, 0 warnings)
```
**生成的 Wazuh XML** (`suspicious_powershell_download_cradle_rules.xml`):
```
61603
(?i)IEX \(New\-Object|Invoke\-Expression|DownloadString\(
Suspicious PowerShell Download Cradle
no_full_log
windows,process_creation,
T1059.001
```
将其放入你的 Wazuh 管理节点的 `/var/ossec/etc/rules/` 目录中并重新加载 —— 即可完成。
## 功能特性
- **单文件与批量转换** — 支持单个文件、目录树、多文档 YAML 或 ZIP 压缩包
- **递归目录扫描** — 自动遍历子目录,跳过 `deprecated/` 文件夹
- **高级元数据过滤** — 按状态 (`experimental`, `deprecated` 等)、最低严重级别或允许的产品进行过滤
- **XML 分割** — 自动将大型输出拆分为多个块,以防止导入时 Wazuh 发生 OOM
- **稳定的规则 ID** — 可选的 ID 跟踪器可在多次运行之间持久化 Sigma GUID 到 Wazuh ID 的映射
- **配置文件支持** — 将所有参数存储在 YAML 或 JSON 配置文件中;在需要时可由 CLI 标志覆盖
- **ZIP 输出** — 将所有分割的 XML 文件打包成单个 `.zip` 文件,便于部署
- **XML 验证** — 每次转换后进行内置的结构验证
- **字段映射表** — 检查所有的 Sigma → Wazuh 解码器路径映射
- **无 TUI,完全支持脚本化** — 专为自动化和 CI 流水线设计
## 前置条件
- Python 3.11 或更高版本
- pip
## 安装说明
```
git clone https://github.com/your-org/sigwaz-cli.git
cd sigwaz-cli
pip install -r requirements.txt
```
验证:
```
python sigwaz.py --help
```
或者,如果作为软件包安装:
```
pip install -e .
sigwaz --help
```
## 用法
### 转换单个规则
```
# 打印 XML 至 stdout
python sigwaz.py convert rule.yml
# 保存至文件
python sigwaz.py convert rule.yml -o output/rule_rules.xml
# Dry-run(仅分析不写入)
python sigwaz.py convert rule.yml --dry-run
# 自定义 rule ID base;同时包含 experimental rules(始终包含 stable)
python sigwaz.py convert rule.yml -r 910000 -I experimental
```
### 批量转换目录
```
# 递归扫描目录,输出至 output/
python sigwaz.py batch rules/windows/ -o output/
# 拆分为最多 100 条 rules 的块
python sigwaz.py batch rules/ -o output/ --split 100
# Filter:medium+ 严重性,仅 stable rules(默认) — 无需额外添加
python sigwaz.py batch rules/ -o output/ --min-level medium
# 在 stable 之上同时包含 experimental 和 test rules
python sigwaz.py batch rules/ -o output/ -I experimental,test
# 仅 Windows 和 Linux rules
python sigwaz.py batch rules/ -o output/ --allowed-products windows,linux
# 将输出打包为 ZIP archive
python sigwaz.py batch rules/ -o output/ --zip
# 从 YAML 文件的 ZIP archive 中
python sigwaz.py batch sigma-rules.zip -o output/ --split 50
```
### 使用配置文件
对于复杂的配置,你可以将所有参数存储在配置文件中,以避免冗长的命令行:
```
python sigwaz.py batch rules/ -o output/ --config config.yaml
```
显式提供时,CLI 标志始终会覆盖配置文件中的设置:
```
# 使用 config.yaml 但强制 min-level 为 high
python sigwaz.py batch rules/ -o output/ --config config.yaml --min-level high
```
#### `config.yaml` 示例
```
rule_id_start: 900000
no_full_log: true
email_alert: false
email_levels:
- critical
- high
excluded_statuses:
- experimental
- deprecated
min_level: medium
allowed_products:
- windows
- linux
- aws
split_size: 50
level_informational: 5
level_low: 7
level_medium: 10
level_high: 12
level_critical: 15
# 可选:针对各个 product 的 field path 覆盖
field_overrides:
windows:
CommandLine: win.eventdata.commandLine
# 可选:在多次运行中保持 stable rule IDs
id_file: ~/.sigwaz/ids.json
```
#### `config.json` 示例
```
{
"rule_id_start": 900000,
"excluded_statuses": ["experimental", "deprecated"],
"min_level": "medium",
"split_size": 100
}
```
### 验证现有 XML 文件
```
python sigwaz.py check output/windows_rules.xml
python sigwaz.py check /var/ossec/etc/rules/sigma_rules.xml
```
### 检查字段映射
```
# 所有 products
python sigwaz.py fieldmaps
# 单个 product
python sigwaz.py fieldmaps windows
# JSON 输出(pipe 至 jq 等)
python sigwaz.py fieldmaps aws --json
```
### 显示版本和支持的产品
```
python sigwaz.py info
python sigwaz.py sidmaps
```
## 所有 CLI 选项
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--config` | `-c` | — | YAML 或 JSON 配置文件 |
| `--output` | `-o` | — | 输出文件或目录 |
| `--rule-id-start` | `-r` | `900000` | 起始 Wazuh 规则 ID |
| `--split` | `-s` | `50` | 每个 XML 文件的最大规则数 (0 = 不分割) |
| `--include-statuses` | `-I` | — | **除** `stable` **之外**还要转换的 Sigma 状态。默认:仅转换 stable 规则。示例:`-I experimental` 或 `-I experimental,test` |
| `--min-level` | `-l` | — | 最低 Sigma 严重级别 (`low`/`medium`/`high`/`critical`) |
| `--allowed-products` | `-p` | — | Logsource 产品白名单 (CSV) |
| `--zip` | `-z` | 禁用 | 将输出的 XML 文件打包成 ZIP |
| `--dry-run` | `-d` | 禁用 | 解析并报告而不写入文件 |
| `--show-xml` | `-X` | 禁用 | 即使设置了 `--output`,也将 XML 打印到终端 |
| `--id-file` | `-i` | — | ID 持久化 JSON 文件的路径 |
| `--email-levels` | `-E` | `critical,high` | 触发电子邮件警报的级别 |
| `--no-full-log / --full-log` | — | 启用 | 为规则追加 `no_full_log` 选项 |
| `--email-alert / --no-email` | — | 禁用 | 为符合条件的规则追加 `alert_by_email` |
| `--validate / --no-validate` | — | 启用 | 转换后运行 XML 验证 |
| `--field-overrides` | — | — | JSON:按产品划分的字段映射覆盖 |
| `--if-sid-overrides` | — | — | JSON:按产品划分的 if_sid 覆盖 |
| `--if-group-overrides` | — | — | JSON:按产品划分的 if_group 覆盖 |
| `--level-informational` | — | `5` | Sigma informational 规则对应的 Wazuh 级别 |
| `--level-low` | — | `7` | Sigma low 规则对应的 Wazuh 级别 |
| `--level-medium` | — | `10` | Sigma medium 规则对应的 Wazuh 级别 |
| `--level-high` | — | `12` | Sigma high 规则对应的 Wazuh 级别 |
| `--level-critical` | — | `15` | Sigma critical 规则对应的 Wazuh 级别 |
## 支持的产品
运行 `sigwaz info` 查看完整列表。核心覆盖范围包括:
Windows、Sysmon、SysmonForLinux、Linux Auditd、SSH、PAM、Sudo、ClamAV、Apache、Nginx、IIS、AWS CloudTrail、Azure AD、GCP、Office 365、Okta、GitHub、Kubernetes、DNS、Network/Firewall、Palo Alto PAN-OS、Cisco ASA/FTD、Fortinet FortiGate、Check Point、OSQuery、Zeek/Bro。
## SigWaz Web — 推荐体验
CLI 功能强大,但如果你需要进行**日常转换**、在 **SOC 团队**中工作,或者只想探索 Sigma 规则而无需记住各种标志,**SigWaz Web 界面**将是更合适的工具。
| | CLI | Web |
|---|---|---|
| 设置 | Python + pip | 打开浏览器 |
| 单次转换 | ✓ | ✓ 实时,随打字转换 |
| 批量 / ZIP | ✓ | ✓ 拖放 |
| 输出下载 | 文件系统 | 一键下载 `.xml` 或 `.zip` |
| 设置 | 标志 / 配置文件 | 图形面板 |
| 语法高亮 | — | ✓ YAML 输入,XML 输出 |
| 字段映射浏览器 | `sigwaz fieldmaps` | 内置浏览器 |
**为什么团队更喜欢 Web 版本:**
- **对最终用户零安装** — 只需要一个 URL,无需管理 Python 环境
- **即时反馈** — 转换错误会在你编辑 YAML 时实时显示,而不是在运行命令后才出现
- **可共享的结果** — 直接从浏览器下载 XML 并进行交接;无需共享文件系统
- **图形化设置** — 规则 ID 基数、严重级别映射、电子邮件警报级别、产品过滤器 —— 所有这些都可通过 UI 进行配置,无需查找命令标志
- **完全相同的输出** — Web 应用运行与此 CLI 完全相同的引擎;在浏览器中转换的规则会生成与 `sigwaz convert` 逐字节相同的 XML
Web 应用可在 **[sigwaz.com](https://sigwaz.com)** 访问。
## 许可证
MIT 许可证 — 详见 [LICENSE](LICENSE)
标签:AMSI绕过, Cloudflare, DevSecOps, MITRE ATT&CK, OpenCanary, Python, Sigma规则, Wazuh, XML生成, ZIP解压, 上游代理, 威胁检测, 字段映射, 安全检测规则, 安全编排与自动化响应, 开源安全工具, 恶意代码分析, 批量处理, 文档结构分析, 无后门, 目标导入, 脚本工具, 自动化转换, 规则转换器, 逆向工具, 逆向工程平台, 配置文件