
Zircolite v4.0.0
أداة كشف مستقلة قائمة على SIGMA لسجلات EVTX وAuditd وSysmon على لينكس.

أداة كشف مستقلة قائمة على SIGMA لسجلات EVTX وAuditd وSysmon for Linux وXML وCSV أو JSONL/NDJSON

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 ثانية — أسرع بـ 2.1× من Hayabusa و9.8× من Chainsaw على نفس السجلات، وكلاهما أداتان مكتوبتان بلغة Rust. راجع المعيار المرجعي.
- الكشف التلقائي عن نوع السجل: يحدد تلقائيًا صيغ السجلات وحقول الطوابع الزمنية باستخدام magic bytes وتحليل المحتوى والرجوع إلى التعبيرات النمطية (regex) -- دون الحاجة إلى تحديد أعلام الصيغة في معظم الحالات.
- صيغ إدخال متعددة: يدعم صيغ سجلات متنوعة تشمل EVTX وJSON Lines وJSON Arrays وCSV وXML وغيرها. السجلات المضغوطة أو المؤرشفة (gzip وbzip2 وZIP و7-Zip) مدعومة؛ استخدم
--archive-passwordلملفات ZIP/7z المشفرة. - دعم Sigma الأصلي: يمكن لـ Zircolite استخدام قواعد Sigma الأصلية (YAML) مباشرةً عبر تحويلها باستخدام pySigma.
- خلفية SIGMA: تعتمد على خلفية SIGMA (SQLite) ولا تستخدم تحويلًا داخليًا من SIGMA إلى شيء آخر.
- معالجة متقدمة للسجلات: يمكنها معالجة سجلات الإدخال عبر تقسيم الحقول وتطبيق التحويلات، مما يتيح تحليلًا أكثر مرونة وقوة للسجلات.
- تحويلات الحقول: تطبيق تحويلات Python مخصصة على الحقول أثناء المعالجة (مثل فك ترميز Base64 والتحويل من hex إلى ASCII).
- تصدير مرن: يمكن لـ Zircolite تصدير النتائج إلى صيغ متعددة باستخدام قوالب Jinja templates، بما في ذلك JSON وCSV وJSONL وSplunk وElastic وOpenSearch وTimesketch وSARIF وATT&CK Navigator وغيرها.
- مخرجات طرفية غنية: تُعرض نتائج الكشف في جداول مرتبة حسب الخطورة مع معرّفات تقنيات MITRE ATT&CK، وخريطة حرارية لتكتيكات 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 أولًا
التثبيت من المصدر يُصرِّف نواة التسوية (flattening kernel) الخاصة بـ 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 ("Desktop development with 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 ولا للتوزيعات القائمة على musl مثل Alpine؛ استخدم 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 الخطوط الأنبوبية (pipelines) المثبّتة. تسمية خط أنابيب غير مثبّت توقف
التشغيل برمز خروج 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للتعطيل). - استخدم
--file-patternلتحديد نمط glob مخصص لاختيار الملفات. - استخدم
--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.
التحسين التلقائي للمعالجة
عند وجود عدة ملفات، يقيسها Zircolite مقابل الذاكرة العشوائية والمعالج المتاحين، ويختار نمط قاعدة البيانات (قاعدة واحدة مشتركة، أو واحدة لكل ملف) ويقرر ما إذا كانت معالجتها على التوازي تستحق العناء — ثم يكيّف عدد العمال وفقًا لضغط الذاكرة أثناء التشغيل.
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/ في المستودع. أما الملف التنفيذي المستقل فيكتب إلى
دليل rules/ المجاور لملفه التنفيذي، ويرجع إلى ./rules في دليل العمل،
مع تحذير، عندما يتعذّر الكتابة إليه.
بدلًا من ذلك، إذا كنت تستخدم Task (go-task)، شغّل task update-rules من جذر المشروع لتحديث القواعد من Zircolite-Rules-v2. راجع docs لمهام أخرى (بناء Docker، التنظيف، إلخ).
[!IMPORTANT]
يُرجى ملاحظة أن مجموعات القواعد هذه مُقدَّمة لاستخدام Zircolite جاهزًا، لكن يجب عليك توليد مجموعات قواعدك الخاصة لأنها قد تكون مشوّشة أو بطيئة. مجموعات القواعد المحدَّثة تلقائيًا هذه متاحة في المستودع المخصص: Zircolite-Rules-v2.
تقسيم الحقول والتحويلات
ميزتان في الإعداد تشكّلان الأحداث أثناء استيعابها، وكلتاهما في config/config.yaml:
- تقسيم الحقول يحوّل حقلًا مزدحمًا بقيم مفتاح-قيمة إلى حقول قابلة للاستعلام. يصبح حقل
Hashesفي Sysmon (SHA1=abc123,MD5=def456,SHA256=789xyz) حقولًا منفصلةSHA1وMD5وSHA256، بحيث يمكن للقواعد مطابقة تجزئة (hash) مباشرةً. - تحويلات الحقول تشغّل Python معزولًا على قيمة حقل — فك ترميز أسطر أوامر base64، واستخراج مؤشرات الاختراق (IOCs)، ووسم LOLBins — ويمكنها كتابة النتيجة إلى حقل جديد بدلًا من استبدال الأصل. يأتي Zircolite بـ 55 منها عبر 11 فئة، معطّلة افتراضيًا باستثناء التحويلين الخاصين بـ auditd.
split:
Hashes:
separator: ","
equal: "="
راجع تقسيم الحقول وتحويلات الحقول للإعداد الكامل، والتحويلات التي يأتي بها Zircolite، وكيفية اختبار تحويلاتك الخاصة.
المعيار المرجعي
Zircolite هي الأسرع بين الثلاث: أسرع بـ 2.1× من Hayabusa و9.8× من Chainsaw — وهي الوحيدة بينها المكتوبة بلغة Python، مقابل أداتين مكتوبتين بلغة Rust.
نفس ملفات Sysmon EVTX الأربعة (478 ميجابايت، 452,554 حدثًا)، وكل أداة بإعداداتها الافتراضية وقواعدها الخاصة، على جهاز Apple M1 Max بعشرة أنوية. الوسيط لثلاث تشغيلات:
| الأداة | القواعد المحمّلة | الزمن الفعلي | معدل المعالجة | الذاكرة القصوى |
|---|---|---|---|---|
| Zircolite | 4,319 | 11.6 s | 39,000 events/s | 1,207 MiB (4 worker processes) |
| Hayabusa 4.1.0 | 4,658 | 24.7 s | 18,300 events/s | 900 MiB |
| Chainsaw 2.16.0 | 3,524 | 113.5 s | 4,000 events/s | 346 MiB |
تقايض Zircolite الذاكرة مقابل هذه السرعة: فهي تشغّل عملية عامل واحدة لكل ملف، والرقم
أعلاه هو مجموعها. يبقي --no-parallel الأمر على عملية واحدة.
تختلف مجموعات القواعد، لذا لا يمكن مقارنة أعداد الكشف؛ راجع المعيار المرجعي
للاطلاع على الإعداد والتحفظات وكيفية إعادة إنتاجه باستخدام tools/tool-benchmark.py.
التوثيق
التوثيق الكامل متاح هنا.
الواجهة الرسومية المصغّرة
يمكن استخدام الواجهة الرسومية المصغّرة (Mini-GUI) دون اتصال بالإنترنت تمامًا. تتيح لك عرض النتائج والبحث فيها. يمكنك توليد "حزمة" واجهة رسومية مصغّرة تلقائيًا باستخدام خيار --package. استخدم --package-dir لتحديد دليل المخرجات. لمعرفة كيفية استخدام الواجهة الرسومية المصغّرة، راجع التوثيق هنا.
الأحداث المكتشفة حسب تقنيات MITRE ATT&CK® ومستويات الخطورة

