अपडेट पर वापस जाएँ
New releaseSep 21, 2026

Zircolite v4.0.0

EVTX, Auditd और Sysmon Linux लॉग्स के लिए एक स्टैंडअलोन SIGMA-आधारित डिटेक्शन टूल

साझा करें

EVTX, Auditd, Sysmon for Linux, XML, CSV, या JSONL/NDJSON लॉग्स के लिए स्टैंडअलोन SIGMA-आधारित डिटेक्शन टूल

python version

Zircolite Python 3 में लिखा गया एक स्टैंडअलोन टूल है जो आपको निम्नलिखित पर SIGMA नियमों का उपयोग करने की अनुमति देता है:

  • MS Windows EVTX (EVTX, XML, और JSONL प्रारूप)
  • Auditd लॉग्स
  • Sysmon for Linux
  • EVTXtract
  • CSV और XML लॉग्स
  • JSON Array लॉग्स

मुख्य विशेषताएँ

  • तेज़: 452,554 इवेंट्स बनाम 4,319 Sigma नियम 11.6 सेकंड में — समान लॉग्स पर Hayabusa से 2.1× तेज़ और Chainsaw से 9.8× तेज़, जो दोनों Rust टूल्स हैं। बेंचमार्क देखें।
  • स्वचालित लॉग प्रकार पहचान: magic bytes, सामग्री विश्लेषण, और regex-आधारित fallback का उपयोग करके लॉग प्रारूपों और टाइमस्टैम्प फ़ील्ड्स को स्वचालित रूप से पहचानता है -- अधिकांश मामलों में प्रारूप फ़्लैग निर्दिष्ट करने की आवश्यकता नहीं।
  • एकाधिक इनपुट प्रारूप: 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-to-something रूपांतरण का उपयोग नहीं करता।
  • उन्नत लॉग मैनिपुलेशन: यह फ़ील्ड्स को विभाजित करके और रूपांतरण लागू करके इनपुट लॉग्स में हेरफेर कर सकता है, जिससे अधिक लचीला और शक्तिशाली लॉग विश्लेषण संभव होता है।
  • फ़ील्ड ट्रांसफ़ॉर्म: प्रोसेसिंग के दौरान फ़ील्ड्स पर कस्टम Python रूपांतरण लागू करें (जैसे, Base64 डिकोडिंग, hex-to-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 के flattening कर्नेल को Cython के साथ संकलित किया जाता है — लेकिन केवल तब जब कोई C कंपाइलर पहले से मौजूद हो। इसके बिना इंस्टॉल फिर भी सफल होता है और हर रन Python में इवेंट्स को flatten करता है, जो धीमा है। बाइनरीज़ और Docker इमेज पहले से संकलित कर्नेल के साथ बनाए जाते हैं, इसलिए यह उनसे संबंधित नहीं है।

इसलिए pdm install से पहले टूलचेन इंस्टॉल करें:

प्लेटफ़ॉर्मपूर्वापेक्षा
Debian, Ubuntuapt install build-essential python3-dev
RHEL, Fedora, Rockydnf install gcc python3-devel
Alpineapk add build-base python3-dev
macOSxcode-select --install
WindowsBuild Tools for Visual Studio ("Desktop development with C++")

Cython को स्वयं इंस्टॉल करने की आवश्यकता नहीं है: यह एक बिल्ड-टाइम आवश्यकता है, जिसे एक पृथक बिल्ड वातावरण में लाया जाता है और कभी आपके वातावरण में नहीं जोड़ा जाता।

स्टैंडअलोन बाइनरीज़

प्रत्येक रिलीज़ प्रति प्लेटफ़ॉर्म एक स्व-निहित पैकेज प्रकाशित करती है। प्रत्येक अपना Python और हर निर्भरता साथ लाता है, इसलिए पहले कुछ भी इंस्टॉल करने की आवश्यकता नहीं है।

लक्ष्यआर्काइवचलता है
linux-x64Zircolite-<version>-linux-x64.zipglibc 2.28 या बाद का: RHEL 8, Debian 10, Ubuntu 20.04 और नया
linux-arm64Zircolite-<version>-linux-arm64.zipglibc 2.28 या बाद का
macos-arm64Zircolite-<version>-macos-arm64.zipmacOS 15 या बाद का, Apple silicon
windows-x64Zircolite-<version>-windows-x64.zipWindows 10 या बाद का
windows-arm64Zircolite-<version>-windows-arm64.zipWindows 10 या बाद का, ARM64

Intel Macs और 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 को executable के पथ से बदलें।

बाइनरीज़ कोड-साइन नहीं हैं। macOS ब्राउज़र से किए गए डाउनलोड को क्वारंटीन करता है, निकाली गई फ़ाइलें फ़्लैग विरासत में लेती हैं, और फिर Gatekeeper executable और _internal/ में प्रत्येक लाइब्रेरी को ब्लॉक कर देता है। पहले रन से पहले इसे पूरी निर्देशिका से पुनरावर्ती रूप से साफ़ करें:

xattr -dr com.apple.quarantine Zircolite-<version>-macos-arm64

त्वरित शुरुआत

दूसरों द्वारा बनाए गए (पुराने) ट्यूटोरियल (EN, ES, और FR) यहाँ देखें।

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 इंस्टॉल किए गए पाइपलाइन दिखाता है। ऐसा नाम देना जो इंस्टॉल नहीं है, किसी भी नियम के परिवर्तित होने से पहले रन को exit code 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 को उस निर्देशिका (केवल पूर्ण पथ) से बदलें जहाँ आपके लॉग्स और rules/rulesets संग्रहीत हैं।
  • Linux होस्ट पर, --user "$(id -u):$(id -g)" और -l /case/output/zircolite.log जोड़ें: इमेज एक अपरिविलेज्ड उपयोगकर्ता के रूप में चलती है जो आपके स्वामित्व वाली निर्देशिका में नहीं लिख सकता। Docker देखें।

स्वचालित प्रोसेसिंग अनुकूलन

कई फ़ाइलों को देखते हुए, Zircolite उन्हें उपलब्ध RAM और CPU के विरुद्ध मापता है, एक डेटाबेस मोड चुनता है (एक साझा डेटाबेस, या प्रति फ़ाइल एक) और तय करता है कि उन्हें समानांतर में संसाधित करना उचित है या नहीं — फिर चलते समय मेमोरी दबाव के अनुसार वर्कर संख्या को अनुकूलित करता है।

python3 zircolite.py --evtx ./logs/ --ruleset rules/rules_windows_merged.json

इसमें से किसी को भी --no-auto-mode, --unified-db (सभी फ़ाइलों के लिए एक डेटाबेस, जो क्रॉस-फ़ाइल सहसंबंध नियमों के लिए आवश्यक है), --no-parallel या --parallel-workers N के साथ ओवरराइड करें। चयन कैसे किया जाता है, इसके लिए स्वचालित प्रोसेसिंग अनुकूलन देखें।

YAML कॉन्फ़िगरेशन फ़ाइलों का उपयोग करना

जटिल या बार-बार दोहराए जाने वाले विश्लेषण वर्कफ़्लो के लिए, एक YAML कॉन्फ़िगरेशन फ़ाइल का उपयोग करें:

# Generate a fully commented configuration file
python3 zircolite.py --generate-config my_config.yaml

# Run with it
python3 zircolite.py --yaml-config my_config.yaml

# CLI arguments override the file
python3 zircolite.py --yaml-config my_config.yaml --evtx ./other_logs/

जनरेट की गई फ़ाइल प्रत्येक समर्थित कुंजी को उसके डिफ़ॉल्ट मान पर प्रलेखित करती है; config/zircolite_example.yaml वही फ़ाइल है, जो रिपॉज़िटरी में रखी गई है। मर्ज नियमों और उन विकल्पों के लिए जिनका कोई YAML समकक्ष नहीं है, YAML कॉन्फ़िगरेशन देखें।

डिफ़ॉल्ट रूलसेट्स को अपडेट करना

python3 zircolite.py -U

स्रोत से यह रिपॉज़िटरी की rules/ को फिर से लिखता है। एक स्टैंडअलोन बाइनरी अपने executable के बगल में rules/ निर्देशिका में लिखती है, और जब उसमें लिखा नहीं जा सकता तो चेतावनी के साथ कार्यशील निर्देशिका में ./rules पर वापस आ जाती है।

वैकल्पिक रूप से, यदि आप Task (go-task) का उपयोग करते हैं, तो Zircolite-Rules-v2 से नियम अपडेट करने के लिए प्रोजेक्ट रूट से task update-rules चलाएँ। अन्य कार्यों (Docker build, clean, आदि) के लिए docs देखें।

[!IMPORTANT]
कृपया ध्यान दें कि ये रूलसेट्स Zircolite को तुरंत उपयोग करने के लिए प्रदान किए गए हैं, लेकिन आपको अपने स्वयं के रूलसेट्स जनरेट करने चाहिए क्योंकि वे शोरगुल वाले या धीमे हो सकते हैं। ये स्वतः-अपडेट होने वाले रूलसेट्स समर्पित रिपॉज़िटरी में उपलब्ध हैं: Zircolite-Rules-v2

फ़ील्ड स्प्लिटिंग और ट्रांसफ़ॉर्म

दो कॉन्फ़िगरेशन सुविधाएँ इवेंट्स को ingest होते समय आकार देती हैं, दोनों config/config.yaml में:

  • फ़ील्ड स्प्लिटिंग एक पैक्ड key-value फ़ील्ड को क्वेरी करने योग्य फ़ील्ड्स में बदल देती है। Sysmon का Hashes फ़ील्ड (SHA1=abc123,MD5=def456,SHA256=789xyz) अलग SHA1, MD5 और SHA256 फ़ील्ड्स बन जाता है, ताकि नियम सीधे हैश से मेल कर सकें।
  • फ़ील्ड ट्रांसफ़ॉर्म एक फ़ील्ड के मान पर sandboxed Python चलाते हैं — base64 कमांड लाइनों को डिकोड करना, IOCs निकालना, LOLBins को फ़्लैग करना — और परिणाम को मूल को बदलने के बजाय एक नए फ़ील्ड में लिख सकते हैं। Zircolite 11 श्रेणियों में इनमें से 55 भेजता है, दो auditd वाले को छोड़कर डिफ़ॉल्ट रूप से बंद।
split:
  Hashes:
    separator: ","
    equal: "="

पूर्ण कॉन्फ़िगरेशन, Zircolite द्वारा भेजे जाने वाले ट्रांसफ़ॉर्म, और अपने स्वयं के परीक्षण के तरीके के लिए फ़ील्ड स्प्लिटिंग और फ़ील्ड ट्रांसफ़ॉर्म देखें।

बेंचमार्क

Zircolite तीनों में सबसे तेज़ है: Hayabusa से 2.1× तेज़ और Chainsaw से 9.8× तेज़ — और यह उनमें से अकेला है जो Python में लिखा गया है, जबकि दोनों अन्य Rust में लिखे गए हैं।

समान 4 Sysmon EVTX फ़ाइलें (478 MB, 452,554 इवेंट्स), प्रत्येक टूल अपने डिफ़ॉल्ट पर अपने स्वयं के नियमों के साथ, 10-कोर Apple M1 Max पर। तीन रन का माध्यिका:

टूललोड किए गए नियमवॉल टाइमथ्रूपुटशिखर मेमोरी
Zircolite4,31911.6 s39,000 events/s1,207 MiB (4 worker processes)
Hayabusa 4.1.04,65824.7 s18,300 events/s900 MiB
Chainsaw 2.16.03,524113.5 s4,000 events/s346 MiB

Zircolite उस गति के लिए मेमोरी का व्यापार करता है: यह प्रति फ़ाइल एक वर्कर प्रोसेस चलाता है, और ऊपर दिया गया आंकड़ा उनका कुल है। --no-parallel इसे एक ही प्रोसेस तक सीमित रखता है।

नियम सेट भिन्न हैं, इसलिए डिटेक्शन गणनाएँ तुलनीय नहीं हैं; सेटअप, चेतावनियों और tools/tool-benchmark.py के साथ इसे पुन: उत्पन्न करने के तरीके के लिए बेंचमार्क देखें।

दस्तावेज़ीकरण

पूर्ण दस्तावेज़ीकरण यहाँ उपलब्ध है।

मिनी-GUI

मिनी-GUI का उपयोग पूरी तरह से ऑफ़लाइन किया जा सकता है। यह आपको परिणाम प्रदर्शित करने और खोजने की अनुमति देता है। आप --package विकल्प के साथ स्वचालित रूप से एक मिनी-GUI "पैकेज" जनरेट कर सकते हैं। आउटपुट निर्देशिका निर्दिष्ट करने के लिए --package-dir का उपयोग करें। मिनी-GUI का उपयोग करने का तरीका जानने के लिए, दस्तावेज़ीकरण यहाँ देखें।

MITRE ATT&CK® तकनीकों और गंभीरता स्तरों द्वारा पहचाने गए इवेंट्स

पहचाने गए इवेंट्स टाइमलाइन

मैट्रिक्स पर प्रदर्शित MITRE ATT&CK® तकनीकों द्वारा पहचाने गए इवेंट्स

ट्यूटोरियल, संदर्भ, और संबंधित प्रोजेक्ट्स

ट्यूटोरियल

संदर्भ


लाइसेंस

  • प्रोजेक्ट का सारा कोड GNU Lesser General Public License के अंतर्गत लाइसेंस प्राप्त है।
  • EVTX पार्सिंग evtx (pyevtx-rs) का उपयोग करती है, जो MIT या Apache-2.0 लाइसेंस के अंतर्गत है। रिलीज़ पैकेज प्रत्येक बंडल की गई लाइब्रेरी और उसके लाइसेंस को THIRD_PARTY_LICENSES में सूचीबद्ध करते हैं।
  • नियम Detection Rule License (DRL) 1.1 के अंतर्गत जारी किए गए हैं।

श्रेणियाँ