
Ein Wireshark-Plugin zur Instrumentierung von ETW
Wireshark-Plugin zur Arbeit mit der Ereignisablaufverfolgung für Windows
Microsoft Message Analyzer wird eingestellt und seine Downloadpakete wurden am 25. November 2019 von den microsoft.com-Websites entfernt.
Wireshark hat eine riesige Bibliothek von Netzwerkprotokoll-Dissectoren aufgebaut.
Das beste Tool für Windows wäre eines, das alle Arten von Protokollen sammeln und mischen kann...
Willkommen Winshark!!!
Winshark basiert auf einem libpcap-Backend zur Erfassung von ETW (Ereignisablaufverfolgung für Windows) und einem Generator, der alle Dissectoren für bekannte ETW-Anbieter auf Ihrem Rechner erstellt.
Wir haben Tracelogging-Unterstützung hinzugefügt, um nahezu alle Protokollierungstechniken im Windows-Betriebssystem abzudecken.
Mit Winshark und der Leistungsfähigkeit von Windows können wir jetzt Netzwerk- und Ereignisprotokolle im selben Tool erfassen. Windows stellt viele ETW-Anbieter zur Verfügung, insbesondere einen für die Netzwerkerfassung ;-) Kein externer NDIS-Treiber mehr nötig.
Dies ist eine enorme Verbesserung in der Nutzung:
Wenn Sie möchten:
Bitte installieren Sie zuerst Wireshark. Installieren Sie dann einfach Winshark.
Derzeit müssen Sie Wireshark anweisen, DLT_USER 147 als ETW zu interpretieren. Dies liegt daran, dass Sie noch keinen echten Wert von libpcap für unseren neuen Data Link haben.
Wir haben einen Pull-Request eingereicht, um einen dedizierten DLT-Wert zu erhalten; dieser ist noch ausstehend.
Dazu müssen Sie den Reiter Preferences unter dem Menü Edit öffnen. Wählen Sie DLT_USER unter Protocols und klicken Sie Edit in der Tabelle der Kapselungen:

Und setzen Sie winshark für DLT = 147:

