SOC Prime Bias: Crítico

26 May 2026 16:01 UTC

Void Dokkaebi utiliza el malware InvisibleFerret compilado con Cython

Author Photo
SOC Prime Team linkedin icon Seguir
Void Dokkaebi utiliza el malware InvisibleFerret compilado con Cython
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Void Dokkaebi, un actor de amenaza vinculado a Corea del Norte, ha mejorado su malware InvisibleFerret compilándolo con Cython en nativo .pyd and .so binarios. Este cambio ayuda al malware a evitar detecciones que se enfocan solo en scripts de Python mientras mantiene sus funciones esenciales, incluyendo el robo de credenciales, registro de teclas, captura de portapapeles y secuestro de carteras de criptomonedas. BeaverTail sirve como el cargador de múltiples etapas que recupera y ejecuta los módulos compilados. La campaña está dirigida a desarrolladores de software y usuarios de criptomonedas que pueden tener credenciales de carteras, claves de firma u otros secretos de alto valor.

Investigación

Los investigadores analizaron toda la cadena de infección y encontraron un movimiento claro hacia módulos de extensión compilados con Cython en lugar de scripts de Python legibles. También documentaron varios métodos de ofuscación, incluyendo codificación Base64, encriptación XOR y manipulación de cadenas divididas e intercambiadas. Durante la investigación, extrajeron direcciones IP, puertos y nombres de archivos codificados, y observaron la creación de Python .mod scripts temporales usados para cargar los binarios maliciosos. El análisis de cadenas reveló además rastros del entorno de construcción y referencias a extensiones de carteras de criptomonedas basadas en navegadores.

Mitigación

Los defensores deberían expandirse más allá de las detecciones enfocadas en scripts y monitorizar archivos sospechosos .pyd and .so que aparecen en ubicaciones inusuales, así como scripts de .mod cargadores temporales. Oportunidades de detección adicionales incluyen los nombres de archivos observados, solicitudes salientes a ip-api.com, y descargas que involucran extensiones de carteras de criptomonedas. Eliminar o aislar los scripts de carga temporales después de la ejecución también puede ayudar a reducir las oportunidades de persistencia.

Respuesta

Si se detectan indicadores relacionados, aísle inmediatamente el punto final afectado, bloquee el tráfico saliente hacia la dirección IP de comando y control identificada, y busque los binarios listados y artefactos de tareas programadas. Los investigadores deben analizar cualquier .mod script recuperado para extraer cargas útiles embebidas y comprender mejor la cadena de ejecución. Cualquier credencial de criptomoneda expuesta, secretos de carteras o claves de firma deben rotarse sin demora.

Flujo de Ataque

Todavía estamos actualizando esta parte. Regístrate para recibir notificaciones

Notifícame

Ejecución de Simulación

Prerequisito: 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 apuntar a generar exactamente la telemetría esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a un diagnóstico incorrecto.

  • Narrativa y Comandos de Ataque:
    El atacante ha obtenido un conjunto de módulos compilados con Cython (mod.pyd, pad.pyd, brw.pyd) que implementan la recolección de credenciales y comunicación C2. Para lograr persistencia, el adversario copia estos módulos en el directorio de configuración de VS Code del usuario actual (%USERPROFILE%.vscode). VS Code escanea periódicamente esta carpeta en busca de extensiones, causando que los módulos maliciosos sean cargados por un script de Python malicioso posterior. La operación de copia genera un evento de Sysmon FileCreate que coincide con la regla Sigma.

  • Script de Prueba de Regresión:

    # -------------------------------------------------
    # Simulación de descarga de módulo Cython InvisibleFerret
    # -------------------------------------------------
    $vscodePath = "$env:USERPROFILE.vscode"
    # Asegúrese de que la carpeta de destino exista
    if (-not (Test-Path -Path $vscodePath)) {
        New-Item -ItemType Directory -Path $vscodePath | Out-Null
    }
    
    # Binarios maliciosos simulados (contenido basura aleatorio)
    $modules = @("mod.pyd","pad.pyd","brw.pyd")
    foreach ($mod in $modules) {
        $dest = Join-Path -Path $vscodePath -ChildPath $mod
        # Escribe 1 KB de bytes aleatorios para imitar una extensión compilada
        $bytes = New-Object byte[] 1024
        (New-Object System.Random).NextBytes($bytes)
        [System.IO.File]::WriteAllBytes($dest, $bytes)
        Write-Host "Creado $dest"
    }
  • Comandos de Limpieza:

    # -------------------------------------------------
    # Limpieza de archivos maliciosos simulados
    # -------------------------------------------------
    $vscodePath = "$env:USERPROFILE.vscode"
    $modules = @("mod.pyd","pad.pyd","brw.pyd")
    foreach ($mod in $modules) {
        $file = Join-Path -Path $vscodePath -ChildPath $mod
        if (Test-Path $file) {
            Remove-Item -Path $file -Force
            Write-Host "Borrado $file"
        }
    }