Network Capture
Aufzeichnung
Um Netzwerktraffic bzw. Datenverkehr oder Pakete aufzuzeichnen gibt es verschiedene Optionen.
Bei den hier genannten Varianten geht es eigentlich nur darum den Network Traffic mit seiner Größe zu ermitteln. D.h. die Paket Inhalte sind uninteressant
Wireshare/Tshark
Die bekannteste Option ist Wireshark mit NPCap Treiber.
NPCap hat allerdings einen Haken, nämlich bei Kommerzieller Anwendung. Das ist nicht oder nur eingeschränkt (5 Installationen von NpCAP) erlaubt.
Wireshark liefert das CLI Tool TShark mit, um Aufzeichnungen in eine Datei zu speichern und später damit zu analysieren.
Der Capture Aufruf ist folgender:
tshark.exe -i 8 -w C:\temp\tsharktrace.pcapng -f "tcp port 445" -s 128 -b filesize:512000000 -b files:1 -q
-i 8 ist das Netzwerk Interface. Die Automatische Ermittlung scheint nicht so gut zu funktionieren
Mit tshark.exe -D kann man sich die Interfaces anzeigen lassen. Ich musste das “Ethernet” wählen.
-f “tcp port 445” schränkt die Aufzeichnung auf SMB Pakete ein.
-b files:1 legt fest, dass nur in eine Datei geschrieben werden soll. Normalerweise würde thsark nach erreichen der angegebene filesize in eine neue Datei schreiben. So aber überschreibt er die eigene Datei wieder, womit sichergestellt werden kann, dass nicht zu viel Speicherplatz auf dem Datenträger benutzt wird
-s 128 gibt an, dass die Pakete nach 128 Byte abgeschnitten werden sollen. Damit soll erreicht werden, dass nur Header aufgezeichnet werden.
Die minimale TCP/IP Header Größe beträgt 54 Byte. IP und TCP Header können aber jeweils noch Optionen enthalten, was die Header vergrößert. Mit 128 Byte ist man auf der sicheren Seite
Powershell NetEventSession
Powershell bietet auch die Möglichkeit Pakete aufzuzeichnen. Die Möglichkeiten für Filter und Einstellungen sind aber im Vergleich zu Wireshark stark eingeschränkt.
Hier ein Beispiel, wie man TCP Sessions aufzeichnen kann. Eine Einschränkung auf bestimmte Ports ist nicht möglich
New-NetEventSession -Name "HeaderOnlySession" -LocalFilePath "C:\temp\PSTrace.etl" -MaxFileSize 512000
Add-NetEventPacketCaptureProvider -SessionName "HeaderOnlySession" -TruncationLength 128 -IpProtocols 6
Start-NetEventSession -Name "HeaderOnlySession"
Stop-NetEventSession -Name "HeaderOnlySession"
-TruncationLength 128 gibt an, dass die Pakete nach 128 Byte abgeschnitten werden sollen.
-IpProtocols 6 gibt an, dass nur TCP Pakete aufgezeichnet werden sollen
Die Aufzeichnung wird in ETL Dateien geschrieben. Diese konnte man “früher” mit dem Microsoft Netzwerk Analyse Tool öffnen. Das gibt es aber nicht mehr.
Um die Daten in Wireshark zu verwenden, muss man die in pcapng Dateien umwandeln. Dafür gibt es von Microsoft einen Konverter “etl2pcapng”
netsh trace
netsh trace kann ebenfalls Pakete aufzeichnen und ist direkt in Windows integriert (ist das Powershell NetEventSession aber auch)
Eine Aufzeichnung geht mit
netsh trace start capture=yes tracefile=c:\temp\nettrace.etl maxsize=512000 protocol=TCP
gestoppt wird das ganze dann mit netsh trace stop
Gegenüber der Powershell Variante hat es zwei Nachteile.
1. Man kann die Paketgröße nicht einschränken
2. Beim stoppen wird ein Merge in eine neue Datei erstellt. Diese wird vermutlich genauso groß, wie die aufgezeichnete Datei. Man benötigt also bei Aufzeichnungen den doppelten Speicherplatz
Es hat damit keine Vorteile gegenüber Powershell
Analyse
Die Analyse wird mit tshark durchgeführt.
Es gibt dabei verschiedenen Möglichkeiten
- tshark -r C:\Temp\tsharktrace.pcapng -q -z conv,ip -Y “tcp.port == 445”
Zeigt eine Übersicht mit Datenmenge pro IP Adresse für hier als Beispiel SMB
Die Ausgabe zeigt leider keine Ports an, daher sollte auf den Port gefiltert werden
Das Ergebnis sieht das so aus:
| <- | | -> | | Total | Relative | Duration |
| Frames Bytes | | Frames Bytes | | Frames Bytes | Start | |192.168.1.1 <-> 192.168.1.2 1067249 1196 MB 766444 144 MB 1833693 1341 MB 1,832898000 1920,9941 - tshark -r C:\Temp\tsharktrace.pcapng -q -z conv,tcp
Zeigt eine Übersicht mit Datenmenge pro Port an. Hier ohne Einschränkung auf den Port. Da der Quellport i.d.R. dynamisch ist, sieht man hiermit keine Gesamtübersicht sondern nur pro Verbindung
Das Ergebnis sieht das so aus:| <- | | -> | | Total | Relative | Duration || Frames Bytes | | Frames Bytes | | Frames Bytes | Start | |192.168.1.1:51198 <-> 192.168.1.2:445 369680 551 MB 211039 13 MB 580719 564 MB 2,721871000 1462,5293192.168.1.1:54172 <-> 192.168.1.2:445 2075 568 kB 2066 606 kB 4141 1175 kB 1472,621295000 451,8065 - tshark.exe -r C:\Temp\tsharktrace.pcapng -T fields -e ip.src -e ip.dst -e ip.len -e tcp.srcport -e tcp.dstport -E separator=“,”
Ideal für die Weiterverarbeitung mit Powershell. Hiermit werden die Pakete einzeln ausgegeben mit den notwendigen Informationen, getrennt durch Komma
Bei der Analyse der Powershell Trace (NetEventSession) und nettrace Daten gibt es etwas zu beachten.
Ich bin mir nicht sicher, ob es daran liegt, dass die Pakete abgeschnitten sind, aber nach der Konvertierung der ETL Dateien nach PCAPNG mit etl2pcapng funktioniert die Analyse mittels tshark -r C:\Temp\tsharktrace.pcapng -q -z conv,ip -Y "tcp.port == 445" nicht.
Es werden dabei immer alle Pakete ausgegeben, auch wenn die nicht dem Filter entsprechen.
Für die Analyse mit Powershell (über tshark.exe -r C:\temp\tsharktrace.pcapng -T fields -e ip.src -e ip.dst -e ip.len -e tcp.srcport -e tcp.dstport -E separator=",") ist das kein Problem.
Möchte man aber eine Analyse mit “conv,ip” muss man vorher alle Pakete mit dem entsprechenden Port in eine extra Datei rausschreiben: tshark.exe -r .\PSTrace.pcapng -Y "tcp.port == 445" -w .\PSTrace_445_.pcapng
Danach kann man die Analyse auf die neue Datei machen