Lanzamiento de Minería de Criptomonedas en Memoria a Través de PowerShell Almacenado en el Registro
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Una cadena de infección en múltiples etapas utiliza técnicas sofisticadas de ofuscación para desplegar un minero de criptomonedas. El ataque almacena cargas en el Registro y aprovecha los registros DNS TXT junto con la esteganografía en archivos PNG y WAV para entregar etapas posteriores. La carga final carga un ensamblado .NET directamente en la memoria para realizar minería de criptomonedas a través del ecosistema XMRig.
Investigación
Los analistas investigaron alertas repetidas de ejecución de PowerShell y descubrieron una estrategia de ocultamiento de carga en capas. La cadena de infección reconstruye contenido malicioso desde contenedores no convencionales, incluyendo datos de píxeles de imagen y segmentos de archivos de audio. La ejecución progresa desde scripts de PowerShell almacenados en el Registro a través de múltiples etapas antes de cargar finalmente un minero de criptomonedas .NET directamente en la memoria.
Mitigación
Las organizaciones deben imponer políticas estrictas de ejecución de PowerShell y monitorizar modificaciones sospechosas del Registro asociadas con el almacenamiento de cargas. Las soluciones EDR deben detectar la carga de ensamblados .NET en memoria y consultas anómalas de registros DNS TXT. También se debe implementar una lista blanca de aplicaciones para prevenir controladores en modo kernel no autorizados como WinRing0.sys de cargarse.
Respuesta
Si se detecta actividad maliciosa, los hosts afectados deben aislarse inmediatamente para detener la comunicación C2 y la minería de criptomonedas. Los respondedores deben realizar un barrido forense para detectar Tareas Programadas no autorizadas, suscripciones WMI y exclusiones de Microsoft Defender. También se deben revisar los registros de red para conexiones a dominios C2 conocidos y consultas de DNS sobre HTTPS sospechosas.
Flujo del Ataque
Todavía estamos actualizando esta parte.
Detecciones
Cadenas de Powershell Sospechosas (vía powershell)
Llamar Métodos .NET Sospechosos desde Powershell (vía powershell)
Archivo de Imagen Fue Creado por Proceso Sospechoso (vía file_event)
Canal de Comando y Control DoH y DNS (vía proxy)
IOCs (HashMd5) para detectar: Desde PowerShell Almacenado en el Registro hasta Minería de Criptomonedas en Memoria: Una Cadena de Infección en Múltiples Etapas
IOCs (SourceIP) para detectar: Desde PowerShell Almacenado en el Registro hasta Minería de Criptomonedas en Memoria: Una Cadena de Infección en Múltiples Etapas
IOCs (DestinationIP) para detectar: Desde PowerShell Almacenado en el Registro hasta Minería de Criptomonedas en Memoria: Una Cadena de Infección en Múltiples Etapas
Detectar DNS sobre HTTPS y Comunicación POST HTTP/HTTPS C2 [Conexión de Red de Windows]
Suscripción Permanente de Eventos WMI para Ejecución de PowerShell Basada en el Registro [Evento del Registro de Windows]
Ofuscación de PowerShell y Ejecución Encubierta [Windows Powershell]
Ejecución de Simulación
-
Narrativa del Ataque & Comandos: El adversario busca establecer una persistencia a largo plazo en el host comprometido. En lugar de usar una clave ‘Run’ común, optan por una Suscripción Permanente de Eventos WMI más sigilosa. El atacante crea un
CommandLineEventConsumerde WMI. Este consumidor está configurado para ejecutarpowershell.exe. Para evadir el análisis estático de la línea de comandos, la carga maliciosa o configuración real se almacena en una ruta de registro no estándar:HKLM:Softwareuf42a9660377vstdfehzr. Cuando el evento WMI se dispara (simulado aquí por un evento del sistema), el proceso de PowerShell se lanzará, haciendo referencia a la clave de registro específica, desencadenando así la regla de detección. -
Script de Prueba de Regresión:
# Script de Simulación: Ejecución de PowerShell Basada en el Registro WMI # Este script crea la clave de registro específica y la suscripción WMI requerida para activar la regla. $regPath = "HKLM:Softwareuf42a9660377" $regValueName = "vstdfehzr" $regValueData = "Invoke-Expression (Get-ItemProperty -Path '$regPath$regValueName').Payload" # 1. Crear la clave de registro sospechosa y valor if (-not (Test-Path $regPath)) { New-Item -Path $regPath -Force | Out-Null } New-ItemProperty -Path $regPath -Name $regValueName -Value "Write-Host '¡Carga Maliciosa Activada!'" -PropertyType String -Force | Out-Null # 2. Crear Suscripción Permanente de Eventos WMI # Usamos un Filtro para activarlo en un evento común (por ejemplo, tiempo de actividad/inicio del sistema) o simular mediante la creación del consumidor $filterName = "Win32_LocalTimeFilter" $consumerName = "Win32_CommandLineConsumer" $subscriptionName = "WmiPersistenceSubscription" # Crear Filtro (se activa cada minuto para propósitos de simulación) $filterArgs = @{ Name = $filterName QueryLanguage = "WQL" Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" } $filter = Set-WmiInstance -Class __EventFilter -Arguments $filterArgs # Crear Consumidor (El comando de PowerShell que hace referencia a la ruta de registro específica) $commandLine = "powershell.exe -Command `"$regValueData`"" $consumerArgs = @{ Name = $consumerName CommandLineTemplate = $commandLine } $consumer = Set-WmiInstance -Class CommandLineEventConsumer -Arguments $consumerArgs # Vincular Filtro y Consumidor Set-WmiInstance -Class __FilterToConsumerBinding -Arguments @{ Filter = $filter Consumer = $consumer } Write-Host "[+] Simulación: Suscripción WMI y Clave de Registro creadas exitosamente." Write-Host "[+] Esperando que el evento WMI dispare la ejecución de PowerShell..." # Nota: En un entorno real, esperamos el evento. # Para propósitos de prueba, la regla a menudo busca la *creación* o el *disparo del evento*. -
Comandos de Limpieza:
# Script de Limpieza Write-Host "[!] Limpiando artefactos de simulación..." # 1. Eliminar Suscripción WMI Get-WmiObject -Namespace rootsubscription -Class __EventFilter -Filter "Name='Win32_LocalTimeFilter'" | Remove-WmiObject Get-WmiObject -Namespace rootsubscription -Class CommandLineEventConsumer -Filter "Name='Win32_CommandLineConsumer'" | Remove-WmiObject Get-WmiObject -Namespace rootsubscription -Class __FilterToConsumerBinding | Where-Object { $_.Filter -match "Win32_LocalTimeFilter" } | Remove-WmiObject # 2. Eliminar Clave de Registro Remove-Item -Path "HKLM:Softwareuf42a9660377" -Recurse -Force Write-Host "[+] Limpieza completa."