Saltar a contenido

La estrategia de NICKEL ALLEY: finge hasta que lo consigas

Estafan a desarrolladores de software mediante empresas, ofertas de trabajo y repositorios de código falsos para robar criptomonedas

Los investigadores de Counter Threat Unit™ (CTU) siguen analizando las tendencias de la campaña Contagious Interview llevada a cabo por NICKEL ALLEY, un grupo de amenazas que opera en nombre del Gobierno de Corea del Norte. Este grupo se dedica a atacar a profesionales del sector tecnológico anunciando ofertas de trabajo falsas, engañando a los posibles candidatos mediante un proceso de entrevista de trabajo falso y, finalmente, distribuyendo malware.

En los ataques dirigidos, NICKEL ALLEY suele crear una página de empresa falsa en LinkedIn para ganar credibilidad y mantiene una cuenta de GitHub coordinada para la distribución de malware. En algunos casos, los autores de las amenazas han utilizado la popular táctica «ClickFix» para distribuir malware a través de tareas falsas de evaluación de habilidades laborales. Además, el grupo ha llevado a cabo ataques oportunistas comprometiendo repositorios de paquetes npm y creando paquetes npm con typosquatting. La figura 1 destaca las tres áreas de interés de NICKEL ALLEY.

NICKEL ALLEY victimology

Figura 1: victimología de NICKEL ALLEY

ClickFix infecta con PyLangGhost RAT

Desde al menos mediados de 2025, NICKEL ALLEY ha utilizado ClickFix para distribuir PyLangGhost RAT. El éxito de esta táctica, junto con el cambio frecuente de dominios de staging, indica que el malware siguió siendo eficaz para el grupo a lo largo de 2025. En múltiples ataques a lo largo de finales de 2025, el actor malicioso ordenó a un candidato a un puesto de trabajo que realizara tareas de entrevista falsas en una interfaz web controlada por el atacante. La táctica de ClickFix se implementaba cuando el sitio web mostraba un error informando a la víctima de que debía ejecutar un comando localmente para solucionar el problema (véase la Figura 2). En lugar de solucionar un problema, el comando inicia una serie de acciones que finalmente conducen al RAT PyLangGhost.

VBScript code

Figura 2: ejemplo de código VBScript parcialmente cortado de una infección

Al ejecutarse, el comando recupera un archivo comprimido de un dominio controlado por el atacante y lo guarda en el directorio %TEMP%. A continuación, descomprime el archivo mediante el cmdlet Expand-Archive de PowerShell. Por último, utiliza el comando wscript para ejecutar un archivo VBScript que inicia la cadena de infección. El nombre del archivo comprimido guardado en el disco suele contener «fix» o «patch» (por ejemplo, fixed.zip, patchesWin.zip). El nombre del archivo VBScript suele ser corto (por ejemplo, update.vbs, start.vbs).

El archivo VBScript usa el comando tar para descomprimir un archivo (Lib.zip) que contiene una biblioteca inofensiva y archivos de soporte. A continuación, usa el método Run de WScript.Shell para ejecutar un comando a través de cmd.exe: cmd /c csshost.exe nvidia.py (véase la Figura 3).

VBScript code

Figura 3: ejemplo de código VBScript parcialmente cortado de una infección

El archivo csshost.exe es una copia renombrada del binario legítimo python.exe. El ejecutable ejecuta un archivo Python (nvidia.py) que inicia la cadena de infección del RAT PyLangGhost. Los nombres de los archivos han variado ligeramente en cada infección, pero los patrones de nomenclatura se mantienen constantes. El binario se renombra con un nombre de archivo del sistema de Windows, y el nombre del archivo Python suele imitar a un archivo de controlador asociado.

El archivo Python es uno de los varios módulos de Python que componen el código general del RAT PyLangGhost. El malware permite la exfiltración de archivos, la ejecución de comandos arbitrarios y la elaboración de perfiles del sistema. También recopila credenciales y cookies del navegador. El malware se centra específicamente en los datos de las extensiones de navegador de carteras de criptomonedas de Chrome, lo que pone de relieve las continuas motivaciones financieras de NICKEL ALLEY.

El RAT PyLangGhost fue precedido por una versión basada en GoLang conocida como RAT GoLangGhost. Las primeras muestras de GoLangGhost RAT se observaron en el mundo real alrededor de febrero de 2025. Las muestras de PyLangGhost RAT se descubrieron en mayo, revelando que el código de GoLangGhost se había portado de forma aproximada al lenguaje Python.

