wagga40/Zircolite

GitHub: wagga40/Zircolite

一款基于 Python 的独立 SIGMA 规则检测工具,支持离线分析 EVTX、Auditd、Sysmon 等多种日志格式并映射到 MITRE ATT&CK 框架

Stars: 786 | Forks: 111

#

![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e68fc5b020020408.png)

## 独立的基于 SIGMA 的检测工具,支持 EVTX、Auditd、Sysmon for Linux、XML、CSV 或 JSONL/NDJSON 日志 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/51c2861a02020409.webp) [![python](https://img.shields.io/badge/python-3.10-blue)](https://www.python.org/) ![version](https://img.shields.io/badge/Architecture-64bit-red) **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 --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® 技术和严重级别分类的检测事件 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e373d97667020411.webp) ### 检测事件时间线 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/af0a611211020412.webp) ### 在矩阵上显示的按 MITRE ATT&CK® 技术分类的检测事件 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/dc42acc17a020414.webp) ## 教程、参考资料及相关项目 ### 教程 - **英语**:[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) 发布。
标签:AMSI绕过, Auditd, Cloudflare, CSV, EDR, EVTX分析, JSON, MITRE ATT&CK, Python, SIGMA规则, SQLite, Sysmon, Windows日志, 云计算, 取证, 威胁检测, 安全运营, 扫描框架, 无后门, 网络调试, 脆弱性评估, 自动化, 规则引擎, 请求拦截, 逆向工具