wagga40/Zircolite
GitHub: wagga40/Zircolite
一款基于 Python 的独立 SIGMA 规则检测工具,支持离线分析 EVTX、Auditd、Sysmon 等多种日志格式并映射到 MITRE ATT&CK 框架
Stars: 786 | Forks: 111
# --ruleset [--ruleset <其他规则集>]
python3 zircolite.py --evtx sysmon.evtx --ruleset rules/rules_windows_merged.json
```
### 使用原生 Sigma 规则 (YAML)
您可以直接使用原生 Sigma 规则(YAML):
```
# 单个 YAML 规则
python3 zircolite.py --evtx sample.evtx --ruleset path/to/rule.yml
# Sigma 规则目录
python3 zircolite.py --evtx sample.evtx --ruleset ./sigma/rules/windows/process_creation
# 使用 pySigma pipelines
python3 zircolite.py --evtx sample.evtx --ruleset rule.yml --pipeline sysmon --pipeline windows-logsources
```
### 其他日志格式
Zircolite 在大多数情况下会**自动检测**日志格式,因此显式的格式标志是可选的:
```
# 自动检测(推荐) - Zircolite 自动识别格式
python3 zircolite.py --events auditd.log --ruleset rules/rules_linux.json
python3 zircolite.py --events sysmon.log --ruleset rules/rules_linux.json
python3 zircolite.py --events --ruleset rules/rules_windows_merged.json
# 显式格式标志(覆盖自动检测)
python3 zircolite.py --events auditd.log --ruleset rules/rules_linux.json --auditd
python3 zircolite.py --events sysmon.log --ruleset rules/rules_linux.json --sysmon4linux
python3 zircolite.py --events --ruleset rules/rules_windows_merged.json --jsononly
python3 zircolite.py --events --ruleset rules/rules_windows_merged.json --json-array
python3 zircolite.py --events --ruleset rules/rules_windows_merged.json --csv-input
python3 zircolite.py --events --ruleset rules/rules_windows_merged.json --xml-input
```
- `--events` 参数可以是一个文件或文件夹。如果是文件夹,当前文件夹和子文件夹中的所有日志文件都将被选中(使用 `--no-recursion` 禁用)。
- 使用 `--file-pattern` 指定自定义的 glob 模式来选择文件。
- 使用 `--no-auto-detect` 禁用自动格式检测。
### 使用 Docker 运行
```
# 拉取 Docker 镜像
docker pull wagga40/zircolite:latest
# 如果您的日志和规则位于特定目录
docker run --rm --tty \
-v $PWD:/case/input:ro \
-v $PWD:/case/output \
wagga40/zircolite:latest \
-e /case/input \
-o /case/output/detected_events.json \
-r /case/input/a_sigma_rule.yml
```
- 将 `$PWD` 替换为存储您的日志和规则/规则集的目录(仅限绝对路径)。
### 自动处理优化
Zircolite 会根据您的工作负载自动优化处理过程。当您使用多个文件运行 Zircolite 时,它会:
1. **分析您的文件** - 统计文件数量,测量大小,检查可用内存
2. **选择最佳数据库模式** - 统一模式(所有文件在一个 DB 中)对比 单文件模式(每个文件单独一个 DB)
3. **启用并行处理** - 在有益时自动并行处理文件
```
python3 zircolite.py --evtx ./logs/ --ruleset rules/rules_windows_merged.json
```
您可以控制此行为:
```
# 禁用自动模式选择(强制单文件模式)
python3 zircolite.py --evtx ./logs/ --ruleset rules/rules_windows_merged.json --no-auto-mode
# 强制统一数据库模式(启用跨文件关联)
python3 zircolite.py --evtx ./logs/ --ruleset rules/rules_windows_merged.json --unified-db
# 禁用并行处理
python3 zircolite.py --evtx ./logs/ --ruleset rules/rules_windows_merged.json --no-parallel
# 手动指定最大 workers 数
python3 zircolite.py --evtx ./logs/ --ruleset rules/rules_windows_merged.json --parallel-workers 4
```
并行处理器会自动:
- 根据可用内存、CPU 核心和文件大小计算最佳工作线程数
- 监控内存使用情况,并在接近限制时进行节流
- 如果并行处理无益,则回退到顺序处理
### 使用 YAML 配置文件
对于复杂或重复的分析工作流,请使用 YAML 配置文件:
```
# 生成默认配置文件
python3 zircolite.py --generate-config my_config.yaml
# 使用配置文件运行
python3 zircolite.py --yaml-config my_config.yaml
# CLI 参数覆盖配置文件设置
python3 zircolite.py --yaml-config my_config.yaml --evtx ./other_logs/
```
示例配置文件(`config/zircolite_example.yaml`):
```
input:
path: ./logs/
format: evtx
recursive: true
rules:
rulesets:
- rules/rules_windows_merged.json
pipelines:
- sysmon
output:
file: detected_events.json
format: json
processing:
streaming: true # Single-pass processing (default: enabled)
unified_db: false # Per-file databases (default)
auto_mode: true # Automatic mode selection (default: enabled)
parallel:
enabled: true # Parallel processing (auto-enabled when beneficial)
max_workers: null # Auto-detect based on CPU/memory
memory_limit_percent: 85.0
```
### 更新默认规则集
```
python3 zircolite.py -U
```
或者,如果您使用 [Task](https://taskfile.dev/) (go-task),请从项目根目录运行 `task update-rules` 以从 [Zircolite-Rules-v2](https://github.com/wagga40/Zircolite-Rules-v2) 更新规则。有关其他任务(Docker 构建、清理等),请参阅 [文档](docs/README.md)。
### 字段拆分
字段拆分从字段中提取键值对。例如,Sysmon 日志包含一个 `Hashes` 字段,如下所示:
```
SHA1=abc123,MD5=def456,SHA256=789xyz
```
通过在 `config/config.yaml` 中配置字段拆分:
```
split:
Hashes:
separator: ","
equal: "="
```
该事件变为:
```
{
"SHA1": "abc123",
"MD5": "def456",
"SHA256": "789xyz",
"Hashes": "SHA1=abc123,MD5=def456,SHA256=789xyz"
}
```
现在您可以直接编写匹配 `SHA256` 或 `MD5` 的规则。
### 字段转换
转换在处理过程中将 Python 代码应用于字段值。它们可以解码数据、提取 IOC 或检测攻击模式。
**示例:Base64 解码**
当命令行包含 `powershell -enc SGVsbG8gV29ybGQ=` 时,该转换:
```
transforms:
CommandLine:
- info: "Base64 decode"
type: python
code: |
def transform(param):
import base64
import re
match = re.search(r'-[eE]nc(?:odedcommand)?\s+([A-Za-z0-9+/=]+)', param)
if match:
try:
return base64.b64decode(match.group(1)).decode('utf-16-le')
except:
return ""
return ""
alias: true
alias_name: "CommandLine_b64decoded"
```
创建一个包含 `Hello World` 的新字段 `CommandLine_b64decoded`。
**示例:LOLBin 检测**
```
transforms:
Image:
- info: "Detect Living Off The Land Binaries"
type: python
code: |
def transform(param):
import re
lolbins = ['certutil', 'mshta', 'regsvr32', 'rundll32', 'bitsadmin']
exe_name = param.lower().split('\\')[-1].replace('.exe', '')
for lolbin in lolbins:
if exe_name == lolbin:
return f"LOLBIN:{lolbin}"
return ""
alias: true
alias_name: "Image_LOLBinMatch"
```
当 `Image` 为 `C:\Windows\System32\certutil.exe` 时,创建 `Image_LOLBinMatch` = `LOLBIN:certutil`。
有关所有可用的转换和详细配置,请参阅 [高级文档](docs/Advanced.md#field-transforms)。
## 文档
完整文档可在[此处](docs)获取。
## Mini-GUI
Mini-GUI 可以完全离线使用。它允许您显示和搜索结果。您可以使用 `--package` 选项自动生成 Mini-GUI "包"。使用 `--package-dir` 指定输出目录。要了解如何使用 Mini-GUI,请查看[此处](docs/Advanced.md#mini-gui)的文档。
### 按 MITRE ATT&CK® 技术和严重级别分类的检测事件

### 检测事件时间线

### 在矩阵上显示的按 MITRE ATT&CK® 技术分类的检测事件

## 教程、参考资料及相关项目
### 教程
- **英语**:[Russ McRee](https://holisticinfosec.io) 在他的博客上发布了一篇关于 SIGMA 和 Zircolite 的详细[教程](https://holisticinfosec.io/post/2021-09-28-zircolite/)。
- **西班牙语**:**César Marín** 在[这里](https://derechodelared.com/zircolite-ejecucion-de-reglas-sigma-en-ficheros-evtx/)发布了一篇西班牙语教程。
- **法语**:[IT-connect.fr](https://www.it-connect.fr/) 发布了一篇关于 Zircolite 的[详尽法语教程](https://www.it-connect.fr/)。
- **法语**:[IT-connect.fr](https://www.it-connect.fr/) 还发布了一个使用 Zircolite 的 [Hack the Box 挑战 write-up](https://www.it-connect.fr/hack-the-box-sherlocks-tracer-solution/)。
### 参考文献
- [Florian Roth](https://github.com/Neo23x0/) 在 2021 年 10 月的 EU ATT&CK Workshop 演讲中,将 Zircolite 列入他的 [**SIGMA Hall of Fame**](https://github.com/Neo23x0/Talks/blob/master/Sigma_Hall_of_Fame_20211022.pdf)。
- Zircolite 在 [JSAC 2023](https://jsac.jpcert.or.jp/archive/2023/pdf/JSAC2023_workshop_sigma_jp.pdf) 中被引用和展示。
- Zircolite 已在多篇研究论文中被引用和使用:
- **CIDRE 团队**:
- [PWNJUTSU - 网站](https://pwnjutsu.irisa.fr)
- [PWNJUTSU - 学术论文](https://hal.inria.fr/hal-03694719/document)
- [CERBERE: Cybersecurity Exercise for Red and Blue Team Entertainment, Reproducibility](https://centralesupelec.hal.science/hal-04285565/file/CERBERE_final.pdf)
- **Universidad de la República**:
- [A Process Mining-Based Method for Attacker Profiling Using the MITRE ATT&CK Taxonomy](https://journals-sol.sbc.org.br/index.php/jisa/article/view/3902/2840)
## 许可证
- 该项目的所有**代码**均根据 [GNU Lesser General Public License](https://www.gnu.org/licenses/lgpl-3.0.en.html) 授权。
- `evtx_dump` 采用 MIT 许可证。
- 规则根据 [Detection Rule License (DRL) 1.0](https://github.com/SigmaHQ/Detection-Rule-License/blob/main/LICENSE.Detection.Rules.md) 发布。

## 独立的基于 SIGMA 的检测工具,支持 EVTX、Auditd、Sysmon for Linux、XML、CSV 或 JSONL/NDJSON 日志  [](https://www.python.org/)  **Zircolite** 是一个使用 Python 3 编写的独立工具,允许您在以下日志上使用 SIGMA 规则: - MS Windows EVTX(EVTX、XML 和 JSONL 格式) - Auditd 日志 - Sysmon for Linux - EVTXtract - CSV 和 XML 日志 - JSON Array 日志 ### 主要特性 - **自动日志类型检测**:利用魔术字节、内容分析和基于正则的回退机制自动识别日志格式和时间戳字段 —— 在大多数情况下无需指定格式标志。 - **多种输入格式**:支持多种日志格式,包括 EVTX、JSON Lines、JSON Arrays、CSV、XML 等。支持压缩或归档日志(gzip、bzip2、ZIP、7-Zip);对加密的 ZIP/7z 请使用 `--archive-password`。 - **原生 Sigma 支持**:Zircolite 可以通过 pySigma 转换,直接使用原生 Sigma 规则(YAML)。 - **SIGMA 后端**:它基于 SIGMA 后端(SQLite),不使用内部的 SIGMA 到某物的转换。 - **高级日志处理**:它可以通过拆分字段和应用转换来处理输入日志,从而实现更灵活、更强大的日志分析。 - **字段转换**:在处理过程中对字段应用自定义 Python 转换(例如,Base64 解码、十六进制转 ASCII)。 - **灵活导出**:Zircolite 可以使用 Jinja [模板](templates)将结果导出为多种格式,包括 JSON、CSV、JSONL、Splunk、Elastic、Zinc、Timesketch 等。 - **丰富的终端输出**:检测结果以按严重性排序的表格显示,包含 MITRE ATT&CK 技术 ID、ATT&CK 战术热力图、规则覆盖率指标、可点击的输出文件链接以及上下文相关的运行后建议。 **您可以直接使用 Python 运行 Zircolite。** **文档可在[此处](https://wagga40.github.io/Zircolite/)(专用网站)或[此处](docs)(仓库目录)获取。** ## 环境要求 / 安装 该项目已在 Python 3.10 及更高版本上测试通过。使用以下命令安装依赖:`pip3 install -r requirements.txt`。 ### 依赖项 - **必需**:`orjson`, `xxhash`, `rich`, `RestrictedPython`, `requests`, `pySigma`, `evtx` (pyevtx-rs), `jinja2`, `lxml`, `psutil`, `pyyaml`, `py7zr` (用于 7-Zip 归档) :warning: 在某些系统(Mac, ARM 等)上,`evtx` Python 库可能需要安装 Rust 和 Cargo。 ## 快速入门 查看他人编写的教程(英文、西班牙文和法文)[这里](#tutorials)。 ### EVTX 文件 查看帮助: ``` python3 zircolite.py -h ``` 如果您的 EVTX 文件扩展名为 ".evtx": ``` # python3 zircolite.py --evtx标签:AMSI绕过, Auditd, Cloudflare, CSV, EDR, EVTX分析, JSON, MITRE ATT&CK, Python, SIGMA规则, SQLite, Sysmon, Windows日志, 云计算, 取证, 威胁检测, 安全运营, 扫描框架, 无后门, 网络调试, 脆弱性评估, 自动化, 规则引擎, 请求拦截, 逆向工具