InvisibleFerret

InvisibleFerret es un malware de robo de información asociado al grupo de ciberdelincuencia norcoreano Void Dokkaebi (también conocido como Famous Chollima), que ha estado activo apuntando a desarrolladores de software con acceso a credenciales de carteras de criptomonedas, claves de firma y sistemas de integración continua (CI/CD). La característica más distintiva de su última variante, descubierta por Trend Micro a finales de octubre de 2025, es el uso de Cython (una herramienta que traduce código Python a C/C++ y lo compila a binarios nativos) para ofuscar su código fuente, transformando los scripts legibles de Python en archivos .pyd en Windows (módulos de extensión en formato DLL) y archivos .so en macOS (bibliotecas compartidas). Este cambio representa una evolución significativa en las tácticas de evasión del grupo, ya que los binarios compilados no pueden ser analizados mediante reglas de detección tradicionales basadas en texto plano o patrones de scripts, lo que crea un punto ciego en muchas soluciones de seguridad que confían únicamente en la inspección de código Python.

El malware conserva todas sus capacidades originales a pesar de la ofuscación: puede abrir puertas traseras en sistemas comprometidos, robar credenciales de navegadores (incluyendo tarjetas de crédito y datos de autenticación), monitorear el portapapeles para capturar direcciones de criptomonedas, registrar pulsaciones de teclado (keylogging) y atacar específicamente carteras digitales como MetaMask, Coinbase Wallet y Phantom. InvisibleFerret se compone de cuatro módulos principales con funciones diferenciadas: mod (gestiona la conexión inicial y descarga payloads adicionales), pad (proporciona acceso backdoor y recopila información del sistema), brw (roba datos de navegadores) y mc (exclusivo de macOS, instala extensiones de wallet troyanizadas y degrada la versión de Chrome para eludir las restricciones de Manifest V3 de Google). Para ejecutarse, los binarios Cython requieren un script Python complementario (archivo .mod) que los carga como módulos de extensión y les pasa argumentos de línea de comandos, incluyendo direcciones IP y números de puerto del servidor C2. Aunque las direcciones IP pueden extraerse mediante análisis binario tradicional, los scripts de ejecución en tiempo real pueden sobrescribir estos valores, lo que significa que, para algunos módulos, el destino real del C2 no puede determinarse únicamente a partir del binario sin el script de ejecución acompañante, complicando significativamente los esfuerzos de análisis y detección.

Funcionamiento

1. Evolución Arquitectónica: De Scripts Python a Binarios Compilados con Cython

La transformación más significativa en el funcionamiento de InvisibleFerret es su migración desde scripts Python legibles a binarios nativos compilados con Cython . Cython es una herramienta que traduce código Python a C/C++ y lo compila a código de máquina nativo, lo que mejora la velocidad de ejecución pero, más importante para los atacantes, oculta completamente el código fuente original . Como resultado, el malware ahora se distribuye como archivos .pyd en Windows (módulos de extensión de Python en formato DLL) y archivos .so en macOS (bibliotecas compartidas) .

Sin embargo, estos binarios compilados no son ejecutables independientes porque son módulos de extensión de Python que dependen del runtime CPython para funcionar . Para resolver esta limitación, la cadena de infección genera scripts Python complementarios (archivos .mod) que actúan como cargadores: importan el binario compilado como un módulo de extensión y le pasan argumentos de línea de comandos que incluyen sType (identificador de la víctima), direcciones IP codificadas y números de puerto del C2 . Esta arquitectura introduce una capa adicional de evasión: aunque las direcciones IP pueden extraerse del binario mediante análisis forense, los scripts de ejecución pueden sobrescribir estos valores dinámicamente, lo que significa que, para algunos módulos, el destino real del C2 no puede determinarse únicamente a partir del binario sin el script acompañante .

2. Cadena de Infección Multi-Etapa y el Rol de BeaverTail

La infección comienza con BeaverTail como la primera etapa, un malware que históricamente funcionaba como descargador y ladrón de información, pero que ha evolucionado hacia una plataforma multi-componente con capacidades que ahora solapan significativamente con las de InvisibleFerret . BeaverTail se distribuye a través de múltiples variantes identificadas por sufijos: gjs (roba credenciales y descarga payloads), njs (backdoor con funciones que comienzan con ssh_), zjs (roba frases semilla y claves privadas de wallets) y cjs (instala extensiones troyanizadas en Chrome y Brave) .

