SOC Prime Bias: Medio

18 May 2026 18:43 UTC

PureLogs Entregados a Través de Esteganografía de PawsRunner

Author Photo
SOC Prime Team linkedin icon Seguir
PureLogs Entregados a Través de Esteganografía de PawsRunner
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

La campaña se basa en un correo electrónico de phishing que lleva un archivo TXZ que entrega un cargador JavaScript, el cual establece variables de entorno y lanza conhost.exe en modo sin cabeza. Luego, el cargador descifra una ensambladura .NET conocida como PawsRunner, que recupera imágenes PNG que contienen contenido cifrado oculto a través de técnicas esteganográficas. De esas imágenes, el malware extrae la carga útil final: el infostealer PureLogs .NET. Una vez activo, PureLogs se conecta a un servidor de comando y control remoto a través de HTTPS y exfiltra credenciales de navegador junto con información del sistema.

Investigación

El análisis mostró que el cargador JavaScript obtiene comandos de las variables de entorno del proceso, lanza PowerShell con un indicador de ventana oculta y descifra una carga útil cifrada con AES que se ejecuta a través de la reflexión en .NET. PawsRunner rota entre tres APIs de red y tres cadenas diferentes de user-agent mientras obtiene archivos PNG, luego analiza iTXt and IEND fragmentos para localizar los datos ocultos y descifra la siguiente etapa con RC4. PureLogs, a su vez, usa TripleDES y Gzip para cargar un DLL descargador, realiza solicitudes HTTP protegidas por TLS a puntos de acceso específicos y recopila un amplio conjunto de datos relacionados con el navegador del sistema víctima.

Mitigación

Las organizaciones deben bloquear los adjuntos TXZ en la puerta de enlace de correo electrónico, monitorear las conhost.exe instancias que se ejecutan sin una ventana visible y detectar PowerShell lanzado con la -w hidden bandera. Los equipos de seguridad también deben desplegar firmas tanto para PawsRunner como para PureLogs, restringir el tráfico saliente al dominio e IP de comando y control identificados, y limitar la ejecución de ensambladuras .NET no firmadas. Cuando sea posible, se debe aplicar detección de esteganografía a los archivos de imagen entrantes sospechosos.

Respuesta

Si se detecta esta actividad, aísle el punto final afectado, termine los procesos sospechosos conhost.exe y de PowerShell, y elimine cualquier binario .NET dejado caer del sistema. Las credenciales comprometidas deben ser revocadas, se debe hacer cumplir la autenticación multifactor, y restablecer las contraseñas almacenadas en el navegador. Los investigadores deben también realizar forenses de la red para confirmar que no ocurrió comunicación adicional de comando y control y aplicar pasos de remediación para prevenir reinfección.

Flujo de ataque

Ejecución de Simulación

Prerequisito: El chequeo pre-vuelo de Telemetría y Línea Base debe haber sido aprobado.

  • Narrativa & Comandos del Ataque

    1. Etapa 1 – Preparación de la carga útil cifrada
      • El atacante crea una pequeña carga de prueba ("segredo"), la cifra con AES‑256 usando una clave conocida, codifica el texto cifrado en Base64 y lo almacena en una variable de entorno ENC_PAYLOAD.
    2. Etapa 2 – Ejecutar el cargador de desencriptación de PowerShell
      • Una sola línea lee ENC_PAYLOAD, decodifica la cadena Base64, construye un AesCryptoServiceProviderde .NET, deriva la clave/IV, desencripta los datos, y opcionalmente ejecuta el texto plano.
    3. Etapa 3 – Generar telemetría de detección
      • El comando de PowerShell incluye la palabra literal “AES” (por ejemplo, Nuevo-Objeto System.Security.Cryptography.AesCryptoServiceProvider) y se registra como EventID 4104, cumpliendo con la regla de detección.
  • Guión de Prueba de Regresión

    # -------------------------------------------------
    # Simulación de Desencriptación AES de PowerShell (Dispara detección)
    # -------------------------------------------------
    # 1. Definir una clave estática de 256 bits y IV (para propósitos de demostración)
    $key = [byte[]](0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,
                       0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20)
    $iv  = [byte[]](0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0)
    
    # 2. Carga útil en texto sin formato (ejemplo)
    $plain = [System.Text.Encoding]::UTF8.GetBytes("datos secretos")
    
    # 3. Cifrar la carga útil usando AES (CBC, PKCS7)
    $aes = [System.Security.Cryptography.AesCryptoServiceProvider]::new()
    $aes.Key = $key
    $aes.IV  = $iv
    $aes.Mode = [System.Security.Cryptography.CipherMode]::CBC
    $aes.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7
    $encryptor = $aes.CreateEncryptor()
    $cipherBytes = $encryptor.TransformFinalBlock($plain,0,$plain.Length)
    $cipherB64 = [Convert]::ToBase64String($cipherBytes)
    
    # 4. Almacene el texto cifrado en una variable de entorno
    
    # 5. Cargador de desencriptación – la línea exacta que se registrará (contiene "AES")
    $loader = @"
    `$enc = [System.Environment]::GetEnvironmentVariable('ENC_PAYLOAD')
    `$bytes = [Convert]::FromBase64String(`$enc)
    `$aes = New-Object System.Security.Cryptography.AesCryptoServiceProvider
    `$aes.Key = $($key -join ',')
    `$aes.IV  = $($iv -join ',')
    `$decryptor = `$aes.CreateDecryptor()
    `$plain = `$decryptor.TransformFinalBlock(`$bytes,0,`$bytes.Length)
    `$result = [System.Text.Encoding]::UTF8.GetString(`$plain)
    Write-Output `"Desencriptado: `$result`"
    "@
    
    # Ejecute el cargador (será capturado como EventID 4104)
    Invoke-Expression $loader
  • Comandos de Limpieza

    # Eliminar la variable de entorno
    
    # Limpiar cualquier variable temporal de la sesión
    Remove-Variable -Name key,iv,plain,cipherBytes,cipherB64,loader -ErrorAction SilentlyContinue

Validación Post-Simulación

  1. Ejecute el consulta de validación (ejemplo KQL arriba) pero filtrar por ScriptBlockText contiene "AES" para confirmar que la detección se activó.
  2. Revise los detalles de la alerta en el SIEM; verifique que el nombre de la alerta coincida con la regla (si está definida) y que la severidad se reporte como Alta.

Conclusiones

  • La regla detecta con éxito el escenario sencillo de uso de «AES».
  • Los adversarios pueden evadir dividiendo la palabra (por ejemplo, "AE"+"S"), cargando la clase .NET a través de reflexión, o realizando desencriptación dentro de binarios compilados.
  • Mejorar la regla con indicadores de comportamiento (uso de variables de entorno para texto cifrado, cadenas de alta entropía, creación de AesCryptoServiceProvider objetos, y llamadas subsiguientes a TransformFinalBlock ) mejorará la resiliencia a la ofuscación simple.