Extrahieren von Feldern und Formatierung

WiresharkBeginner
Jetzt üben

Einführung

Die Analyse von Netzwerkverkehr erfordert häufig das Extrahieren spezifischer Informationen aus Tausenden von Paketen. Während das Lesen von Paket-Zusammenfassungen für Menschen hilfreich ist, benötigen automatisierte Tools und Skripte strukturierte Daten.

Hier beginnt die Paketanalyse, sich mit Data Engineering zu überschneiden. Ein Mensch kann einige Paketzeilen visuell überfliegen, aber Computer arbeiten am besten, wenn Informationen in stabilen Feldern und Spalten angeordnet sind. Sobald Netzwerkverkehr in eine strukturierte Ausgabe umgewandelt wurde, kann er durchsucht, gezählt, grafisch dargestellt, in Tabellenkalkulationen importiert oder von Python- und SIEM-Pipelines verarbeitet werden.

In diesem Lab lernen Sie, wie Sie rohen Netzwerkverkehr mithilfe von tshark, der Befehlszeilenversion von Wireshark, in strukturierte, leicht zu parsende Formate umwandeln. Sie werden üben, die standardmäßige, für Menschen lesbare Ausgabe zu deaktivieren, spezifische Protokollfelder (wie IP-Adressen, DNS-Abfragen und HTTP-User-Agents) auszuwählen und die Ergebnisse für die weitere Analyse in kommagetrennte Werte (CSV) zu formatieren.

Standardausgabe deaktivieren

In diesem Schritt lernen Sie, wie Sie das Standard-Ausgabeverhalten von tshark ändern.

Wenn Sie eine Paketaufzeichnungsdatei mit tshark lesen, druckt es standardmäßig eine Zusammenfassungszeile für jedes einzelne Paket. Diese Zusammenfassung ist für das menschliche Lesen konzipiert, aber sehr schwer mit Skripten zu parsen oder in Datenbanken zu importieren. Um spezifische Daten zu extrahieren, müssen wir tshark zunächst anweisen, diese Standardzusammenfassung nicht mehr zu drucken und stattdessen die Ausgabe spezifischer Felder vorzubereiten.

Der Grundgedanke ist, dass Zusammenfassungen präsentationsorientiert sind, während Felder analyseorientiert sind. Eine Zusammenfassungszeile mag für eine Person praktisch aussehen, aber kleine Formatierungsänderungen können nachgelagerte Automatisierungen unterbrechen. Das Extrahieren benannter Felder liefert Ihnen eine vorhersehbare Ausgabe, die andere Tools zuverlässig verarbeiten können.

Wir erreichen dies mit der Option -T fields. Das Flag -T steht für "Text output format", und die Einstellung auf fields weist tshark an, dass wir nur die exakten Datenfelder sehen möchten, die wir angeben.

Wenn Sie jedoch nur -T fields verwenden, ohne anzugeben, welche Felder Sie möchten, wird tshark nichts ausgeben. Sie müssen es mit dem Flag -e kombinieren, das das exakte zu extrahierende Feld angibt.

Beginnen wir damit, nur die Framenummer aus unserer Beispiel-Aufzeichnungsdatei zu extrahieren. Stellen Sie sicher, dass Sie sich in Ihrem Standard-Arbeitsverzeichnis /home/labex/project befinden.

Führen Sie den folgenden Befehl aus, um die Datei sample.pcap zu lesen und nur die Framenummern zu extrahieren:

tshark -r sample.pcap -T fields -e frame.number | head -n 5

Das Flag -r weist tshark an, aus einer Datei zu lesen, anstatt Live-Verkehr aufzuzeichnen. Der Teil | head -n 5 des Befehls begrenzt die Ausgabe auf die ersten 5 Zeilen, damit Ihr Terminal nicht mit Zahlen überflutet wird.

Sie sollten eine Ausgabe ähnlich dieser sehen:

1
2
3
4
5