La técnica de ofuscación de BeaverTail ha aumentado considerablemente en complejidad :

  • Array shuffling: Un array con aproximadamente 300 fragmentos Base64 es mezclado usando una IIFE (Inmediatamente Invoked Function Expression) al inicio, y una función de lookup recupera cada fragmento por su índice hexadecimal
  • Base64 con stripping: El primer carácter de cada cadena codificada es un byte basura insertado aleatoriamente que debe ser removido antes de la decodificación
  • Cifrado XOR: Las cadenas más sensibles (rutas de archivo, comandos de ejecución) son cifradas con una clave de 4 bytes
  • Split-and-swap de IPs: Las direcciones IP del C2 son divididas en dos mitades, intercambiadas y luego codificadas en Base64

Una vez ejecutado, BeaverTail (gjs) inicia la descarga de InvisibleFerret mediante las funciones dnp_m() y dnp() que realizan peticiones HTTP GET a rutas como /clw/{sType} (Windows) o /clw1/{sType} (macOS) . Los binarios descargados (mod.pyd o mod.so) son escritos en disco junto con un script .mod que los ejecuta, y todo el proceso ocurre típicamente dentro del directorio .vscode/ para simular un entorno de desarrollo legítimo .

3. Estructura Modular y Capacidades Post-Explotación

InvisibleFerret se compone de cuatro módulos principales, cada uno con funciones específicas que son invocadas a través de la cadena de infección :

Módulo Archivo (Win/macOS) Funcionalidad Principal
mod mod.pyd / mod.so Gestiona la conexión inicial, descarga pad y brw, ejecuta el payload Python embebido mediante PyRun_StringFlags()
pad pad.pyd / pad.so Backdoor completo con funciones ssh_* (ej. ssh_upload, ssh_kill, ssh_env), recolección de información del sistema, geolocalización vía ip-api.com, keylogging (Windows) y monitoreo de portapapeles
brw brw.pyd / brw.so Robo de credenciales de navegadores, incluyendo datos de autenticación, tarjetas de crédito y cookies
mc mc.so (solo macOS) Instala extensiones troyanizadas para MetaMask, Coinbase Wallet y Phantom; degrada la versión de Chrome para eludir Manifest V3

El módulo pad es particularmente relevante porque implementa la lógica de exfiltración :

  • FTP como canal alternativo: Utiliza el paquete ftplib de Python para transferir archivos comprimidos (7z en Windows, zip en Unix) con contraseña 2024 como valor por defecto
  • Exfiltración por C2: Envía archivos a través de HTTP POST a la URI /Uploads y a puertos no estándar (1224, 1244, 1245, 2245, 3001, 5000, 8637)
  • Telegram Bot API: Invoca el endpoint sendDocument de la API de Bots de Telegram, exponiendo el Chat ID y el Token Secreto del Bot en el código desofuscado

4. Técnicas de Recolección de Información y Persistencia

Recolección de información del sistema: InvisibleFerret ejecuta una serie de funciones de reconocimiento inmediatamente después de la ejecución :

  • Geolocalización: Consulta http://ip-api.com/json para obtener región, país, ciudad, código postal, ISP, latitud y longitud
  • Información del sistema: Captura versión del SO, hostname, username, procesos en ejecución y paquetes de software instalados
  • Generación de ID único: Combina los datos recolectados para crear un identificador de la víctima que es registrado en el C2 mediante peticiones al endpoint /keys

Robo de datos de navegadores: El malware incluye clases dedicadas para extraer perfiles, cookies, credenciales e historial de Chrome, Chromium, Opera, Brave, Edge y Vivaldi . Las extensiones objetivo incluyen MetaMask, Coinbase Wallet, Phantom, Google Authenticator y 1Password, entre otras.

Keylogging y monitoreo de portapapeles: En sistemas Windows, InvisibleFerret importa pyWinhook para capturar eventos de teclado y ratón, y pyperclip para monitorear cambios en el portapapeles, permitiendo robar contraseñas, semillas de wallets y otras credenciales copiadas por el usuario .

Mecanismos de persistencia: El malware establece persistencia mediante :

  • Tareas programadas (Scheduled Task/Job: Scheduled Task)
  • Claves de registro Run (Boot or Logon AutoStart Execution: Registry Run Key / Startup Folder)
  • Descarga e instalación de AnyDesk (software de escritorio remoto legítimo) a través de las funciones down_any y ssh_any para mantener acceso remoto persistente incluso si el backdoor principal es detectado

5. Evidencias Forenses y Artefactos de Compilación