الجدول الزمني للأحداث المكتشفة

الأحداث المكتشفة حسب تقنيات MITRE ATT&CK® معروضة على المصفوفة

الدروس والمراجع والمشاريع ذات الصلة
الدروس
-
بالإنجليزية: نشر Russ McRee درسًا مفصّلًا tutorial عن SIGMA وZircolite على مدونته.
-
بالإسبانية: نشر César Marín درسًا بالإسبانية هنا.
-
بالفرنسية: نشر IT-connect.fr درسًا موسّعًا عن Zircolite بالفرنسية.
-
بالفرنسية: نشر IT-connect.fr أيضًا تقريرًا لحل تحدي Hack the Box باستخدام Zircolite.
المراجع
- ذكر Florian Roth أداة Zircolite في SIGMA Hall of Fame خلال محاضرته في ورشة عمل EU ATT&CK في أكتوبر 2021.
- تم الاستشهاد بـ Zircolite وتقديمها خلال JSAC 2023.
- تم الاستشهاد بـ Zircolite واستخدامها في أوراق بحثية متعددة:
الترخيص
- كل الكود في المشروع مرخّص بموجب GNU Lesser General Public License.
- يستخدم تحليل EVTX مكتبة
evtx(pyevtx-rs)، بموجب ترخيص MIT أو Apache-2.0. تسرد حزم الإصدار كل مكتبة مضمّنة وترخيصها فيTHIRD_PARTY_LICENSES. - القواعد مُصدَرة بموجب Detection Rule License (DRL) 1.1.