Beachten Sie, wie sauber die Ausgabe im Vergleich zur Standard-tshark-Zusammenfassung ist. Dies ist die Grundlage für den Aufbau strukturierter Datensätze aus Netzwerkverkehr.

Benutzerdefinierte Spaltenformatierung verwenden

In diesem Schritt lernen Sie, wie Sie mehrere Felder gleichzeitig extrahieren und sie als kommagetrennte Werte (CSV) formatieren.

Wenn Sie mehrere -e Flags verwenden, extrahiert tshark mehrere Felder und platziert sie in Spalten. Standardmäßig trennt tshark diese Spalten mit einem Tabulatorzeichen. Während tabulatorgetrennte Werte nützlich sind, ist CSV der universelle Standard für den Import von Daten in Tabellenkalkulationen, Datenbanken und Analysetools wie Pythons Pandas.

Dies mag wie ein Formatierungsdetail erscheinen, aber die Wahl des Formats bestimmt, was Sie als Nächstes tun können. Sicherheitsarbeit beinhaltet oft das Verschieben von Daten zwischen Paketanalysatoren, Shell-Pipelines, Tabellenkalkulationen, Notebooks und Dashboards. Je einfacher Ihre Ausgabe woanders importiert werden kann, desto einfacher wird es, einen einmaligen Befehl in einen wiederholbaren Workflow zu skalieren.

Um das Zeichen zu ändern, das die Spalten trennt, verwenden wir die Option -E separator=.

Lassen Sie uns die Framenummer, die Quell-IP-Adresse und die Ziel-IP-Adresse extrahieren und sie als CSV formatieren. Die Feldnamen für Quell- und Ziel-IPs sind ip.src und ip.dst.

Um sicherzustellen, dass wir uns Pakete ansehen, die tatsächlich IP-Adressen haben (und Dinge wie Low-Level-ARP-Pakete überspringen, die dies nicht tun), verwenden wir den Filter -Y "ip" zusammen mit unserer Feldextraktion.

Führen Sie den folgenden Befehl in Ihrem Terminal aus:

tshark -r sample.pcap -Y "ip" -T fields -e frame.number -e ip.src -e ip.dst -E separator=, | head -n 5

Sie sollten eine Ausgabe ähnlich dieser sehen:

12,127.0.0.1,127.0.0.11
13,127.0.0.11,127.0.0.1
14,127.0.0.1,127.0.0.11
15,127.0.0.11,127.0.0.1
16,172.60.1.88,104.18.26.120

Da wir die anfänglichen ARP-Pakete herausgefiltert haben, werden Sie feststellen, dass die Framenummern möglicherweise nicht bei 1 beginnen. Manchmal enthält ein Paket ein bestimmtes Feld nicht; in solchen Fällen lässt tshark diese Spalte einfach leer, wodurch sichergestellt wird, dass Ihre CSV-Struktur intakt bleibt.

DNS-Abfragen extrahieren

In diesem Schritt kombinieren Sie die Feldextraktion mit Anzeigefiltern, um spezifische Informationen aus dem DNS-Verkehr zu isolieren und zu extrahieren.

Bei der Analyse von Netzwerkverkehr möchten Sie selten Felder aus allen Paketen extrahieren. Normalerweise interessieren Sie sich für ein bestimmtes Protokoll. Sie können das Flag -Y verwenden, um einen Anzeigefilter anzuwenden, bevor die Felder extrahiert werden.

Dies ist ein weiteres Beispiel dafür, den Umfang einzugrenzen, bevor Ergebnisse interpretiert werden. Wenn Sie nicht zusammengehörige Protokolle in einem Export vermischen, wird die Ausgabe spärlich und verwirrend, da viele Pakete die von Ihnen angeforderten Felder nicht enthalten werden. Das Filtern im Voraus hält den resultierenden Datensatz semantisch kohärent.

Wenn wir zum Beispiel sehen möchten, welche Websites ein Benutzer zu besuchen versucht, können wir uns seine DNS-Abfragen ansehen. Der Anzeigefilter für DNS-Verkehr ist einfach dns. Das spezifische Feld, das den abgefragten Domänennamen enthält, ist dns.qry.name.

