ADMIN
2022
07
2022-06-29T12:00:00
Mobiles Arbeiten
PRAXIS
056
Security-Tipp
Sicherheit
Monitoring
Netzwerkmonitoring mit Zeek
Licht ins Dunkel
von Dr. Matthias Wübbeling
Veröffentlicht in Ausgabe 07/2022 - PRAXIS
Wenn Sie darüber im Bilde sein möchten, was in Ihrem Netzwerk passiert, bleibt nur der Blick auf die Verbindungen der Geräte untereinander sowie mit Endpunkten im Internet. Gebräuchliche Werkzeuge wie tcpdump und Wireshark bieten sich zwar für gelegentliche Analysen an. Für ein dauerhaftes Netzwerkmonitoring und als Alternative zu Intrusion Detection Systemen stellen wir Ihnen mit Zeek ein interessantes Tool vor.
Der Überblick über die Aktivitäten der Geräte im Netzwerk ist eine der Routineaufgaben für IT-Administratoren. Der Markt unterschiedlicher Werkzeuge zur Netzwerküberwachung ist groß und die Anbieter übertreffen sich gegenseitig mit nützlichen Features, vor allem im Bereich der Aufarbeitung von Events und der manuellen Analyse.
Ein hidden Champion ist das bereits 1999 in der ersten Version veröffentlichte Zeek (damals noch unter dem Namen Bro) [1]. Das formulierte Ziel war die Entwicklung eines Werkzeugs zum Monitoring großer Datenmengen mit der einfachen Möglichkeit zur Analyse des Netzwerkverkehrs durch eigene Skripte, sogenannte "Policy Scripts". Die Umbenennung zu Zeek, angelehnt an das englische "seek" wie suchen, erfolgte gut 20 Jahre später.
Für die gängigen Protokolle im Netzwerk bietet Zeek bereits ein umfangreiches Arsenal an Skripten für das Monitoring an. Das Ergebnis der Überwachung schreibt Zeek in unterschiedlichen Logfiles auf die Festplatte. Von dort können Sie diese unmittelbar weiterverwenden und sie etwa in Ihr bestehendes Logmanagement oder ein installiertes SIEM einbinden. In regelmäßigen Abständen werden diese Logdaten komprimiert und archiviert. Das ist insbesondere in stark frequentierten Netzwerken ein probates Mittel, um Speicherplatz auf der Festplatte zu sparen. Logdaten, die Sie nicht mehr benötigen, sollten Sie regelmäßig löschen.
Der Überblick über die Aktivitäten der Geräte im Netzwerk ist eine der Routineaufgaben für IT-Administratoren. Der Markt unterschiedlicher Werkzeuge zur Netzwerküberwachung ist groß und die Anbieter übertreffen sich gegenseitig mit nützlichen Features, vor allem im Bereich der Aufarbeitung von Events und der manuellen Analyse.
Ein hidden Champion ist das bereits 1999 in der ersten Version veröffentlichte Zeek (damals noch unter dem Namen Bro) [1]. Das formulierte Ziel war die Entwicklung eines Werkzeugs zum Monitoring großer Datenmengen mit der einfachen Möglichkeit zur Analyse des Netzwerkverkehrs durch eigene Skripte, sogenannte "Policy Scripts". Die Umbenennung zu Zeek, angelehnt an das englische "seek" wie suchen, erfolgte gut 20 Jahre später.
Für die gängigen Protokolle im Netzwerk bietet Zeek bereits ein umfangreiches Arsenal an Skripten für das Monitoring an. Das Ergebnis der Überwachung schreibt Zeek in unterschiedlichen Logfiles auf die Festplatte. Von dort können Sie diese unmittelbar weiterverwenden und sie etwa in Ihr bestehendes Logmanagement oder ein installiertes SIEM einbinden. In regelmäßigen Abständen werden diese Logdaten komprimiert und archiviert. Das ist insbesondere in stark frequentierten Netzwerken ein probates Mittel, um Speicherplatz auf der Festplatte zu sparen. Logdaten, die Sie nicht mehr benötigen, sollten Sie regelmäßig löschen.
Installation
Üblicherweise verwenden wir in den Security-Tipps Docker, um Software schnell und einfach auszuprobieren. Da die Entwickler von Zeek leider keine eigenen Docker-Images anbieten, können wir auf andere Anbieter ausweichen oder mit den bereitgestellten Dockerfiles selbst ein Image erstellen. Dafür sollten Sie allerdings etwas Zeit für den Build-Prozess von Zeek einplanen.
Schneller geht es mit dem OpenSUSE Build Service, über den die Entwickler für die klassischen Linux-Distributionen fertige Pakete anbieten [2]. Sie können das benötigte Repository einbinden und Zeek wie gewöhnlich mit Ihrem Paketmanager installieren. Auch das können Sie natürlich mittels Docker in einem eigenen Container laufen lassen. Dafür starten Sie etwa einen Ubuntu-Container mit folgendem Kommando:
docker run -ti --net=host --name=zeek ubuntu:latest /bin/bash
Mit dem Argument "--net=host" ermöglichen Sie dem Container den direkten Zugriff auf die Netzwerkinterfaces des Hostsystems. Das benötigen Sie natürlich, um allen Traffic auf dem Interface mitzulesen. Das Argument "--name=zeek" benennt den Container explizit und ermöglicht Ihnen später einfach weitere Verbindungen in den Container hinein. Bevor Sie nun den Anweisungen zur Installation von Zeek unter [2] folgen können, installieren Sie innerhalb des laufenden Ubuntu-Containers noch Abhängigkeiten mit dem folgenden Kommando:
apt update && apt install -y sudo curl gnupg vim net-tools
Konfiguration und Start
Vor dem ersten Einsatz müssen Sie Zeek glücklicherweise nicht umfangreich konfigurieren. Sie legen lediglich den Namen der Netzwerkschnittstelle fest, an der Sie den Traffic beobachten möchten. Hier bietet sich natürlich an, den Server mit Zeek an einem sogenannten Mirror-Port Ihres Routers oder Switches zu betreiben. Dahin werden alle übertragenen Datenpakete einfach zusätzlich noch einmal transferiert.
Angenommen, das Interface an diesem Port trägt den Namen "eth1", so konfigurieren Sie in der Datei "/opt/zeek/etc/node.cfg" das Interface und den Hostnamen in der jeweiligen Zeile:
[zeek]
type=standalone
host=localhost
interface=eth1
Starten Sie nun mit zeekctl das Management, installieren Sie anschließend die mitgelieferten Policies und starten dann Zeek, indem Sie folgende Kommandos aufrufen:
/opt/zeek/bin/zeekctl
[ZeekControl] > deploy
Anschließend sollte Ihre Ausgabe den Ablauf der Kommandos darstellen. Falls Sie eine Fehlermeldung erhalten, können Sie mit dem Zeek-Kommando diag die Ursache anzeigen. Kontrollieren Sie den Namen des Netzwerkinterfaces und prüfen Sie, ob im Hintergrund nicht bereits ein Prozess auf dem von Zeek genutzten TCP-Port 47760 lauscht.
Beenden Sie nun das Management mit exit und erzeugen Sie auf dem Host ein wenig Netzwerkverkehr. Dabei können Sie zusehen, wie innerhalb des Ordners "/opt/zeek/logs/current" neue Logdateien auftauchen. Die erste Datei, die hier erstellt wird, ist "conn.log". Darin sind einfach alle Netzwerkverbindungen aufgeführt. Die Liste wächst schnell an und Dateien mit den Namen "dns.log", "dhcp. log" oder "ntp.log" geben eine erste Idee, welche Protokolle Zeek für Sie im Hintergrund bereits vorfiltert.
Wenn Sie einen DHCP-Server in Ihrem Netzwerk betreiben und nach einiger Zeit mit cat den Inhalt der Datei "dhcp.log" anzeigen lassen, sehen Sie die Anfragen unterschiedlicher Netzwerkgeräte sowie die zugewiesenen IP-Adressen. Öffnen Sie eine Webseite, etwa mit dem Kommando curl http://it-administrator.de, sehen Sie anschließend sowohl einen Eintrag in der Datei "dns.log" als auch in der Datei "http.log". Da Zeek keine TLS-Verbindungen aufbrechen kann, werden Sie die meisten Aufrufe von Webseiten allerdings in der Datei "ssl.log" finden.
Lassen Sie Zeek noch einige Zeit während Ihrer täglichen Arbeit laufen, stellen Sie fest, dass es die Dateien immer wieder archiviert. Für jeden Tag finden Sie unter "/opt/zeek/logs" einen Ordner mit dem entsprechenden Datum. Halten Sie in den Unterordnern mal Ausschau nach der Datei "weird.log", in den Archivordnern natürlich noch mit den entsprechenden Datumsangaben und mittels gzip komprimiert. Entpacken Sie diese und werfen Sie einen Blick auf den Inhalt. In dieser Logdatei landen nämlich auffällige Ereignisse, etwa die Wiederverwendung bestehender Verbindungen oder Fehler von UDP- und TCP-Checksummen.
Logs in JSON umwandeln
Um den Umgang mit den Logdaten einfacher zu gestalten, können Sie das Tab-orientierte Logging in ein etwas moderneres JSON-Format umändern. Um die Konfiguration anzupassen, fügen Sie etwa in der Datei "/opt/zeek/share/zeek/site/local.zeek" die beiden Zeilen hinzu:
# Ausgabe im JSON-Format
@load policy/tuning/json-logs.zeek
Starten Sie nun mit dem zuvor bereits gezeigten deploy
-Befehl den Zeek-Prozess neu und prüfen Sie das Format in den Logfiles. Nun können Sie für die weitere Analyse der Logdaten auch solche Tools anbinden, die eine Eingabe im JSON-Format erwarten.
Fazit
Für Administratoren ist ein verlässlicher Einblick in den Netzwerkverkehr unerlässlich. Damit lassen sich nicht nur Probleme erkennen und analysieren, sondern auch mögliche Angreifer entdecken. Zeek hat bereits mehr als 20 Jahre Entwicklung hinter sich und ermöglicht Ihnen ein klassisches Monitoring der Netzwerkaktivitäten. Das Tool bringt zur Anpassung eine eigene Sprache für Policy-Skripte [3] mit. Damit können Sie das Monitoring flexibel an Ihre Wünsche anpassen oder die Analysemöglichkeiten bei Bedarf um zusätzliche Netzwerkprotokolle erweitern.
(dr)