
Zircolite v3.8.0
EVTX、Auditd、Sysmon for Linuxのログを対象としたスタンドアロンSIGMAベースの検出ツール

EVTX、Auditd、Sysmon for Linux、XML、CSV、JSONL/NDJSON ログに対応したスタンドアロンの SIGMA ベース検出ツール

Zircolite は Python 3 で書かれたスタンドアロンツールで、以下のログに対して SIGMA ルールを使用できます:
- MS Windows EVTX (EVTX、XML、JSONL 形式)
- Auditd ログ
- Sysmon for Linux
- EVTXtract
- CSV および XML ログ
- JSON 配列ログ
主な機能
- 高速: 452,554 件のイベントを 4,319 件の Sigma ルールに対して 11.6 秒で処理 — 同じログに対して Hayabusa より 2.1 倍、Chainsaw より 9.8 倍高速です (いずれも Rust 製ツール)。ベンチマークを参照してください。
- ログタイプの自動検出: マジックバイト、コンテンツ解析、正規表現ベースのフォールバックを使用してログ形式とタイムスタンプフィールドを自動的に識別します -- ほとんどの場合、形式フラグを指定する必要はありません。
- 複数の入力形式: EVTX、JSON Lines、JSON 配列、CSV、XML など、さまざまなログ形式をサポートします。圧縮またはアーカイブされたログ (gzip、bzip2、ZIP、7-Zip) もサポートされ、暗号化された ZIP/7z には
--archive-passwordを使用します。 - ネイティブ Sigma サポート: Zircolite は pySigma で変換することで、ネイティブな Sigma ルール (YAML) を直接使用できます。
- SIGMA バックエンド: SIGMA バックエンド (SQLite) に基づいており、内部で SIGMA から何かへの変換は行いません。
- 高度なログ操作: 入力ログをフィールド分割や変換によって操作でき、より柔軟で強力なログ分析が可能です。
- フィールド変換: 処理中にフィールドへカスタム Python 変換を適用できます (例: Base64 デコード、16 進数から ASCII への変換)。
- 柔軟なエクスポート: Zircolite は Jinja テンプレート を使用して、JSON、CSV、JSONL、Splunk、Elastic、OpenSearch、Timesketch、SARIF、ATT&CK Navigator など複数の形式に結果をエクスポートできます。
- リッチなターミナル出力: 検出結果は重大度順にソートされたテーブルで表示され、MITRE ATT&CK テクニック ID、ATT&CK 戦術ヒートマップ、ルールカバレッジ指標、クリック可能な出力ファイルリンクが含まれます。
Zircolite は Python で直接使用することも、Python のインストールが不要なスタンドアロンバイナリをダウンロードして使用することもできます。
ドキュメントはこちら (専用サイト) またはこちら (リポジトリ内ディレクトリ) で入手できます。
要件 / インストール
[!NOTE] このセクションの内容は、Zircolite をソースから実行する場合にのみ該当します。 スタンドアロンバイナリと Docker イメージ は独自の Python、すべての依存関係、コンパイル済みカーネルを同梱しているため、Python、パッケージマネージャー、C コンパイラは不要です。
このプロジェクトは Python 3.10 以上でテストされています。依存関係は
pyproject.toml で宣言されています。クローンしたリポジトリで
PDM (pdm install)、uv
(uv sync)、または Poetry (poetry install) を使用してインストールしてください。
以下の例では python3 zircolite.py を実行します。ツールが作成した環境をアクティベートするか、
pdm run、uv run、poetry run を先頭に付けてください。
依存関係
- 必須:
orjson、xxhash、rich、rich-argparse、RestrictedPython、requests、urllib3、pySigma、evtx(pyevtx-rs)、jinja2、lxml、chardet、psutil、pyyaml、py7zr、ijson、pyahocorasick、pyroaring py7zrは.7z入力が開かれた場合にのみインポートされます。ZIP、gzip、bzip2 は標準ライブラリを使用します。
⚠️ まず C コンパイラをインストールしてください
ソースからのインストールでは、Zircolite のフラット化カーネルが Cython でコンパイルされます — ただし C コンパイラがすでに存在する場合に限ります。コンパイラがない場合でもインストールは成功し、 実行のたびにイベントが Python でフラット化されるため、遅くなります。バイナリと Docker イメージは カーネルがコンパイル済みの状態でビルドされているため、これには該当しません。
そのため、pdm install の前にツールチェーンをインストールしてください:
| プラットフォーム | 前提条件 |
|---|---|
| Debian、Ubuntu | apt install build-essential python3-dev |
| RHEL、Fedora、Rocky | dnf install gcc python3-devel |
| Alpine | apk add build-base python3-dev |
| macOS | xcode-select --install |
| Windows | Build Tools for Visual Studio (「C++ によるデスクトップ開発」) |
Cython 自体のインストールは不要です。これはビルド時の要件であり、分離された ビルド環境に取得され、あなたの環境には追加されません。
スタンドアロンバイナリ
各リリースでは、プラットフォームごとに 自己完結型のパッケージが公開されています。それぞれが独自の Python とすべての依存関係を 同梱しているため、事前に何もインストールする必要はありません。
| ターゲット | アーカイブ | 動作環境 |
|---|---|---|
linux-x64 | Zircolite-<version>-linux-x64.zip | glibc 2.28 以降: RHEL 8、Debian 10、Ubuntu 20.04 以降 |
linux-arm64 | Zircolite-<version>-linux-arm64.zip | glibc 2.28 以降 |
macos-arm64 | Zircolite-<version>-macos-arm64.zip | macOS 15 以降、Apple silicon |
windows-x64 | Zircolite-<version>-windows-x64.zip | Windows 10 以降 |
windows-arm64 | Zircolite-<version>-windows-arm64.zip | Windows 10 以降、ARM64 |
Intel Mac および Alpine などの musl ベースのディストリビューションにはバイナリがありません。 その場合は Python または Docker を使用してください。
unzip Zircolite-<version>-linux-x64.zip
cd Zircolite-<version>-linux-x64
./Zircolite --events sysmon.evtx --ruleset rules/rules_windows_merged.json
以下の例では、python3 zircolite.py を実行ファイルへのパスに置き換えてください。
バイナリはコード署名されていません。macOS はブラウザで行ったダウンロードを隔離し、
展開されたファイルがそのフラグを継承するため、Gatekeeper が実行ファイルと _internal/ 内の
すべてのライブラリをブロックします。初回実行前に、ディレクトリ全体から再帰的にクリアしてください:
xattr -dr com.apple.quarantine Zircolite-<version>-macos-arm64
クイックスタート
他の人が作成した (古い) チュートリアル (英語、スペイン語、フランス語) はこちらで確認できます。
EVTX ファイル
ヘルプは以下で表示できます:
# Don't forget to prefix with "pdm run" or "uv run" or "poetry run" when needed
python3 zircolite.py -h
EVTX ファイルの拡張子が ".evtx" の場合:
# python3 zircolite.py --evtx <EVTX FOLDER or EVTX FILE> --ruleset <SIGMA RULESET> [--ruleset <OTHER RULESET>]
python3 zircolite.py --evtx sysmon.evtx --ruleset rules/rules_windows_merged.json
--ruleset は省略できます。その場合 Zircolite は rules/rules_windows_merged.json を使用し、
これは Sysmon と一般的な Windows チャネルをカバーします。
ネイティブ Sigma ルール (YAML) の使用
ネイティブな Sigma ルール (YAML) を直接使用できます:
# Single YAML rule
python3 zircolite.py --evtx sample.evtx --ruleset path/to/rule.yml
# Directory of Sigma rules
python3 zircolite.py --evtx sample.evtx --ruleset ./sigma/rules/windows/process_creation
# With pySigma pipelines
python3 zircolite.py --evtx sample.evtx --ruleset rule.yml --pipeline sysmon --pipeline windows-logsources
--pipeline-list はインストールされているパイプラインを表示します。インストールされていない
ものを指定すると、ルールが変換される前に終了コード 2 で実行が停止します。
その他のログ形式
Zircolite はほとんどの場合ログ形式を自動検出するため、明示的な形式フラグは省略可能です:
# Auto-detection (recommended) - Zircolite identifies the format automatically
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 <JSON_FOLDER_OR_FILE> --ruleset rules/rules_windows_merged.json
# Explicit format flags (override auto-detection)
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 <JSON_FOLDER_OR_FILE> --ruleset rules/rules_windows_merged.json --jsononly
python3 zircolite.py --events <JSON_FOLDER_OR_FILE> --ruleset rules/rules_windows_merged.json --json-array
python3 zircolite.py --events <CSV_FOLDER_OR_FILE> --ruleset rules/rules_windows_merged.json --csv-input
python3 zircolite.py --events <XML_FOLDER_OR_FILE> --ruleset rules/rules_windows_merged.json --xml-input
--events引数にはファイルまたはフォルダを指定できます。フォルダの場合、現在のフォルダとサブフォルダ内のすべてのログファイルが選択されます (無効にするには--no-recursionを使用)。- ファイル選択にカスタム glob パターンを指定するには
--file-patternを使用します。 - 自動形式検出を無効にするには
--no-auto-detectを使用します。
[!TIP] ツールを試したい場合は、EVTX-ATTACK-SAMPLES (EVTX ファイル) でテストできます。
Docker での実行
# Pull the Docker image
docker pull wagga40/zircolite:latest
# If your logs and rules are in a specific directory
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は、ログとルール/ルールセットが保存されているディレクトリ (絶対パスのみ) に置き換えてください。- Linux ホストでは、
--user "$(id -u):$(id -g)"と-l /case/output/zircolite.logを追加してください。イメージは非特権ユーザーとして実行されるため、あなたが所有するディレクトリに書き込めません。詳細は Docker を参照してください。