Lassen Sie uns die Quell-IP-Adresse und den DNS-Abfragenamen extrahieren, aber nur für Pakete, die tatsächlich DNS-Anfragen oder -Antworten sind.

Führen Sie den folgenden Befehl aus:

tshark -r sample.pcap -Y "dns" -T fields -e ip.src -e dns.qry.name -E separator=, | head -n 5

Ihre Ausgabe wird ähnlich wie diese aussehen:

10.0.2.15,labex.io
168.63.129.16,labex.io
10.0.2.15,google.com
168.63.129.16,google.com

Durch die Kombination von -Y "dns" mit -T fields stellen wir sicher, dass unsere CSV-Ausgabe nur relevante Daten enthält und das Hintergrundrauschen anderer Netzwerkprotokolle herausgefiltert wird.

HTTP-User-Agents extrahieren

In diesem letzten Schritt extrahieren Sie detaillierte Informationen aus dem HTTP-Verkehr, wobei Sie sich speziell auf den User-Agent-String konzentrieren.

Der User-Agent ist ein String, der von einem Webbrowser oder Client an den Server gesendet wird und die verwendete Software identifiziert (z. B. Chrome, Firefox oder ein benutzerdefiniertes Skript). Sicherheitsanalysten extrahieren häufig User-Agents, um bösartige automatisierte Skripte oder veraltete Browser in einem Netzwerk zu identifizieren.

Metadaten wie der User-Agent sind nützlich, da sie Hinweise auf das Verhalten geben, ohne dass Sie jedes Byte des Inhalts untersuchen müssen. In der Netzwerkverteidigung stammen viele nützliche Beurteilungen aus Kontextfeldern wie User-Agent, Host-Header, TLS-Servername oder DNS-Abfragename. Sie helfen Analysten dabei, normalen Anwendungsdatenverkehr von verdächtiger Automatisierung zu unterscheiden.

Um HTTP-Anfragen zu isolieren, können wir den Anzeigefilter http.request verwenden. Die Felder, die wir extrahieren möchten, sind die Quell-IP (ip.src), die angeforderte Host-Domäne (http.host), der spezifische URI-Pfad (http.request.uri) und der User-Agent-String (http.user_agent).

Führen Sie den folgenden Befehl aus, um diese HTTP-Metadaten in ein CSV-Format zu extrahieren:

tshark -r sample.pcap -Y "http.request" -T fields -e ip.src -e http.host -e http.request.uri -e http.user_agent -E separator=,

Sie sollten eine Ausgabe ähnlich dieser sehen:

10.0.2.15,example.com,/,curl/7.81.0
10.0.2.15,neverssl.com,/,LabEx-Custom-Agent/1.0

Beachten Sie, wie wir erfolgreich den benutzerdefinierten User-Agent LabEx-Custom-Agent/1.0 extrahiert haben, der während der Lab-Einrichtung generiert wurde. Diese Technik ist unglaublich leistungsstark für die Erstellung automatisierter Berichte oder die Einspeisung von Netzwerkdaten in Sicherheitsüberwachungs-Dashboards.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie rohe Netzwerkpaketaufzeichnungen mithilfe von tshark in strukturierte, analysierbare Daten umwandeln. Sie begannen damit, die standardmäßige, für Menschen lesbare Ausgabe mit -T fields zu deaktivieren. Anschließend lernten Sie, wie Sie spezifische Datenpunkte mit dem Flag -e auswählen und sie mit -E separator=, in CSV formatieren. Schließlich kombinierten Sie diese Formatierungstechniken mit Anzeigefiltern (-Y), um hochspezifische Informationen wie DNS-Abfragenamen und HTTP-User-Agent-Strings zu extrahieren. Diese Fähigkeiten sind unerlässlich für die Automatisierung der Netzwerkanalyse und die Integration von Paketdaten mit anderen Sicherheitstools.