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
ftplibde Python para transferir archivos comprimidos (7z en Windows, zip en Unix) con contraseña2024como valor por defecto - Exfiltración por C2: Envía archivos a través de HTTP POST a la URI
/Uploadsy a puertos no estándar (1224, 1244, 1245, 2245, 3001, 5000, 8637) - Telegram Bot API: Invoca el endpoint
sendDocumentde 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/jsonpara 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_anyyssh_anypara 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_modrevela 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 (usuarioadministrator, directorio de trabajoPictures/Work, nombre del proyectopy_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_STRINGSfue 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.sono 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
.pyno 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,
203para Windows), el servidor responde con un payload señuelo benigno - Dependencia de scripts de ejecución: La ausencia del archivo
.modcomplementario 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.soya 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.soelimina 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,.mody 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.comdesde procesos Python, downgrades de versiones de Chrome en macOS, y la presencia de archivos en.vscode/con nombres comomod.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.