Heute standen wir vor der Herausforderung, einen Paketmitschnitt für die Kommunikation eines Windows Domain Controllers durchzuführen. Leider hatten wir keine Berechtigung, Änderungen auf Netzwerkebene an der Firewall oder dem Switch für einen Mitschnitt vorzunehmen, und auch die Installation von Wireshark war uns nicht möglich. Daher haben wir auf PktMon zurückgegriffen.
Packet Monitor (Pktmon) ist ein komponentenübergreifendes Netzwerkdiagnosetool für Windows. Es kann zum Erfassen von Paketen, zur Erkennung von Paketausfällen, zum Filtern und Zählen von Paketen verwendet werden. Das Tool ist vor allem in Virtualisierungsszenarien wie Container-Netzwerken und SDN hilfreich, da es einen Einblick in den Netzwerkstapel bietet. Es ist über den Befehl pktmon.exe und über Windows Admin Center-Erweiterungen verfügbar.
In unserem Fall trat ein Problem mit dem RADIUS-Protokoll auf, weshalb wir die gesamte Nutzlast der IP-Pakete benötigten. Daher haben wir das Größenlimit von 128 Byte auf 0 gesetzt. Exemplarisch werden wir hier den Paketmitschnitt für einen der Google-DNS-Server mit der IP-Adresse 8.8.8.8 und DNS als Protokoll auf UDP-Port 53 durchführen.
Befehle
Wir öffnen die Eingabeaufforderung mit Administratorrechten und führen anschließend die erforderlichen Befehle aus.
Filter anzeigen
Der folgende filter list-Befehl listet alle aktivierten Filter auf. Beispiele hierzu finden sich weiter unten. Beim ersten Start sollten keine Filter aktiviert sein.
pktmon filter list
Paketfilter:
Keine
Filter löschen
Um alle aktivierten Filter zu löschen, führen wir den filter remove-Befehl aus.
pktmon filter remove
Filter hinzufügen
Im nächsten Schritt setzen wir wieder die für unseren Paketmitschnitt notwendigen Filter über den filter add-Befehl.
pktmon filter add -I 8.8.8.8/32 -p 53
Es macht hierbei einen Unterschied, ob wir alle Parameter in einem Befehl absetzen oder diese nacheinander hinzufügen. Dies kann je nach Fall unterschiedliche Resultate haben und falsch angewendet die Mitschnitte zu weit beschränken oder zu weit vergrößern.
pktmon filter add -I 8.8.8.8/32
pktmon filter add -p 53
Der erste Befehl liefert diesen Filter. IP-Adresse und Port gelten als gemeinsames Kriterium. Nur Anfragen mit der Quelle-IP 8.8.8.8 und DNS als Service oder der Ziel-IP 8.8.8.8 und DNS als Service werden protokolliert.
C:\Windows\System32>pktmon filter list
Paketfilter:
# Name IP-Adresse Port
- ---- ---------- ----
1 8.8.8.8/32 53
Der zweite Befehl liefert diese Filter. IP-Adresse und Port stehen in keinem Zusammenhang. Alle Anfragen an 8.8.8.8/32 sowie alle DNS-Anfragen werden im Mitschnitt inkludiert.
C:\Windows\System32>pktmon filter list
Paketfilter:
# Name IP-Adresse Port
- ---- ---------- ----
1 8.8.8.8/32
2 53
Paketmitschnitt starten
Nachdem nun alle Filter wie gewünscht gesetzt sind, starten wir den Paketmitschnitt. Die Hilfe-Funktion für weitere Parameter lässt sich übrigens mit start help aufrufen.
Wir ergänzen hier eine Paketgröße von 0, also unbeschränkt, damit nicht nur die Header sondern auch die Nutzlast der Anwendungsebene mitgeschnitten wird. Am Ende erhalten wir auch nochmal eine Auflistung der Parameter, wie auch den Pfad für die Log-Datei PktMon.etl.
pktmon start -c --pkt-size 0
Logger-Parameter:
Logger-Name: PktMon
Protokollierungsmodus: Circular
Protokolldatei: C:\Windows\System32\PktMon.etl
Max. Dateigröße: 512 MB
Verwendeter Arbeitsspeicher: 384 MB
Erfasste Daten:
Paketzähler, Paketerfassung
Aufzeichnungstyp:
Alle Pakete
Überwachte Komponenten:
Alle
Paketmitschnitt stoppen
pktmon stop
Ausgabe in Wireshark-Format konvertieren
Damit wir das Protokoll in Wireshark importieren können, müssen wir es in das PCAP-Format konvertieren.
pktmon etl2pcap C:\WINDOWS\system32\PktMon.etl -o C:\log.pcapng
Resultat
Für den Test habe ich ein nslookup auf google.de gegen die Google-DNS-Server 8.8.8.8 durchgeführt. In Wireshark importiert sehen wir die Pakete wie erwartet.