Contenidos
1. Ejecución de comandos remotos
Una técnica común es utilizar WMI para ejecutar comandos en máquinas remotas. El siguiente script de PowerShell muestra cómo ejecutar un comando en una máquina remota utilizando WMI:
1 2 3 4 |
$cred = Get-Credential $computerName = "NombreComputadoraRemota" $command = "cmd.exe /c echo Hello World > C:\temp\test.txt" Invoke-WmiMethod -Path Win32_Process -Name Create -ArgumentList $command -ComputerName $computerName -Credential $cred |
Este script utiliza Invoke-WmiMethod
para invocar el método Create
del objeto Win32_Process
, lo que permite ejecutar comandos.
2. Búsqueda de instancias de MOF maliciosas
Puedes buscar instancias de archivos MOF (Management Object Format) que podrían haber sido alterados o implantados por atacantes:
1 2 3 |
Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding | Select-Object * Get-WmiObject -Namespace "root\subscription" -Class __EventFilter | Select-Object * Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer | Select-Object * |
Estos comandos buscan en el namespace root\subscription
objetos que puedan ser parte de la persistencia de un malware o un ataque.
3. Monitorización y registro de actividades de WMI
Para detectar posibles usos maliciosos de WMI, puedes configurar el registro de eventos de WMI:
1 2 3 4 5 |
# Habilitar registro WMI Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WBEM\CIMOM -Name LoggingLevel -Value 2 # Ver eventos de WMI Get-WinEvent -LogName Microsoft-Windows-WMI-Activity/Operational |
Estos comandos ajustan el registro en el sistema para capturar actividades de WMI y luego recuperar esos registros para análisis.
4. Restringiendo acceso a WMI
Puedes restringir el acceso a WMI para mitigar el riesgo de ataques, ajustando los permisos mediante PowerShell:
1 2 3 4 |
$namespace = Get-WmiObject -Namespace "root\cimv2" -Class __Namespace | Where-Object { $_.Name -eq 'temp' } $securityDescriptor = $namespace.GetSecurityDescriptor() $securityDescriptor.Descriptor.Dacl = $securityDescriptor.Descriptor.Dacl | Where-Object { $_.Trustee.Name -ne 'S-1-5-10' } $namespace.SetSecurityDescriptor($securityDescriptor) |