A pesar de la ofuscación con Cython, los binarios retienen artefactos forenses significativos que pueden ser utilizados para detección y atribución :

  • Nombres de funciones en tabla de exportación: En Windows, PyInit_mod revela el nombre del módulo definido por el usuario
  • Rutas de compilación incrustadas: En macOS, los binarios contienen rutas como /Users/administrator/Pictures/Work/py_module_work/build/temp.macosx-10.13-universal2-cpython-312/, revelando el entorno de desarrollo (usuario administrator, directorio de trabajo Pictures/Work, nombre del proyecto py_module_work)
  • Constantes de cadena comprimidas con Zlib: Las cadenas Python dentro de los módulos están comprimidas con Zlib y almacenadas en secciones binarias, lo que sugiere que la opción CYTHON_COMPRESS_STRINGS fue habilitada durante la compilación
  • Tabla de cadenas recuperable: Al examinar los argumentos de la función PyMemoryView_FromMemory(), se puede obtener el offset y tamaño de las cadenas comprimidas; descomprimir con Zlib revela una tabla con formato [XOR Encoded IP] ? [Module Name].pyx [identifiers] [Base64 blob]

6. Comunicación C2 y Protocolos de Red

InvisibleFerret utiliza múltiples protocolos y puertos no estándar para su comunicación C2, dificultando la detección basada en firmas de red simples :

Protocolo Puertos Observados Propósito
HTTP/HTTPS 1224, 1244, 1245, 2245, 8637 Comunicación principal C2, endpoint /Uploads para exfiltración
TCP Raw 80, 1245, 2245, 3001, 5000 Reverse shell mediante conexión socket
FTP 21 (estándar) Exfiltración alternativa de archivos comprimidos
WebSocket Variable Comunicación bidireccional para comandos en tiempo real

Un detalle técnico que facilita la detección es que el malware utiliza la librería requests de Python con su User-Agent por defecto (python-requests/2.25.1), lo que hace que el tráfico generado sea fácilmente identificable en logs de proxy y firewall . Además, el User-Agent puede ser utilizado como un parámetro de autenticación en algunos C2: si una solicitud no incluye un User-Agent específico (por ejemplo, 203 para Windows), el servidor responde con un payload señuelo benigno en lugar del malware real, implementando así un mecanismo de geofencing y evasión de sandboxes .

7. Estado de Desarrollo y Evolución Futura

El análisis de Trend Micro revela que la migración a Cython no está completamente finalizada . Algunos componentes, como el script any.py, contienen variables incompletas y funcionalidades ausentes, lo que sugiere que los actores de amenazas enfrentan desafíos para completar totalmente la transición. Además, la coexistencia de BeaverTail e InvisibleFerret con funcionalidades solapadas plantea preguntas sobre por qué los atacantes mantienen ambas familias en la cadena de infección, aunque el uso de un servidor C2 compartido sugiere la presencia de un cluster de desarrolladores organizados por lenguaje de programación.

Se espera que Void Dokkaebi continúe refinando ambas herramientas, expandiendo el conjunto de extensiones de wallet troyanizadas a más plataformas y completando la migración a Cython para todos los módulos, lo que eliminará gradualmente los scripts Python en texto plano de la cadena de infección y dificultará aún más la detección basada en scripts .

Impacto y consecuencias

1. Ruptura de la Confianza en el Ecosistema de Desarrollo de Software

El impacto más estratégico de InvisibleFerret es la instrumentalización del proceso de reclutamiento tecnológico como vector de ataque. El grupo Void Dokkaebi (también conocido como Famous Chollima) se hace pasar por reclutadores de empresas de criptomonedas e inteligencia artificial, invitando a desarrolladores a participar en entrevistas de trabajo falsas que involucran la clonación y ejecución de repositorios de código supuestamente relacionados con pruebas técnicas . Esta táctica, denominada "Contagious Interview", ha evolucionado hasta convertirse en una amenaza de cadena de suministro auto-propagable: un desarrollador comprometido no solo pierde sus propias credenciales, sino que su repositorio infectado se convierte en un vector de infección para el siguiente grupo de víctimas .

La magnitud del impacto en la cadena de suministro es alarmante: en marzo de 2026, los investigadores identificaron más de 750 repositorios infectados y más de 500 archivos VS Code maliciosos que se propagaban a través de flujos de trabajo de desarrollo confiables . Cuando el código comprometido alcanza repositorios organizacionales o proyectos populares de código abierto, los contribuyentes, forks y proyectos descendientes quedan expuestos, creando un efecto dominó que puede afectar a miles de organizaciones a partir de una sola infección inicial. Además, se ha documentado el uso de hooks maliciosos de Git (pre-commit y post-checkout) que descargan silenciosamente los payloads de InvisibleFerret y BeaverTail desde infraestructura alojada en Vercel, ejecutándose automáticamente durante las operaciones normales de desarrollo sin que el desarrollador lo note .

