
Un plugin Wireshark pour instrumenter ETW
Plugin Wireshark pour travailler avec Event Tracing for Windows
Microsoft Message Analyzer est en fin de vie et ses paquets de téléchargement ont été retirés des sites microsoft.com le 25 novembre 2019.
Wireshark a construit une immense bibliothèque de dissecteurs de protocoles réseau.
Le meilleur outil pour Windows serait celui qui peut collecter et mélanger tous les types de logs...
Bienvenue Winshark!!!
Winshark est basé sur un backend libpcap pour capturer ETW (Event Tracing for Windows), et un générateur qui produira tous les dissecteurs pour les fournisseurs ETW connus sur votre machine.
Nous avons ajouté le support de Tracelogging pour couvrir presque toutes les techniques de journalisation sur le système d'exploitation Windows.
Avec Winshark et la puissance de Windows, nous pouvons désormais capturer les logs réseau et événementiels dans le même outil. Windows expose de nombreux fournisseurs ETW, en particulier un pour la capture réseau ;-) Fini le besoin d'un pilote NDIS externe.
C'est une énorme amélioration en termes d'utilisation :
Si vous voulez :
Veuillez d'abord installer Wireshark. Ensuite, installez simplement Winshark.
Actuellement, vous devez demander à Wireshark d'interpréter le DLT_USER 147 comme ETW. Cela est dû au fait que vous n'avez pas encore de valeur réelle de libpcap pour notre nouvelle couche de liaison.
Nous avons soumis une pull request pour obtenir une valeur DLT dédiée ; elle est toujours en attente.
Pour ce faire, vous devez ouvrir l'onglet Preferences sous le panneau Edit. Sélectionnez DLT_USER sous Protocols et Edit la table d'encapsulation :

Et définissez winshark pour DLT = 147 :

Profitez-en !
Winshark est propulsé par cmake :
git clone https://github.com/airbus-cert/winshark --recursive
mkdir build_winshark
cd build_winshark
cmake ..\Winshark
cmake --build . --target package --config release
Pour mieux comprendre comment Winshark fonctionne, nous devons d'abord comprendre comment ETW fonctionne.
ETW est divisé en trois parties :
Il existe de nombreux types de providers. Les plus courants et utilisables sont les providers enregistrés. Un provider enregistré, ou basé sur un manifeste, est enregistré sous la clé de registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers.
Cela fait le lien entre un ID de provider et une dll. Le manifeste est intégré dans la dll associée sous un nom de ressource WEVT_TEMPLATE.
Vous pouvez lister tous les providers enregistrés sur votre machine en utilisant logman :
logman query providers
Vous pouvez également lister tous les providers liés à un processus particulier :
logman query providers -pid 1234
Certains peuvent apparaître sans nom ; ces types de providers peuvent produire des logs WPP ou TraceLogging.
Les sessions sont créées pour collecter les logs de plus d'un provider.
Vous pouvez créer votre propre session en utilisant logman :
logman start Mysession -p "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS" -ets -rt
logman update MySession -p "Microsoft-Windows-NDIS-PacketCapture" -ets -rt
Vous pouvez lister toutes les sessions actives à partir d'une ligne de commande administrateur :
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.
Vous pouvez voir ici quelques sessions intéressantes utilisées par le journaliseur d'événements pour capturer les logs des sessions Application et System ainsi que de Sysmon.
Un consumer est un programme simple qui lira les logs d'une session. Les consumers bien connus sont :
logmannetshtracertEt maintenant Winshark!!! Winshark est un simple consumer ETW. Le consumer sous-jacent réel est libpcap, (wpcap.dll pour Windows) qui est utilisé par dumpcap.exe, le processus en charge de la capture de paquets.
Wireshark est divisé en trois parties (oui, lui aussi) :
Wireshark.exe qui est en charge de l'analyse et du dissage des protocolesdumpcap.exe qui est en charge de la capture des paquetslibpcap (wpcap.dll) qui est en charge de l'interface entre dumpcap.exe et le système d'exploitationWinshark prend place dans la première et la dernière partie. Il implémente un backend pour libpcap afin de capturer les événements ETW.
Winshark fonctionne sur les sessions ETW, c'est pourquoi vous pouvez sélectionner une session ETW à la place d'une interface réseau au début de la capture.
Ensuite, Winshark génère des dissecteurs lua pour chaque provider basé sur un manifeste enregistré sur votre ordinateur, lors de l'étape d'installation.
Winshark est également capable d'analyser les providers basés sur Tracelogging.
Pour capturer le trafic réseau avec Winshark, vous pouvez utiliser deux méthodes simples :
pktmon est un outil de diagnostic réseau intégré et multi-composants pour Windows. Il peut être utilisé pour la capture de paquets, la détection de perte de paquets, le filtrage et le comptage (supporté à partir de RS5)
(https://docs.microsoft.com/en-us/windows-server/networking/technologies/pktmon/pktmon)
pktmon start -c -m real-mode
vous pouvez exécuter pktmon -h pour plus d'options (en tant qu'administrateur)
Par exemple : Ajoutez un filtre pour les paquets
pktmon filter add -t icmp
pktmon filter add -t tcp -p 80
Ensuite, lancez Wireshark avec des privilèges administrateur et sélectionnez l'interface Pktmon :

Cela démarrera la capture de paquets :

netsh.exe trace start capture=yes report=no correlation=no
Et créez ensuite une session ETW associée au fournisseur Microsoft-Windows-NDIS-PacketCapture :
logman start Winshark-PacketCapture -p "Microsoft-Windows-NDIS-PacketCapture" -rt -ets
Ensuite, lancez Wireshark avec des privilèges administrateur et sélectionnez l'interface Winshark-PacketCapture :

Cela démarrera la capture de paquets :

ETW marque chaque paquet avec un en-tête qui définit certaines métadonnées sur l'expéditeur.
L'une d'elles est l'ID de processus de l'émetteur. C'est une énorme amélioration par rapport à une capture de paquets classique depuis un pilote NDIS.
Remplissez simplement le champ de filtre de Wireshark avec l'expression suivante :
winshark.header.ProcessId == 1234

@kobykahane fournit un pilote de filtre système de fichiers qui émet un ETW pour chaque action effectuée sur un NamedPipe.
bcdedit /set testsigning on
Winshark en double-cliquant sur C:\Program Files\Wireshark\WinsharkUpdate.bat avec les droits Admincmd.exe en mode Adminsc start NpEtw
logman start namedpipe -p NpEtw -ets -rt
Wireshark et sélectionnez la session namedpipe. Profitez-en !
Ce projet fait partie d'une présentation faite pour SSTIC