Packetbeat

Die kostenfreie Software Packetbeat ist eine Komponente der "Elastic Stack"-Gruppe, mit der Verbindungsdaten auf dem Netzwerk ermittelt und berichtet werden können. Ich möchte hier neben den grundlegenden Einsatz auch ein paar Tricks und Kniffe für den eigenen Einsatz vorstellen.

Packetbeat installieren

Ehe Sie Packetbeat nutzen können, müssen sie die "libpcap"-Schnittstelle installieren. Wer z.B. Wireshark in einer halbwegs aktuellen Version installiert hat, hat mit dem Paket NPCAP schon alle Vorarbeiten geleistet. Ansonsten installieren Sie bitte NPCAP.

NPCAP
https://nmap.org/npcap/

Auch die Installation von Packetbeat ist nicht weiter spektakulär:

Downloads
https://www.elastic.co/downloads/beats/packetbeat

Danach landet die Software in "C:\Program Files\Packetbeat". Bitte starte Sie aber nicht direkt die EXE, denn eine Konfiguration ist erforderlich.

Konfiguration

Packetbeat hat keine GUI und ohne eine "Plug an Play"-Konfiguration. Ohne manuellen Eingriff wird Packetbeat das Interface "0" auslesen und Daten an eine lokale ElasticSearch-Instanz senden. Das klappt nicht. Insofern sind drei Dinge mindestens zu tun:

Task Check

Netzwerkkarte angeben

Dazu müssen wir zuerst die Liste der Netzwerkkarten aus Sicht von "Packetbeat devices" auslesen

C:\Program Files\packetbeat> .\packetbeat.exe devices
0: \Device\NPF_{12833524-952A-4FF7-979E-C22A886C0417} (NdisWan Adapter) (Not assigned ip address)
1: \Device\NPF_{640A1FE0-B6EC-4A33-BC7C-90D6520F2B31} (NdisWan Adapter) (Not assigned ip address)
2: \Device\NPF_{D7CEE47B-CFE3-49B3-9D4A-55D33D052437} (NdisWan Adapter) (Not assigned ip address)
3: \Device\NPF_{D2307B3B-2857-4BFD-AD8C-C216BAA1BD49} (Microsoft) (fe80::1543:e821:a36b:d07a)
4: \Device\NPF_{B3420624-A253-4488-8928-98DA0A078D0E} (Microsoft) (fe80::60ba:aa7e:e8fe:4bda)
5: \Device\NPF_{4B881787-3BA3-45A9-ADDD-AA6763ECEE71} (Microsoft) (fe80::4c5c:33c0:6691:6d42)
6: \Device\NPF_{7E51027B-31BF-48EE-8ACE-F287394E77B9} (No description available) (fe80::810d:a226:87ff:f17)
7: \Device\NPF_{A3ECA41B-E9A7-4881-B3DD-CF612FFB6C2D} (Microsoft) (fe80::38:8973:be97:d9cd 192.168.178.36)
8: \Device\NPF_{DE79432E-2EC0-4261-ADBE-BF4BE3211E4F} (Microsoft Corporation) (fe80::e569:f4df:xxxx 192.168.178.91)
9: \Device\NPF_{A6381FAE-7DD1-4E4D-AC26-9D15A16C9228} (Microsoft Corporation) (fe80::b834:32de:131e:9b44 0.0.0.0)
10: \Device\NPF_{EA51E59C-C8F3-40F6-87F7-5C5639F6ED2E} (Microsoft Corporation) (fe80::7c3e:2740:cab:ba85 172.28.224.1)
11: \Device\NPF_{7BB3B24D-ECFD-4D4C-A9C0-74A8546E02CC} (Realtek USB NIC) (Not assigned ip address)
12: \Device\NPF_Loopback (Adapter for loopback traffic capture) (Not assigned ip address)
13: \Device\NPF_{B68110BE-B4A1-4A40-B93C-576B82A0A601} (Intel(R) Ethernet Connection (4) I219-V) (fe80::dc2b:6442:6de1:10b8 0.0.0.0)

Sie sehen schon an meinem Notebook, dass es einige Netzwerkkarten geben kann. Wichtig ist die Nummer am Anfang, die dann in der Datei packetbeat.yml zu hinterlegen ist:

# =============================== Network device ===============================
# Select the network interface to sniff the data. On Linux, you can use the
# "any" keyword to sniff on all connected interfaces.
packetbeat.interfaces.device: 8