El dominio de preparación del malware observado en uno de los ataques (talentacq[.]pro) se creó el 23 de septiembre y se observó en una campaña activa menos de dos semanas después. El nombre del dominio imita a una organización legítima de selección de personal. El dominio controlado por el atacante mostraba una página de error 404 personalizada que contenía una palabra mal escrita («opps») y una frase inusual («Tu enlace de evaluación podría no ser válido o haber caducado»), lo que concuerda con actividades previas de ingeniería social con ofertas de trabajo falsas (véase la Figura 4).

Custom 404 error page containing a misspelled word and unusual phrasing

Figura 4: captura de pantalla de la página 404 personalizada alojada en el dominio de preparación del malware

La página 404 personalizada podría ser un señuelo, ya que este dominio distribuía malware a través de un comando curl. Si una víctima visita el dominio en un navegador web para verificarlo antes de ejecutar el comando curl especificado en el ataque ClickFix, el error sugiere que simplemente hay un problema con el «enlace de evaluación» proporcionado por el atacante. Es posible que la víctima no sospeche de un dominio malicioso. En otro ataque observado, el dominio publicshare[.]org se registró y se utilizó en una campaña el mismo día de agosto.

Repositorios de código utilizados para infectar los sistemas de los desarrolladores

En octubre, los analistas de Sophos observaron un ataque dirigido en el que los autores de la amenaza convencieron a una víctima para que descargara (clonara) el contenido de un repositorio de GitHub y ejecutara el código localmente utilizando los comandos «npm install» y «npm start». La cuenta de GitHub (astrasbytesyncs) se hace pasar por una empresa de desarrollo de software especializada en desarrollo web full stack y soluciones de blockchain (véase la Figura 5). La cuenta contiene enlaces a un sitio web «oficial» de la empresa (hxxps://astrabytesyncs[.]com) y a la supuesta página de la empresa en LinkedIn.

Screenshot of Astra Byte Sync GitHub account

Figura 5: cuenta de GitHub de Astra Byte Sync

La página de inicio del sitio web es genérica y anuncia «talento tecnológico» y soluciones de servicios gestionados (véase la Figura 6). El título de la página web sugiere que el sitio se creó utilizando una plantilla genérica, ya que aún contiene el texto «Soluciones de TI y plantilla corporativa». La página de LinkedIn a la que se hace referencia en la cuenta de GitHub indica un dominio diferente (astra[.]com) como sitio web de la empresa. El análisis reveló que astra[.]com pertenece a una empresa aeroespacial legítima. La inclusión de dominios diferentes en la página falsa de la empresa en LinkedIn y en la cuenta de GitHub pone de manifiesto la incoherencia de los autores de la amenaza y su falta de atención al detalle.

Screenshot of Astra Byte Sync website

Figura 6: captura de pantalla del sitio web de Astra Byte Sync

Una publicación de X de junio de 2025 advertía de una campaña que incluía correos electrónicos dirigidos que promocionaban oportunidades de empleo en la falsa empresa Astra Byte Sync. Sin embargo, los autores de la amenaza aún no habían creado el sitio web en el momento en que se enviaron los correos, por lo que la página simplemente mostraba la página predeterminada del proveedor de alojamiento. El repositorio de GitHub asociado, utilizado para distribuir malware en esta campaña, afirma ser una plataforma de juegos criptográficos Web3 (véase la Figura 7). El tema de estos señuelos coincide con los ataques de los autores de amenazas norcoreanos dirigidos a desarrolladores de Web3 a lo largo de 2025 con el objetivo de robar criptomonedas.

Malicious repository disguised as fake Astra Byte Web3 game

Figura 7: repositorio malicioso disfrazado de juego de criptomonedas falso

El repositorio (web3-social-platform) contenía un archivo llamado index.js que gestionaba la conexión de red con el servidor de preparación del malware. Una variable llamada AUTH_API_KEY, almacenada en un archivo llamado .env, contiene una URL codificada en Base64 que apunta al servidor de preparación del malware. El código de index.js implementa la API fetch de Node.js para enviar una solicitud HTTP a esa URL y recuperar el malware BeaverTail (véase la figura 8). A lo largo de finales de 2025, los actores maliciosos prefirieron el proveedor de la plataforma en la nube Vercel. La plataforma anuncia compatibilidad con el desarrollo web tanto del lado del cliente como del servidor. Los actores maliciosos han sacado partido a este proveedor de plataforma como servicio porque les permite alojar múltiples cargas útiles, y pueden elegir qué carga útil entregar en función de la víctima específica y la configuración del sistema. La carga útil recuperada se ejecuta entonces localmente mediante el método eval().

HTTP GET request to retrieve BeaverTail

Figura 8: solicitud HTTP GET para recuperar BeaverTail

NICKEL ALLEY lleva desde 2024 utilizando este enfoque para engañar a desarrolladores desprevenidos y que infecten sus propios sistemas con malware. Los repositorios de GitHub propiedad de los atacantes suelen contener código sencillo y ofuscado para descargar el malware BeaverTail u OtterCookie.

A finales de 2025, NICKEL ALLEY creó repositorios de código que contenían «tareas» de Visual Studio Code (VS Code). Ubicadas en el archivo de configuración .vscode/tasks.json, las tareas de VS Code son una función legítima que se suele usar para ayudar a automatizar scripts de compilación o para realizar pruebas y depuración rápidas de código. Sin embargo, los actores maliciosos las han usado para ejecutar comandos curl o wget con el fin de recuperar malware según el sistema operativo de la víctima. La tarea está configurada para ejecutarse cuando se abre la carpeta principal del archivo de configuración (.vscode) en la aplicación VS Code. Este comportamiento de ejecución se configura a través de la propiedad runOptions:runOn. Como muestra el fragmento de código de la Figura 9, los atacantes también han utilizado Vercel para alojar la carga útil en estos ataques.

Truncated VS Code configuration file used by NICKEL ALLEY

Figura 9: archivo de configuración tasks.json de VS Code utilizado por NICKEL ALLEY (cortado por brevedad)

El historial de commits de GitHub de los códigos base de NICKEL ALLEY suele reflejar que la URL de almacenamiento del malware se ha eliminado en uno de los commits del código. Este enfoque permite a los atacantes ocultar la infraestructura y los comandos maliciosos cuando el repositorio no está en uso activo. Además, pone de relieve que los atacantes solo necesitan cambiar unas pocas líneas de código para redirigir la descarga de la carga útil a un servidor de almacenamiento de malware diferente.

NICKEL ALLEY actualiza su infraestructura de red para adaptarla a sus señuelos de ingeniería social y evadir las detecciones. El grupo suele dirigirse a trabajadores del sector tecnológico abiertos a oportunidades de trabajo autónomo u otras ofertas, y siguió desplegando el malware PyLangGhost mediante la táctica ClickFix hasta finales de 2025. Los atacantes suelen convencer a las víctimas para que ejecuten el malware en sus sistemas corporativos, exponiendo así a las organizaciones a esta amenaza. Dada la popularidad de la táctica ClickFix en diversas campañas ciberdelictivas y patrocinadas por Estados, todas las organizaciones deberían supervisar la ejecución de comandos resultante de los datos del portapapeles del navegador. Además, los defensores deberían estar atentos a comandos sospechosos que impliquen una combinación de curl, PowerShell y el lanzamiento de ejecutables desde el directorio %TEMP%.

Aunque estos ataques parecen tener como objetivo principal el robo de criptomonedas, el grupo de amenazas ha demostrado su intención de utilizar el acceso inicial para comprometer aún más la cadena de suministro o para llevar a cabo espionaje corporativo. Las persistentes peticiones a las víctimas para que ejecuten código en sus sistemas corporativos en lugar de en un portátil personal refuerzan esta intención. Además, el grupo de amenazas ha seleccionado estratégicamente las cargas útiles posteriores basándose en el perfil del sistema de las víctimas. Los desarrolladores de software, especialmente los del sector financiero y tecnológico, corren un riesgo elevado debido al perfil de objetivos de NICKEL ALLEY. Las organizaciones deben supervisar la ejecución de comandos y el tráfico de red que se genera a partir de procesos de Node.js, ya que puede indicar la descarga de malware. Como práctica de seguridad general, las organizaciones deben animar a los empleados a informar de cualquier contacto sospechoso no solicitado en redes sociales o por correo electrónico relacionado con la contratación.

Detecciones e indicadores de amenaza

SophosLabs ha desarrollado las siguientes detecciones para esta amenaza:

  • Troj/PySteal-AW
  • Troj/PyAgent-AS
  • Troj/PyAgent-AU
  • Troj/Pysteal-AY
  • Troj/PyAgent-AP

Los indicadores de amenaza de la Tabla 1 se pueden usar para detectar actividad relacionada con esta amenaza. Ten en cuenta que las direcciones IP pueden reasignarse. Los dominios, las URL y las direcciones IP pueden contener contenido malicioso, así que valora los riesgos antes de abrirlos en un navegador.

 

IndicadorTipoContexto
hxxps://github[.]com/astrasbytesyncs/web3-social-platformURLRepositorio de GitHub gestionado por NICKEL ALLEY
astrabytesyncs[.]comNombre de dominioSitio web falso de una empresa gestionado por NICKEL ALLEY
astrabytesync[.]comNombre de dominioSitio web falso de una empresa gestionado por NICKEL ALLEY
hxxps://rgg-vercel[.]vercel[.]app/api/dataURLServidor de preparación de malware de NICKEL ALLEY
hxxps://ake-test[.]vercel[.]app/api/dataURLServidor de preparación de malware de NICKEL ALLEY
hxxps://astrahub[.]vercel[.]app/api/dataURLServidor de preparación de malware de NICKEL ALLEY
hxxps://rgg-test[.]vercel[.]app/api/dataURLServidor de preparación de malware de NICKEL ALLEY
hxxps://astraluck-vercel[.]vercel[.]app/api/datURLServidor de preparación de malware de NICKEL ALLEY
52f173a760db5d68e52ba1f1ac51c023Hash MD5 Archivo VBScript usado por NICKEL ALLEY (start.vbs)
2151d4d7dc8d6dca7242928a17ea3fb14f58ccefHash SHA1 Archivo VBScript usado por NICKEL ALLEY (start.vbs)
5e307ef3aa9f20d963382700173530cdc455c1523631bbe22ede3710a2a30373Hash SHA256Archivo VBScript usado por NICKEL ALLEY  (start.vbs)
e9b9d86a22f9795d42632650a78d57df Hash MD5RAT PyLangGhost utilizado por NICKEL ALLEY(nvidia.py)
de05ecc9f0136246d0160923108026660eee06e6 Hash SHA1RAT PyLangGhost utilizado por NICKEL ALLEY(nvidia.py)
1b42fc77155bd78b098e0b72440dd72d6154312569e6ba46f1e5dc94b31c6b42Hash SHA256RAT PyLangGhost utilizado por NICKEL ALLEY (nvidia.py)
a55629dc112ee133ac8dba80549cb0c7Hash MD5Archivo VBScript usado por NICKEL ALLEY (update.vbs)
0f010280ee2a91a57b0edf8f18c0091ce741d4e7Hash SHA1Archivo VBScript usado por NICKEL ALLEY (update.vbs)
5ee13db6a646a9de00bbeec6030677e412bfeecdca226b1ff035e07927970ce0Hash SHA256Archivo VBScript usado por NICKEL ALLEY  (update.vbs)
1d652e7ab71621c7245bfbf84bacdc3eHash MD5RAT PyLangGhost utilizado por NICKEL ALLEY (audiodriver.py)
ac26ecf52002d87f3ba89f9e1b0742eed9e75e3d Hash SHA1 RAT PyLangGhost utilizado por NICKEL ALLEY (audiodriver.py)
58c1e49c67e5b7bcf10d30e370685d10c2fa263f24b8d099a97005c7a35f1346Hash SHA256RAT PyLangGhost utilizado por NICKEL ALLEY (audiodriver.py)
talentacq[.]proNombre de dominioServidor de preparación de malware de NICKEL ALLEY para PyLangGhost RAT
95[.]169[.]180[.]140Dirección IPServidor C2 de PyLangGhost RAT usado por NICKEL ALLEY
publicshare[.]orgNombre de dominioServidor de preparación de malware de NICKEL ALLEY para PyLangGhost RAT
144[.]172[.]93[.]88Dirección IPServidor C2 de PyLangGhost RAT usado por NICKEL ALLEY
hxxps://vscode-ext-git[.]vercel[.]appURLServidor de preparación de malware de NICKEL ALLEY
hxxps://github[.]com/mishalepo/test-projectURL

Repositorio de GitHub usado por NICKEL ALLEY para ingeniería social y distribución de malware

 

chainlink-api-v3[.]comNombre de dominioServidor de preparación de malware de NICKEL ALLEY

Tabla 1: Indicadores de esta amenaza