
تحليل، تصفية، وتصور سجلات Suricata eve.json باستخدام أدوات CLI للتنبيهات، التدفقات، DNS، والحمولات. يتضمن برنامجًا تعليميًا لتعلم Suricata واختبار القواعد.
عندما بدأت تعلّم كيفية استخدام Suricata، سرعان ما وجدت أنني بحاجة إلى أداة لفحص ملف eve.json؛ معظم الدروس والوثائق المنشورة كانت تقترح تثبيت حزمة (stack) لإنجاز المهام التالية:
وهو أمر مفيد جداً، لكن ماذا لو كنت بحاجة فقط إلى فحص سريع للأحداث؟
عاجلاً أم آجلاً ستصاب بـالملل الشديد من فعل هذا:
cat eve.json | jq -r -c 'select(.event_type=="alert")|.payload'| base64 --decode
SuricataLog هي مجموعة من الأدوات/النصوص البرمجية لتحليل وعرض ملفات سجل Suricata (مثل /var/log/suricata/eve.json).
لا يُعد تنسيق Eve JSON معقدًا للغاية، لذلك كتبت بعض النصوص البرمجية التي تتضمن الميزات التي اعتقدت أنها ستكون أكثر فائدة لتحليل شبكة منزلي.
وكمكافأة، كتبت تجربة تعلمي على شكل دليل تعليمي يمكنك استخدامه لتتعلم عن Suricata وكذلك كيفية اختباره.
قبل أن تفعل أي شيء آخر، تأكد من أن بيئتك جاهزة للعمل:
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
python3 -m pip install --upgrade pip setuptools wheel
pip3 install --upgrade SuricataLog
git clone [email protected]:josevnz/SuricataLog.git
cd SuricataLog
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
python3 -m pip install --upgrade build
python3 -m build
pip3 install dist/SuricataLog-X.Y.Z-py3-none-any.whl
هل تريد المساهمة؟ أو وجدت خللاً وتعتقد أنه يمكنك تقديم تصحيح؟ رائع! إليك ما يمكنك فعله للتشغيل في وضع التطوير:
git clone [email protected]:josevnz/SuricataLog.git
cd SuricataLog
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
pip install --upgrade pip
python -m pip install --upgrade build
pip install textual-dev
pip install --editable .
تشغيل اختبارات الوحدة سهل جداً بعد ذلك:
(SuricataLog) [josevnz@dmaf5 SuricataLog]$ python -m unittest test/*.py
.........
----------------------------------------------------------------------
Ran 9 tests in 0.334s
OK
إذا فشلت اختبارات الوحدة، فهذا على الأرجح هو أول مكان لإصلاح المشكلة.
أوصي أيضاً بتشغيل وحدة التحكم النصية (textualize console) ومراقبة رسائل الكونسول:
# textual console
textual console --exclude SYSTEM --exclude EVENT
ثم في طرفية أخرى:
textual run --dev --command eve_log --timestamp '2015-01-01 10:41:21.642899' test/eve.json
سيؤدي ذلك إلى طباعة رسائل التصحيح على وحدة التحكم (يمكنك استبعادها إذا أعدت تشغيل الكونسول باستخدام '--exclude DEBUG')
يرجى مراجعة DOCKER.md لمزيد من التفاصيل.
بمجرد تثبيت كل شيء في البيئة الافتراضية الخاصة بك، يجب أن تكون قادراً على استدعاء النصوص البرمجية
يمكنك معرفة التطبيقات التي تم تثبيتها باستخدام الإكمال التلقائي، بعد تفعيل البيئة الافتراضية:
eve_[tab][tab]
وإذا قمت بتثبيت ملحق الإكمال التلقائي لـ Bash فستحصل أيضاً على بعض الاقتراحات للخيارات.
من الأفضل أن ترى بنفسك (تذكر: استخدم --help لمعرفة الخيارات المدعومة)

eve_log --timestamp '2015-01-01 10:41:21.642899' --formats TABLE test/eve.json
(suricatalog) [josevnz@dmaf5 SuricataLog]$ eve_json --help
usage: eve_json [-h] [--nxdomain | --payload | --flow | --netflow NETFLOW | --useragent] eve [eve ...]
This script is inspired by the examples provided on [15.1.3. Eve JSON 'jq' Examples](https://suricata.readthedocs.io/en/suricata-6.0.0/output/eve/eve-json-
examplesjq.html) A few things: * The output uses colorized JSON
positional arguments:
eve Path to one or more /var/log/suricata/eve.json file to parse.
optional arguments:
-h, --help show this help message and exit
--nxdomain Show DNS records with NXDOMAIN
--payload Show alerts with a printable payload
--flow Aggregated flow report per protocol and destination port
--netflow NETFLOW Get the netflow for a given IP address
--useragent Top user agent in HTTP traffic
ألقِ نظرة على بعض الأمثلة أدناه:

eve_json --nxdomain test/eve.json

eve_json --payload ~/Downloads/eve.json

eve_json --flow test/eve_udp_flow.json

eve_json --netflow 224.0.0.251 test/eve_udp_flow.json

eve_json --useragent test/eve.json

يمكنك تشغيل تطبيقات Suricata Log على المتصفح باستخدام الغلاف eve_server:
# عرض تقرير التدفق على ملف eve.json
eve_server --application eve_json -- --flow ~/eve.json
# عرض تقرير NX domain
eve_server --application eve_json -- --nxdomain ~/eve.json
# فحص سجلات eve.json
eve_server --applications eve_log -- ~/eve.json
تحتاج إلى تمرير '--' لإخبار الخادم بأن هذه الخيارات تنتمي إلى eve_* الأساسي الذي تريد استدعاءه.
من الممكن أيضاً تشغيل SuricataLog من حاوية Docker. يرجى الاطلاع على DOCKER.md لمزيد من التفاصيل.
إذا كان لديك uv، يمكنك ببساطة فعل الآتي:
uvx --from SuricataLog eve_log /var/log/suricata/eve.json
uvx --from SuricataLog eve_json --useragent /var/log/suricata/eve.json
uvx --from SuricataLog eve_server --application eve_json -- --flow /var/log/suricata/eve.json
لقد وصلتك الفكرة.
حاولت بكل جهد اتباع 8.6 Programmable Completion
لقد زودتك بإكمال تلقائي للخيارات الأكثر شيوعاً. يمكنك معرفة كل الخيارات بتمرير '--help' لأي من النصوص البرمجية.
يمكنك تثبيت الإكمال التلقائي لـ Bash لجميع نصوص SuricataLog. فقط شغّل 'eve_autocomplete' واتبع التعليمات:
eve_autocomplete --help
أعمل على هذا المشروع في وقت فراغي ولا يمكنني دعم كل إصدار من مجموعات Linux/ Python الموجودة. هذه هي بيئة الاختبار الحالية لدي، وقد تتغير دون إشعار مسبق
يمكنك بحرية:
| SuricataLog | مدعوم | نظام التشغيل | Python | Suricata |
|---|
| <= 0.8 | لا | NA | < 3.8 | 6.04 |
| 0.9+ | لا | fedora 37 | => 3.11.4 | 6.04 |
| 0.9+ | لا | Armbian 23.02.2 Jammy | => 3.10.6 | 6.04 |
| 0.9+ | لا | Ubuntu 20.04.4 LTS (Focal Fossa) | => 3.8.10 | 6.04 |
| 1.0.3+ | نعم | fedora 40 | => 3.11.4 | 7.0.6 |