Wer auch dynamische Netzwerkkarten erfassen will, z.B. Dialup-Verbindungen, kann dies mit "any" versuchen. Ich sehe aber Packetbeat nicht auf Clients sondern nur auf Servern mit fester Netzwerkkarte.

Output

Packetbeat sendet seine Datei an ein zu konfigurierendes Zielsystem. Per Default sind ElasticSearch und Logstash vorbereitet aber natürlich können die Daten auch auf in die Pipeline oder als Text-Datei geschrieben werden. Hier einmal das Beispiel für die Konsole

output.console:
#  pretty: true
  pretty: false

Über die Konsole können Sie Packetbeat einfach so starten und per Pipeline die generierten JSON-Ausgaben in der Powershell weiter verarbeiten. Ein Beispiel dazu finden sie weiter unten.

Alternative können die die Daten auch in Protokolldateien schreiben

output.file:
  path: "C:/Program Files/packetbeat/logs"
  filename: packetbeatdata
  rotate_every_kb: 10000
  number_of_files: 7

ACHTUNG: Bei aktiven Servern sind das ganz schnell Megabytes in sehr kurzer Zeit. Dies macht also nur Sinn, wenn sie zeitnah die Dateienauswerten, da Packetbeat sehr umfangreiche Daten generiert

Aus meiner Sicht sollten Sie die Daten am besten über einen weiteren Prozess entsprechende eindampfen.

Filter

In Packetyzer können Sie nicht nur die nackten ICMP/UDP/TCP-Flows nachvollziehen, sondern Auch die Inhalte von Protokollen analysieren, z.B. DNS-Abfragen, TLS-Handhshake etc. Diese Funktion können Sie aber auch abschalten.

packetbeat.protocols:

Start as Service

Packetbeat installiert sich auf Windows als EXE-Programm aber nicht als Dienst. Wenn Sie die Konfiguration eingerichtet und getestet haben, dann können Sie Packetbeat auch unter Windows als Service einrichten. Dazu gibt es extra ein Powershell-Script

PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-packetbeat.ps1

Postprocessing

Wenn Sie nun nicht zufällig Zugriff auf ein ElasticSearch-Backend oder LogsTash haben, dann können Sie ihre ersten Gehversuche mit Packetbeat auch per Datei oder STDOUT machen. Allerdings werden das sehr schnell sehr große Dateien, wenn Sie nicht in Packetbeat schon filtern oder die Ausgabe nicht anderweitig filtern.

Lassen Sie Packetbeat nie in eine lokale Datei ohne konfigurierte Log-Rotation und Löschung laufen. Selbst bei einem normalen Desktop sammeln sich hier schon mehrere Megabytes in wenigen Minuten an, denn die JSON-Ausgabe ist sehr ausführlich.

Daher habe ich den Weg gewählt, dass ein PowerShell-Script die Verarbeitung der JSON-Daten übernimmt und vorverarbeitet. Die rudimentäre Ausgabe auf dem Konsole zeigt grob die Payload der Pakete

Auf meinem Client wurde über sechs normale Stunden im Büro ca. 50 MB Daten ohne ICMP, DNS und UDP3478 aufgezeichnet.

Einschätzung

Wenn ihre Netzwerker nicht mittels NetFlow/sFlow/IPFix/cFlow die Verbindungen in ihrem Netzwerk zwischen den Servern erfassen, dann können Sie als Administrator über den Server mit Packetbeat sehr einfach ein entsprechendes Protokoll anlegen und speichern lassen. Das geht in Grenzen zwar auch mit der eingebauten Windows Firewall aber Packetbeat wertet die empfangenen Pakete ausführlicher aus als nur die Tupel aus SoureIP:Port und ZielIP:Port. Leider erfasst Packetbeat nicht auch gleich den Prozessname auf dem Server, der die Kommunikation geführt hat.

Dennoch ist auch Packetbeat im Standalone-Betrieb eines hilfreiche Software zur Analyse, welche Clients mit dem Server kommunizieren um z.B. Migrationen und Umstellungen vorzubereiten, wenn der bereitgestellte Service nicht selbst ein entsprechendes Logging mitbringt.

In Verbindung mit einer zentralisierten Logging-Lösung können Sie mit Packetbeat auf den verschiedenen Servern sehr gut die Kommunikationen auch ohne Mithilfe von Switch und Router erfassen und sogar zur Angriffserkennung und Analyse nutzen. Wenn Sie nur für eine kurze Zeit die Netzwerkverbindungen analysieren wollen, dann ist Wireshark mein bevorzugtes Werkzeug.

Weitere Links