Viel Spaß!
Winshark wird von cmake unterstützt:
git clone https://github.com/airbus-cert/winshark --recursive
mkdir build_winshark
cd build_winshark
cmake ..\Winshark
cmake --build . --target package --config release
Um zu verstehen, wie Winshark funktioniert, müssen wir zunächst verstehen, wie ETW funktioniert.
ETW ist in drei Teile unterteilt:
Es gibt viele verschiedene Arten von Anbietern. Die gebräuchlichsten und nutzbarsten sind registrierte Anbieter.
Ein registrierter Anbieter (oder manifestbasierter Anbieter) ist unter dem Registrierungsschlüssel HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers eingetragen.
Dies stellt die Verbindung zwischen einer Anbieter-ID und einer DLL her.
Das Manifest ist in der zugehörigen DLL in einer Ressource namens WEVT_TEMPLATE enthalten.
Sie können alle auf Ihrem Rechner registrierten Anbieter mit logman auflisten:
logman query providers
Sie können auch alle von einem bestimmten Prozess gebundenen Anbieter auflisten:
logman query providers -pid 1234
Einige von ihnen können ohne Namen erscheinen; diese Art von Anbietern können WPP- oder TraceLogging-Protokolle erzeugen.
Sitzungen werden erstellt, um Protokolle von mehr als einem Anbieter zu sammeln.
Sie können Ihre eigene Sitzung mit logman erstellen:
logman start Mysession -p "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS" -ets -rt
logman update MySession -p "Microsoft-Windows-NDIS-PacketCapture" -ets -rt
Sie können alle aktiven Sitzungen über eine Admin-Befehlszeile auflisten:
logman query -ets
Data Collector Set Type Status
-------------------------------------------------------------------------------
...
EventLog-Application Trace Running
EventLog-Microsoft-Windows-Sysmon-Operational Trace Running
EventLog-System Trace Running
...
The command completed successfully.
Sie sehen hier einige interessante Sitzungen, die vom Ereignisprotokollierer verwendet werden, um Protokolle aus den Sitzungen Application, System und Sysmon zu erfassen.
Ein Consumer ist ein einfaches Programm, das Protokolle aus einer Sitzung liest. Bekannte Consumer sind:
logmannetshtracertUnd jetzt Winshark!!! Winshark ist ein einfacher ETW-Consumer. Der eigentliche zugrundeliegende Consumer ist libpcap (wpcap.dll für Windows), das von dumpcap.exe verwendet wird, dem Prozess, der für die Paketerfassung zuständig ist.
Wireshark ist in drei Teile aufgeteilt (ja, auch er):
Wireshark.exe, das für das Parsen und Zerlegen von Protokollen zuständig istdumpcap.exe, das für die Erfassung von Paketen zuständig istlibpcap (wpcap.dll), das für die Schnittstelle zwischen dumpcap.exe und dem Betriebssystem zuständig istWinshark findet im ersten und im letzten Teil statt. Es implementiert ein Backend für libpcap zur Erfassung von ETW-Ereignissen.
Winshark arbeitet mit ETW-Sitzungen, weshalb Sie zu Beginn der Erfassung eine ETW-Sitzung anstelle einer Netzwerkschnittstelle auswählen können.
Dann generiert Winshark während des Installationsschritts lua-Dissectoren für jeden auf Ihrem Computer registrierten manifestbasierten Anbieter.
Winshark kann auch tracelogging-basierte Anbieter parsen.
Um Netzwerkverkehr mit Winshark zu erfassen, können Sie zwei einfache Methoden verwenden:
pktmon ist ein integriertes, komponentenübergreifendes Netzwerkdiagnosetool für Windows. Es kann für Paketerfassung, Erkennung von Paketverlusten, Paketfilterung und -zählung verwendet werden (unterstützt ab RS5).
(https://docs.microsoft.com/en-us/windows-server/networking/technologies/pktmon/pktmon)
pktmon start -c -m real-mode
Sie können pktmon -h für weitere Optionen ausführen (als Admin)
Zum Beispiel:
pktmon filter add -t icmp
pktmon filter add -t tcp -p 80
Starten Sie dann Wireshark mit Administratorrechten und wählen Sie die Pktmon-Schnittstelle:

Dadurch wird die Paketerfassung gestartet:

netsh.exe trace start capture=yes report=no correlation=no
Erstellen Sie dann eine ETW-Sitzung, die mit dem Anbieter Microsoft-Windows-NDIS-PacketCapture verknüpft ist:
logman start Winshark-PacketCapture -p "Microsoft-Windows-NDIS-PacketCapture" -rt -ets
Starten Sie dann Wireshark mit Administratorrechten und wählen Sie die Schnittstelle Winshark-PacketCapture:

Dadurch wird die Paketerfassung gestartet:

ETW kennzeichnet jedes Paket mit einem Header, der einige Metadaten über den Absender setzt.
Eine davon ist die Process ID des Emitters. Dies ist eine enorme Verbesserung gegenüber einer klassischen Paketerfassung von einem NDIS-Treiber.
Geben Sie einfach das Filterfeld von Wireshark mit dem folgenden Ausdruck ein:
winshark.header.ProcessId == 1234

@kobykahane stellt einen Dateisystemfiltertreiber zur Verfügung, der für jede Aktion auf einer NamedPipe ein ETW ausgibt.
bcdedit /set testsigning on
Winshark-Dissector, indem Sie C:\Program Files\Wireshark\WinsharkUpdate.bat mit Admin-Rechten doppelklickencmd.exe im Admin-Modussc start NpEtw
logman start namedpipe -p NpEtw -ets -rt
Wireshark und wählen Sie die Sitzung namedpipe. Viel Spaß!
Dieses Projekt ist Teil einer Präsentation, die für SSTIC erstellt wurde.