2. Compromiso Integral del Entorno de Desarrollo y Pérdida de Activos Críticos

Las consecuencias para un desarrollador infectado van mucho más allá del robo de criptomonedas individuales. Como señala el análisis de Trend Micro, "el mismo puesto de trabajo de desarrollador que contiene una wallet de navegador también puede tener acceso a GitHub, consolas en la nube, secretos de CI/CD, claves de firma, bases de datos de producción o entornos de clientes" . InvisibleFerret está diseñado para exfiltrar sistemáticamente:

  • Credenciales de repositorios: Tokens de GitHub, GitLab y otros sistemas de control de versiones, permitiendo a los atacantes acceder y modificar el código fuente de la organización
  • Secretos de CI/CD: Claves de API, tokens de despliegue y credenciales de pipelines de integración continua que otorgan acceso a infraestructura de producción
  • Claves de firma de código: Permitiendo a los atacantes firmar malware con certificados legítimos de la organización
  • Extensiones de wallet troyanizadas: En macOS, el módulo mc.so no solo roba credenciales de MetaMask, Coinbase Wallet y Phantom, sino que degrada activamente la versión de Chrome a una que aún soporta Manifest V2, ya que la nueva especificación Manifest V3 de Google no proporciona la funcionalidad necesaria para la manipulación de wallets

El módulo pad de InvisibleFerret implementa capacidades de backdoor completo con funciones que comienzan con ssh_ (como ssh_upload, ssh_kill, ssh_env), proporcionando a los atacantes control remoto persistente sobre el sistema comprometido . Además, el malware utiliza múltiples canales de exfiltración para evitar la detección: FTP, HTTP POST a puertos no estándar (1224, 1244, 1245, 2245, 3001, 5000, 8637) y la API de Telegram Bot para enviar documentos robados .

3. Expansión del Perfil de Víctimas y Escalamiento del Impacto

Aunque históricamente el grupo se centraba exclusivamente en desarrolladores de software del sector cripto, una campaña documentada a finales de mayo de 2025 muestra una expansión táctica significativa: los atacantes comenzaron a apuntar a roles de marketing y traders en organizaciones del sector de criptomonedas y retail . Este cambio implica que el radio de impacto potencial se ha ampliado considerablemente, afectando a empleados que, aunque no son desarrolladores, tienen acceso a sistemas financieros y credenciales sensibles.

El uso de la técnica ClickFix en esta campaña representa una evolución en la ingeniería social: los visitantes de una plataforma falsa de reclutamiento alojada en Vercel son instruidos a ejecutar comandos específicos para su sistema operativo bajo el pretexto de resolver un "problema técnico de micrófono", lo que resulta en el despliegue de BeaverTail . Aunque esta variante de BeaverTail es más ligera (apunta solo a 8 extensiones de navegador en lugar de las 22 habituales), demuestra que los operadores están probando activamente nuevos vectores y perfiles de víctima en lo que los investigadores consideran una "prueba limitada" que podría escalar a campañas masivas .

4. Creación de Puntos Ciegos Defensivos mediante Ofuscación Cython

La migración de InvisibleFerret de scripts Python legibles a binarios compilados con Cython (archivos .pyd en Windows y .so en macOS) ha creado una brecha crítica en la cobertura de seguridad . Como advierte Trend Micro, "las reglas de detección existentes que apuntan a scripts de Python podrían no identificar el malware", ya que la mayoría de las soluciones de seguridad tradicionales se basan en la inspección de texto plano o patrones de scripts . Aunque las direcciones IP y números de puerto pueden extraerse mediante análisis binario tradicional, los scripts de ejecución Python pueden sobrescribir estos valores dinámicamente, lo que significa que, para algunos módulos, el destino real del C2 no puede determinarse únicamente a partir del binario sin el script acompañante .

Esta evasión tiene consecuencias prácticas para los equipos de seguridad:

  • Falsos negativos generalizados: Herramientas que solo inspeccionan archivos .py no detectarán los módulos compilados
  • Detección de red limitada: El malware puede utilizar User-Agents específicos como parámetros de autenticación, y si una solicitud no incluye el User-Agent correcto (por ejemplo, 203 para Windows), el servidor responde con un payload señuelo benigno
  • Dependencia de scripts de ejecución: La ausencia del archivo .mod complementario hace que el análisis binario sea insuficiente para determinar el comportamiento completo del malware

5. Consecuencias Económicas y Operativas para las Organizaciones

El impacto financiero de una infección exitosa con InvisibleFerret puede ser catastrófico para organizaciones de todos los tamaños:

