LokiBot Después de una Década: Análisis de una Campaña Reciente
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
LokiBot es un infostealer de larga duración diseñado para recopilar credenciales de navegadores, billeteras de criptomonedas y otras aplicaciones sensibles. Esta reciente campaña se basa en una cadena de ejecución de múltiples etapas que comienza con un adjunto de JScript ofuscado entregado a través de malspam. El malware utiliza inyección de procesos y hashing de API para reducir la visibilidad mientras envía datos robados a su infraestructura de comando y control.
Investigación
La investigación examinó una muestra de LokiBot de múltiples etapas y rastreó su progresión desde un adjunto de JScript a un cargador de PowerShell, luego a un inyector de .NET, y finalmente al payload de LokiBot. Los analistas identificaron el uso de protección ConfuserEx, desencriptación basada en XOR y técnicas de carga reflejada a lo largo de la cadena. El estudio también describió el enfoque personalizado de hashing de API del malware y un método de persistencia defectuoso basado en el registro.
Mitigación
Las organizaciones deben implementar un fuerte filtro de correo electrónico para bloquear adjuntos de JScript maliciosos y malspam antes de la entrega. Monitorear procesos secundarios sospechosos generados por wscript.exe and powershell.exe también es esencial. Además, restringir la ejecución de ensamblados de .NET no confiables y observar cambios inusuales en las claves Run de Windows puede ayudar a reducir la exposición.
Respuesta
Si se detecta LokiBot, aísle inmediatamente el endpoint afectado para detener el robo de datos adicional y la comunicación de comando y control. Los investigadores deben realizar un análisis forense para determinar el punto de entrada original y evaluar el alcance del compromiso de credenciales. Todas las cuentas accedidas desde el host infectado deben someterse a un restablecimiento completo de contraseña, y el entorno debe ser escaneado en busca de artefactos relacionados de JScript y PowerShell.
Flujo de Ataque
Detecciones
Puntos de Persistencia Posibles [ASEPs – Hive de Software/NTUSER] (via registry_event)
Ver
La Posibilidad de Ejecución a Través de Líneas de Comando PowerShell Ocultas (via cmdline)
Ver
LOLBAS WScript / CScript (via process_creation)
Ver
Cadenas de PowerShell Sospechosas (via powershell)
Ver
Comunicación C2 de LokiBot a través de Solicitud HTTP [Conexión de Red de Windows]
Ver
Detección de Inyección de Procesos de LokiBot a través de aspnet_compiler.exe [Creación de Procesos de Windows]
Ver
Detectar la Ejecución de LokiBot a través de Script PowerShell en Base64 y Carga de Ensamblado .NET [Windows Powershell]
Ver
Ejecución de Simulación
Requisito Previo: La Verificación Previa de Telemetría y Línea Base debe haber pasado.
Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y tienen como objetivo generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un diagnóstico erróneo.
-
Narrativa y Comandos de Ataque: El adversario ha obtenido acceso inicial exitosamente a través de un archivo JScript. Para evitar soltar un
.dllarchivo detectable en el disco, ejecutan un comando de PowerShell que contiene una cadena codificada en Base64. Este script, una vez decodificado, utiliza laReflexión .NETcapacidad para llamar[System.Reflection.Assembly]::Loadpara obtener una carga maliciosa directamente en la memoria del proceso actual. Este enfoque «sin archivos» es una característica distintiva de LokiBot. -
Script de Prueba de Regresión:
# Script de Simulación de LokiBot # Este script está diseñado para coincidir con las cadenas exactas definidas en la regla de detección. # 1. Simular el componente Base64 $encodedCommand = "script PowerShell codificado en Base64" $dummyPayload = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("CargaFalsa")) # 2. Simular el componente de Carga de Ensamblado utilizando la cadena exacta de la regla de detección # Usamos un try/catch porque esta es una simulación y la "carga" no es un ensamblado real. try { Write-Host "Ejecutando etapa codificada..." Write-Output $encodedCommand # Esta línea es el principal activador para la regla de detección $trigger = "[System.Reflection.Assembly]::Load" Write-Host "Intentando cargar ensamblado a través de: $trigger" # Lo llamamos vía Invoke-Expression para asegurar que aparezca en el ScriptBlockText Invoke-Expression "Write-Host 'Activando: $trigger'" } catch { Write-Error "La simulación falló al ejecutar la cadena de activación." } -
Comandos de Limpieza:
# No se realizan cambios permanentes con el script de simulación. # Simplemente limpiando la consola y asegurándonos de que no existan procesos residuales. Clear-Host Write-Host "Limpieza de simulación completa. No se dejaron archivos."