
विंडोज़ के लिए C में लिखी गई एक कमांड-लाइन उपयोगिता जो विंडोज़ के लिए इवेंट ट्रेसिंग (ETW) AutoLogger के स्थायी सत्र बनाती और कॉन्फ़िगर करती है।
यह टूल Windows के लिए एक कमांड-लाइन उपयोगिता है जो C में लिखी गई है और persistent Event Tracing for Windows (ETW) AutoLogger सत्र बनाती और कॉन्फ़िगर करती है। AutoLogger सिस्टम बूट होने पर विशिष्ट ETW प्रदाताओं (providers) का ट्रेसिंग स्वचालित रूप से शुरू कर देते हैं, जिससे वे बूट प्रक्रिया के आरंभिक चरण में होने वाली घटनाओं को कैप्चर करने या निरंतर निगरानी परिदृश्यों के लिए उपयोगी बन जाते हैं।
यह टूल कमांड-लाइन तर्कों के माध्यम से AutoLogger सत्र में शामिल करने के लिए ज्ञात EDR से संबंधित ETW प्रदाताओं की पूर्वनिर्धारित सूचियों (lists) का चयन करने की अनुमति देता है। यदि एक ही प्रदाता कई चयनित सूचियों में शामिल है, तो यह कॉन्फ़िगरेशन को मर्ज करता है, यह सुनिश्चित करते हुए कि उच्चतम लॉगिंग स्तर का उपयोग किया जाता है और चयनित सूचियों के आधार पर ईवेंट कवरेज को अधिकतम करने के लिए कीवर्ड फ़्लैग उचित रूप से संयोजित किए जाते हैं।
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph) के माध्यम से persistent ETW AutoLogger सत्र बनाता है।-Defender, -Crowdstrike, -MDE, -Sentinelone, -Cortex)।-All)।-noisy)Level रखता है।MatchAnyKeyword फ़्लैग को bitwise 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 रनटाइम इवेंट्स में गहरी दृश्यता प्रदान करता है। इसका उपयोग संभावित रूप से संदिग्ध गतिविधियों का पता लगाने के लिए किया जा सकता है, जो मैलवेयर गतिविधि या अस्पष्टीकरण (obfuscation) तकनीकों का संकेत दे सकती हैं। एक बार इंस्टॉल होने के बाद, प्रदाताओं को "क्लोन" किए गए EDR के समान "Event log" टेलीमेट्री स्तर प्रदान करना चाहिए। इससे आंतरिक टूल्स द्वारा छोड़े जा सकने वाले IOC की खोज में आसानी होनी चाहिए।
सिस्टम के रीबूट होने और रुचि के एप्लिकेशन चलने के बाद, .etl फ़ाइल (जैसे, Metamorph.etl) में कैप्चर की गई घटनाएँ होंगी।
जनरेट की गई फ़ाइल (C:\Windows\System32\LogFiles\WMI\Metamorph.etl.00x) को कई सार्वजनिक टूल्स द्वारा इन्जेस्ट किया जा सकता है, जैसे:
Nota bene: Metamorph सर्कुलर लॉग फ़ाइलों का उपयोग कर रहा है ताकि रीबूट के बाद इसे गलती से खोया न जाए, लेकिन कुछ टूल्स को आवश्यकता होती है कि फ़ाइल .etl के साथ समाप्त हो, इसलिए उपयोग से पहले आपको प्रत्यय हटाना होगा।
इसके अलावा, कच्चे grep के लिए .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 करें।