
Una utilidad de línea de comandos para Windows escrita en C que crea y configura sesiones persistentes de AutoLogger de Event Tracing for Windows (ETW).
Esta herramienta es una utilidad de línea de comandos para Windows escrita en C que crea y configura sesiones persistentes de AutoLogger de Event Tracing for Windows (ETW). Los AutoLoggers inician automáticamente el seguimiento de proveedores ETW específicos al arrancar el sistema, lo que los hace útiles para capturar eventos que ocurren al inicio del proceso de arranque o para escenarios de monitoreo continuo.
Esta herramienta permite seleccionar listas predefinidas de proveedores ETW relacionados con EDR conocidos para incluirlos en la sesión AutoLogger mediante argumentos de línea de comandos. Fusiona configuraciones si el mismo proveedor está incluido en múltiples listas seleccionadas, asegurando que se use el nivel de registro más alto y que los indicadores de palabras clave se combinen adecuadamente para maximizar la cobertura de eventos según las listas seleccionadas.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph).-Defender, -Crowdstrike, -MDE, , ).-Sentinelone-Cortex-All).-noisy)Level más alto especificado entre todos los duplicados para un proveedor.MatchAnyKeyword usando OR bit a bit de todos los duplicados (independientemente del nivel) para asegurar la cobertura de palabras clave más amplia.MatchAllKeyword de la entrada de configuración que proporcionó el nivel más alto.Necesitas un compilador de C, como el incluido con Visual Studio.
No hay importaciones no estándar, por lo que la compilación con Cl debería ser posible sin mucha complicación.
Importante: Esta herramienta modifica el Registro de Windows (HKEY_LOCAL_MACHINE) y por lo tanto requiere privilegios de Administrador para ejecutarse correctamente.
.\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
Después de la inicialización, debe ocurrir un reinicio para iniciar el proveedor recién registrado.
Para limpiar este proveedor, se debe:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph)ETW proporciona una visibilidad profunda de los eventos en tiempo de ejecución. Esto se puede aprovechar para detectar actividades potencialmente sospechosas que podrían indicar actividad de malware o técnicas de ofuscación. Una vez instalado, los proveedores deberían proporcionar el mismo nivel de telemetría de "Registro de eventos" que el EDR "clonado". Debería facilitar la investigación de IOC que podrían ser dejados por herramientas internas.
Después de que el sistema se haya reiniciado y las aplicaciones de interés se hayan ejecutado, el archivo .etl (por ejemplo, Metamorph.etl) contendrá los eventos capturados.
El archivo generado (C:\Windows\System32\LogFiles\WMI\Metamorph.etl.00x) puede ser ingerido por varias herramientas públicas como:
Nota bene: Metamorph utiliza archivos de registro circulares para evitar perderlo accidentalmente después de un reinicio, pero algunas herramientas necesitan que el archivo termine en .etl, por lo que deberás eliminar el sufijo antes de usarlo.
Además, es posible básicamente traducir el archivo .etl a un archivo CSV para búsquedas rápidas:
tracerpt MyKeywordMergedETWLogger.etl -o logdump.csv -of CSV
Digamos que tenemos el siguiente programa de Powershell que carga un archivo usando Assembly.Load:
[Reflection.Assembly]:https://raw.githubusercontent.com/synacktiv/metamorph/main/: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" }
Este script básicamente realiza un ataque como el que podría realizar la herramienta impersonate.exe.




Entonces, al final, los EDR y los analistas tienen la oportunidad de realizar análisis de firmas basados en AssemblyName para binarios conocidos (como: "Rubeus") y, de lo contrario, tienen la posibilidad de recuperar scripts de Powershell (incluidos comentarios) para análisis post-mortem.
Si encuentras útil esta herramienta, puedes añadir tus propias soluciones (u otras) siguiendo las instrucciones de CONTRIBUTING.md. Intentaré actualizarla regularmente, pero como dependerá completamente de las soluciones encontradas durante los pentests, siéntete libre de hacer un PR si quieres que tus cambios estén disponibles para todos.