Tipo de Activo Comprometido Consecuencia Potencial
Carteras de criptomonedas Pérdida directa de fondos, robo de frases semilla y claves privadas
Tokens de CI/CD Inyección de código malicioso en pipelines de producción, afectando a todos los clientes de la organización
Credenciales de nube Compromiso de infraestructura AWS/Azure/GCP, con potencial de exfiltración masiva de datos o despliegue de ransomware
Claves de firma Distribución de software falsificado firmado con certificados legítimos, erosionando la confianza de los clientes
Secretos de repositorios Robo de propiedad intelectual, código fuente y secretos de aplicaciones

Para pequeñas empresas y contratistas gubernamentales, el riesgo es particularmente agudo porque "los desarrolladores a menudo tienen un acceso inusualmente amplio debido a que los equipos son reducidos y las herramientas están consolidadas" . Un único desarrollador comprometido puede proporcionar a los atacantes una superautopista hacia toda la infraestructura de la organización.

6. Perspectivas a Largo Plazo y Evolución Esperada

Basado en el análisis de Trend Micro, Void Dokkaebi continuará refinando tanto BeaverTail como InvisibleFerret . Se espera que:

  • Expansión del número de wallets troyanizadas: El módulo mc.so ya ha pasado de apuntar solo a MetaMask a incluir Coinbase Wallet y Phantom, y se anticipa que este número aumentará
  • Completación de la migración a Cython: Actualmente algunos componentes (como any.py) aún contienen código Python legible y variables incompletas, pero se espera que eventualmente todos los módulos sean compilados
  • Eliminación de scripts de ejecución: Actualmente solo mc.so elimina su script de ejecución Python después de usarlo, pero es probable que el resto de módulos adopten esta capacidad, ocultando completamente los destinos C2
  • Ataques más dirigidos a macOS: Las rutas de compilación incrustadas en los binarios (/Users/administrator/Pictures/Work/py_module_work/) sugieren un entorno de desarrollo dedicado a macOS, indicando inversión continua en capacidades para esta plataforma

7. Implicaciones para la Postura de Seguridad y Respuesta a Incidentes

Las consecuencias de InvisibleFerret para los equipos de defensa son profundas y requieren una revisión fundamental de las estrategias de seguridad:

Para organizaciones con desarrolladores:

  • Tratar el código de entrevistas como no confiable: Ejecutar repositorios desconocidos en máquinas virtuales desechables o espacios de trabajo aislados en la nube, nunca en la misma máquina utilizada para trabajo de producción
  • Endurecimiento de endpoints de desarrollo: Monitorear el acceso a credenciales de navegadores, manipulación de extensiones de wallet, procesos hijos inusuales de Python y conexiones salientes desde proyectos recién clonados
  • Reducción del radio de explosión: Usar credenciales en la nube de corta duración, tokens de GitHub con alcance limitado, ramas protegidas, gates de aprobación y escaneo de secretos en repositorios y logs de CI/CD

Para equipos de detección:

  • Ampliar la detección más allá de scripts: Incluir inspección de archivos .pyd, .so, .mod y patrones de ejecución del intérprete de Python, especialmente cuando se cargan desde perfiles de usuario, temp, descargas o directorios de proyecto
  • Monitoreo de comportamientos anómalos: Alertar sobre consultas a ip-api.com desde procesos Python, downgrades de versiones de Chrome en macOS, y la presencia de archivos en .vscode/ con nombres como mod.pyd, pad.pyd, brw.so

Para la comunidad de código abierto:

  • Mayor escrutinio de paquetes que incluyen binarios compilados sin código fuente acompañante
  • Implementación de herramientas que puedan inspeccionar el contenido de módulos de extensión Python, no solo scripts de texto plano

Origen y motivación

El malware InvisibleFerret tiene su origen en el grupo de ciberdelincuencia norcoreano Void Dokkaebi (también conocido como Famous Chollima), una facción que opera bajo el paraguas del Grupo Lazarus y que está activa desde al menos 2018. Su motivación principal es la generación de ingresos ilícitos para el régimen de Corea del Norte, tanto mediante el robo directo de criptomonedas de las víctimas como a través del espionaje financiero orientado a sortear las sanciones internacionales. Para lograr este objetivo, el grupo se especializa en una táctica de ingeniería social denominada "Contagious Interview", donde sus operadores se hacen pasar por reclutadores de empresas legítimas de criptomonedas o inteligencia artificial y engañan a desarrolladores de software para que clonen y ejecuten repositorios maliciosos como parte de falsas pruebas técnicas. Una vez infectados, estos desarrolladores no solo pierden sus propias credenciales y carteras digitales, sino que sus entornos de desarrollo se convierten en vectores de propagación, afectando potencialmente a toda la cadena de suministro de software.