
Un plugin per Wireshark per strumentare ETW
Wireshark plugin per lavorare con Event Tracing for Windows
Microsoft Message Analyzer è in pensione e i suoi pacchetti di download sono stati rimossi dai siti microsoft.com il 25 novembre 2019.
Wireshark ha costruito una vasta libreria di dissector di protocolli di rete.
Il miglior strumento per Windows sarebbe quello in grado di raccogliere e mescolare tutti i tipi di log...
Benvenuto Winshark!!!
Winshark è basato su un backend libpcap per catturare ETW (Event tracing for Windows), e un generatore che produrrà tutti i dissector per i provider ETW conosciuti sulla tua macchina.
Abbiamo aggiunto il supporto per Tracelogging per coprire quasi tutte le tecniche di log sul sistema operativo Windows.
Con Winshark e la potenza di Windows, possiamo ora catturare log di rete e di eventi nello stesso strumento. Windows espone molti provider ETW, in particolare uno per la cattura di rete ;-) Non c'è più bisogno di un driver NDIS esterno.
Questo è un grande miglioramento in termini di utilizzo:
Se vuoi:
Installa prima Wireshark. Poi installa semplicemente Winshark.
Attualmente, devi chiedere a Wireshark di interpretare DLT_USER 147 come ETW. Questo perché non hai ancora un valore vero da libpcap per il nostro nuovo Data Link.
Abbiamo inviato una richiesta pull per avere un valore DLT dedicato; è ancora in sospeso.
Per farlo devi aprire la scheda Preferences sotto il pannello Edit. Seleziona DLT_USER sotto Protocols e modifica (Edit) la tabella delle incapsulazioni:

E imposta winshark per DLT = 147 :

Buon divertimento!
Winshark è basato su cmake:
git clone https://github.com/airbus-cert/winshark --recursive
mkdir build_winshark
cd build_winshark
cmake ..\Winshark
cmake --build . --target package --config release
Per capire meglio come funziona Winshark, dobbiamo prima capire come funziona ETW.
ETW è suddiviso in tre parti:
Ci sono molti tipi diversi di provider. I più comuni e utilizzabili sono i provider registrati. Un provider registrato, o basato su manifest, è registrato sotto la chiave di registro HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers.
Questo crea il collegamento tra un ID provider e una dll. Il manifest è incluso nella dll associata in una risorsa chiamata WEVT_TEMPLATE.
Puoi elencare tutti i provider registrati sulla tua macchina usando logman:
logman query providers
Puoi anche elencare tutti i provider associati a un particolare processo:
logman query providers -pid 1234
Alcuni di loro potrebbero apparire senza nome; questi tipi di provider possono produrre log WPP o TraceLogging.
Le sessioni vengono create per raccogliere log da più di un provider.
Puoi creare la tua sessione usando logman:
logman start Mysession -p "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS" -ets -rt
logman update MySession -p "Microsoft-Windows-NDIS-PacketCapture" -ets -rt
Puoi elencare tutte le sessioni attive da un prompt dei comandi come amministratore:
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.
Qui puoi vedere alcuni interessanti sessioni usate dal logger degli eventi per catturare log dalle sessioni Applicazione e Sistema e da Sysmon.
Un consumer è un semplice programma che legge i log da una sessione. Consumer ben noti sono:
logmannetshtracertE ora Winshark!!! Winshark è un semplice consumer ETW. Il vero consumer sottostante è libpcap, (wpcap.dll per Windows) che viene utilizzato da dumpcap.exe, il processo responsabile della cattura dei pacchetti.
Wireshark è suddiviso in tre parti (sì, anche lui):
Wireshark.exe che si occupa di analizzare e dissezionare i protocollidumpcap.exe che si occupa di catturare i pacchettilibpcap (wpcap.dll) che si occupa di interfacciare dumpcap.exe con il sistema operativoWinshark si inserisce nella prima e nell'ultima parte. Implementa un backend per libpcap per catturare eventi ETW.
Winshark funziona con le sessioni ETW, ecco perché puoi selezionare una sessione ETW al posto dell'interfaccia di rete all'inizio della cattura.
Poi Winshark genera dissector lua per ogni provider basato su manifest registrato sul tuo computer, durante la fase di installazione.
Winshark è anche in grado di analizzare i provider basati su tracelogging.
Per catturare il traffico di rete usando Winshark, puoi usare due semplici modi:
pktmon è uno strumento di diagnostica di rete integrato e cross-component per Windows. Può essere utilizzato per la cattura di pacchetti, rilevamento di perdita di pacchetti, filtraggio e conteggio (supportato da RS5)
(https://docs.microsoft.com/en-us/windows-server/networking/technologies/pktmon/pktmon)
pktmon start -c -m real-mode
puoi eseguire pktmon -h per più opzioni (come amministratore)
Ad esempio: Aggiungi un filtro per i pacchetti
pktmon filter add -t icmp
pktmon filter add -t tcp -p 80
Poi avvia Wireshark con privilegi di amministratore e seleziona l'interfaccia Pktmon:

Questo avvierà la cattura dei pacchetti:

netsh.exe trace start capture=yes report=no correlation=no
E poi crea una sessione ETW associata al provider Microsoft-Windows-NDIS-PacketCapture:
logman start Winshark-PacketCapture -p "Microsoft-Windows-NDIS-PacketCapture" -rt -ets
Poi avvia Wireshark con privilegi di amministratore e seleziona l'interfaccia Winshark-PacketCapture:

Questo avvierà la cattura dei pacchetti:

ETW contrassegna ogni pacchetto con un'intestazione che imposta alcuni metadati sul mittente.
Uno di questi è l'ID Processo dell'emettitore. Questo è un grande miglioramento rispetto a una classica cattura di pacchetti da un driver NDIS.
Basta compilare il campo filtro di Wireshark con la seguente espressione:
winshark.header.ProcessId == 1234

@kobykahane fornisce un driver filtro file system che emette un ETW per ogni azione eseguita su un NamedPipe.
bcdedit /set testsigning on
Winshark facendo doppio clic su C:\Program Files\Wireshark\WinsharkUpdate.bat con diritti di Amministratorecmd.exe in Modalità amministratoresc start NpEtw
logman start namedpipe -p NpEtw -ets -rt
Wireshark e seleziona la sessione namedpipe. Buon divertimento!
Questo progetto fa parte di una presentazione fatta per SSTIC