
Un'utilità da riga di comando per Windows scritta in C che crea e configura sessioni AutoLogger persistenti di Event Tracing for Windows (ETW).
Questo strumento è un'utilità da riga di comando per Windows scritta in C che crea e configura sessioni AutoLogger persistenti di Event Tracing for Windows (ETW). Gli AutoLogger avviano automaticamente la traccia di provider ETW specifici all'avvio del sistema, rendendoli utili per catturare eventi che si verificano all'inizio del processo di avvio o per scenari di monitoraggio continuo.
Questo strumento consente di selezionare liste predefinite di provider ETW correlati a noti EDR da includere nella sessione AutoLogger tramite argomenti da riga di comando. Unisce le configurazioni se lo stesso provider è incluso in più liste selezionate, assicurando che venga utilizzato il livello di registrazione più alto e che i flag delle parole chiave siano combinati opportunamente per massimizzare la copertura degli eventi in base alle liste selezionate.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph).-Defender, -Crowdstrike, -MDE, -Sentinelone, -Cortex).-All).-noisy)Level più alto specificato tra tutti i duplicati per un provider.MatchAnyKeyword usando OR bit a bit da tutti i duplicati (indipendentemente dal livello) per garantire la più ampia copertura delle parole chiave.MatchAllKeyword dalla voce di configurazione che ha fornito il livello più alto.È necessario un compilatore C, come quello incluso in Visual Studio.
Non ci sono import non standard, quindi la compilazione con Cl dovrebbe essere possibile senza troppi problemi.
Importante: Questo strumento modifica il registro di Windows (HKEY_LOCAL_MACHINE) e pertanto richiede privilegi di amministratore per essere eseguito correttamente.
.\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
Dopo l'inizializzazione, è necessario riavviare il sistema per avviare il provider appena registrato.
Per rimuovere questo provider, procedere come segue:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph)ETW fornisce una visibilità profonda sugli eventi di runtime. Questo può essere sfruttato per rilevare attività potenzialmente sospette che potrebbero indicare attività malware o tecniche di offuscamento. Una volta installati, i provider dovrebbero fornire lo stesso livello di telemetria del "Registro eventi" dell'EDR "clonato". Dovrebbe quindi facilitare la ricerca di IOC che potrebbero essere lasciati da strumenti interni.
Dopo che il sistema è stato riavviato e le applicazioni di interesse sono state eseguite, il file .etl (ad es., Metamorph.etl) conterrà gli eventi catturati.
Il file generato (C:\Windows\System32\LogFiles\WMI\Metamorph.etl.00x) può essere importato da diversi strumenti pubblici come:
Nota bene: Metamorph utilizza file di log circolari per evitare di perderli accidentalmente dopo un riavvio, ma alcuni strumenti richiedono che il file termini con .etl, quindi sarà necessario rimuovere il suffisso prima dell'uso.
Inoltre, è possibile convertire il file .etl in un file CSV per una grep veloce e sporca:
tracerpt MyKeywordMergedETWLogger.etl -o logdump.csv -of CSV
Supponiamo di avere il seguente programma PowerShell che carica un file usando 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" }
Questo script esegue sostanzialmente un attacco simile a quello che potrebbe essere eseguito dallo strumento impersonate.exe.




Quindi, alla fine, gli EDR e gli analisti hanno l'opportunità di eseguire analisi delle firme basate su AssemblyName per binari noti (ad esempio: "Rubeus") e, in alternativa, hanno la possibilità di recuperare script PowerShell (inclusi i commenti) per analisi post-mortem.
Se trovi utile questo strumento, puoi aggiungere le tue soluzioni (o quelle di altri) seguendo le istruzioni in CONTRIBUTING.md. Cercherò di aggiornarlo regolarmente, ma poiché dipenderà completamente dalle soluzioni incontrate durante i pentest, sentiti libero di aprire una PR se vuoi che le tue modifiche siano disponibili per tutti.