
Parsen, filtern und visualisieren Sie Suricata eve.json-Protokolle mit CLI-Tools für Alarme, Flows, DNS und Payloads. Enthält ein Tutorial zum Erlernen von Suricata und zum Testen von Regeln.
# SuricataLog [](https://pepy.tech/project/suricatalog) Als ich anfing zu lernen, wie man [Suricata](https://suricata.io/) verwendet, stellte ich schnell fest, dass ich ein Werkzeug benötigte, um die Datei eve.json zu inspizieren; Die meisten Tutorials und Dokumentationen, die es gibt, schlugen vor, einen Stack zu installieren, um die folgenden Aufgaben zu erledigen: 1. Die Protokolle an einem zentralen Ort speichern 2. Die Ereignisse normalisieren und anreichern, insbesondere Warnmeldungen 3. Ein Frontend verwenden, um in die Daten einzutauchen Was sehr nützlich ist, aber was, wenn ich nur eine schnelle Inspektion der Ereignisse durchführen wollte? Früher oder später wirst du [zu Tode gelangweilt](https://suricata.readthedocs.io/en/suricata-6.0.0/output/eve/eve-json-examplesjq.html) sein, wenn du das tust: ```shell cat eve.json | jq -r -c 'select(.event_type=="alert")|.payload'| base64 --decode ``` SuricataLog ist eine Sammlung von Werkzeugen/Skripten zum Parsen und Anzeigen von Suricata-Protokolldateien (wie /var/log/suricata/eve.json) Das [Eve JSON-Format](https://suricata.readthedocs.io/en/suricata-6.0.0/output/eve/eve-json-format.html) ist nicht sehr komplex, also schrieb ich ein paar Skripte mit den Funktionen, von denen ich dachte, dass sie für meine Heimnetzwerkanalyse am nützlichsten wären. Als Bonus habe ich meine Lernerfahrung als [Tutorial](https://github.com/josevnz/suricatalog/blob/dependabot/uv/uv-1176edd47e/TUTORIAL.md) aufgeschrieben, das du verwenden kannst, um mehr über Suricata zu lernen und es auch zu testen. ## Installation von Pypi ### Installation von Pypi.org ```shell uv pip install SuricataLog ``` ### Installation aus dem Quellcode ```shell git clone [email protected]:josevnz/SuricataLog.git cd SuricataLog uv build uv pip install dist/suricatalog-1.1.6-py3-none-any.whl ``` ### Entwickler-Installation Du möchtest also beitragen? Oder hast einen Fehler gefunden und denkst, du kannst einen Patch einreichen? Schön! Hier ist, was du tun kannst, um im Entwicklungsmodus zu arbeiten: ```shell git clone [email protected]:josevnz/SuricataLog.git cd SuricataLog uv build uv sync --dev uv pip install --editable . ``` Das Ausführen von Unit-Tests ist danach sehr einfach: ```shell (SuricataLog) [josevnz@dmaf5 SuricataLog]$ python -m unittest test/*.py ......... ---------------------------------------------------------------------- Ran 9 tests in 0.334s OK ``` Wenn die Unit-Tests fehlschlagen, ist dies höchstwahrscheinlich der erste Ort, an dem ein Problem behoben werden sollte. Ich empfehle außerdem, die textualize-Konsole auszuführen und auf die Konsolenmeldungen zu achten: ```shell # textual console textual console --exclude SYSTEM --exclude EVENT ``` Dann in einem anderen Terminal: ```shell textual run --dev --command eve_log --timestamp '2015-01-01 10:41:21.642899' test/eve.json ``` Dadurch werden sogar Debug-Meldungen auf der Konsole ausgegeben (du kannst diese ausschließen, wenn du die Konsole mit '--exclude DEBUG' neu startest) ### Erstellen eines Docker-Images Weitere Details findest du in [DOCKER.md](https://github.com/josevnz/suricatalog/blob/dependabot/uv/uv-1176edd47e/DOCKER.md). ## Ausführen der Skripte Sobald alles in deiner virtuellen Umgebung installiert ist, solltest du in der Lage sein, die Skripte aufzurufen Du kannst herausfinden, welche Anwendungen installiert wurden, indem du die Autovervollständigung verwendest, nachdem du deine virtuelle Umgebung aktiviert hast: ```shell eve_[tab][tab] ``` Und wenn du die Bash-Autovervollständigungs-Erweiterung installierst, erhältst du auch einige Vorschläge für die Flags. ### Einfacher EVE-Log-Parser Sieh es dir am besten selbst an (denk daran, verwende --help, um zu erfahren, welche Optionen unterstützt werden) #### Tabellenformat:  ````shell eve_log --timestamp '2015-01-01 10:41:21.642899' --formats TABLE test/eve.json ```` ### Vorgefertigte Berichte mit eve_json.py ```shell (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 ``` Schau dir einige Beispiele unten an: #### NXDOMAIN  ```shell eve_json --nxdomain test/eve.json ``` #### PAYLOAD  ```shell eve_json --payload ~/Downloads/eve.json ``` #### FLOW  ```shell eve_json --flow test/eve_udp_flow.json ``` #### NETFLOW  ```shell eve_json --netflow 224.0.0.251 test/eve_udp_flow.json ``` #### USERAGENT  ```shell eve_json --useragent test/eve.json ``` ### Ausführen von eve_*-Anwendungen in einem Browser  Du kannst Suricata Log-Anwendungen in einem Browser ausführen, indem du den `eve_server`-Wrapper verwendest: ```shell # Show the flow report on a eve.json file eve_server --application eve_json -- --flow ~/eve.json # Show NX domain report eve_server --application eve_json -- --nxdomain ~/eve.json # Inspect the eve.json records eve_server --applications eve_log -- ~/eve.json ``` Du musst das '--' übergeben, um dem Server mitzuteilen, dass diese Optionen zu dem zugrunde liegenden eve_* gehören, das du aufrufen möchtest. ## Ausführen aus Docker Es ist auch möglich, SuricataLog aus einem Docker-Container auszuführen. Weitere Details findest du in [DOCKER.md](https://github.com/josevnz/suricatalog/blob/dependabot/uv/uv-1176edd47e/DOCKER.md) ## Ausführen mit uv Wenn du uv hast, kannst du einfach Folgendes tun: ```shell 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 ``` Du verstehst das Prinzip. ## Bash-Autovervollständigung Ich habe mein Bestes versucht, [8.6 Programmable Completion](https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html#Programmable-Completion) zu befolgen Ich habe die Autovervollständigung für die gängigsten Flags bereitgestellt. Du kannst alle Flags herausfinden, indem du '--help' an eines der Skripte übergibst. ### Installation der Autovervollständigungsbefehle Du kannst die Bash-Autovervollständigung für alle SuricataLog-Skripte installieren. Führe einfach 'eve_autocomplete' aus und folge den Anweisungen: ```shell eve_autocomplete --help ``` ## Unterstützte Versionen Ich arbeite an diesem Projekt in **meiner Freizeit** und kann nicht jede Linux-/Python-Kombination unterstützen, die es gibt. Dies ist mein aktuelles Test-Setup, und es kann sich ohne weitere Ankündigung ändern | SuricataLog | Supported | OS | Python | Suricata | |-------------|-----------|----------------------------------|-----------|----------| | <= 0.8 | NO | NA | < 3.8 | 6.04 | | 0.9+ | NO | fedora 37 | => 3.11.4 | 6.04 | | 0.9+ | NO | Armbian 23.02.2 Jammy | => 3.10.6 | 6.04 | | 0.9+ | NO | Ubuntu 20.04.4 LTS (Focal Fossa) | => 3.8.10 | 6.04 | | 1.0.3+ | YES | fedora 40 | => 3.11.4 | 7.0.6 | *Du bist mehr als willkommen*: * Patches mit neuen Funktionen und Fehlerbehebungen einzureichen. * Fehlerberichte zu öffnen. Sei so detailliert wie möglich, sonst habe ich keine andere Wahl, als ihn zu schließen. ## Tutorials * [Suricata, RaspberryPI4 und Python, um dein Heimnetzwerk zu sichern](https://github.com/josevnz/suricatalog/blob/dependabot/uv/uv-1176edd47e/TUTORIAL.md) * [Verwenden von SuricataLog zur Analyse deiner Ereignisse](https://github.com/josevnz/suricatalog/blob/dependabot/uv/uv-1176edd47e/Using_SuricataLog_to_analyze_your_events.md)