Operación DualScript: una campaña de malware PowerShell en varias etapas dirigida a criptomonedas y actividades financieras.
Introducción
Durante nuestra investigación, identificamos una infección de malware en varias etapas que aprovecha la persistencia de tareas programadas, los lanzadores de VBScript y la ejecución basada en PowerShell. El ataque opera a través de dos cadenas paralelas: un cargador de PowerShell basado en web que recupera cargas útiles remotas y una cadena de cargadores de PowerShell secundaria que ejecuta el implante RetroRAT.
Al abusar de componentes legítimos de Windows y ejecutar cargas útiles directamente en la memoria, los atacantes minimizan los artefactos en el disco y eluden los mecanismos de detección tradicionales.
Hallazgos iniciales
La investigación se inició tras identificar tareas programadas sospechosas que ejecutaban archivos VBScript desde directorios accesibles para el usuario. Estas tareas estaban configuradas para ejecutar comandos ocultos de PowerShell, lo que indicaba un posible uso indebido de los componentes de scripting nativos de Windows para lograr persistencia.
Un examen más detallado reveló múltiples artefactos sospechosos, entre ellos:
- Lanzadores de VBScript que invocan PowerShell con omisión de la política de ejecución
- Un script de PowerShell (ppamproServiceZuneWAL.ps1) que descarga y ejecuta contenido remoto desde un dominio externo.
- Scripts adicionales de PowerShell utilizados para ejecutar cargas útiles maliciosas directamente en memoria.
Las conexiones salientes a un recurso web remoto que aloja Wallet.txt confirmaron la recuperación activa de comandos desde un servidor externo, lo que indica la capacidad de ejecución remota de comandos.
Estos hallazgos confirmaron la presencia de una vulnerabilidad persistente en múltiples etapas que aprovecha cargas útiles distribuidas a través de la web y técnicas de ejecución de PowerShell en memoria.
Descripción general de la cadena de infección
El acuerdo implica dos cadenas de ejecución paralelas que se activan mediante la persistencia establecida a través de las Tareas programadas de Windows. Ambas cadenas utilizan lanzadores VBScript y la ejecución de PowerShell para desplegar componentes maliciosos, minimizando al mismo tiempo los artefactos en disco.
Una cadena recupera y ejecuta una carga útil remota de PowerShell que secuestra el portapapeles de criptomonedas. La segunda cadena utiliza un lanzador VBScript (PiceVid.vbs) para ejecutar una carga útil basada en PowerShell (PiceVid.ps1) que despliega el malware RetroRAT para la monitorización del sistema, el seguimiento de la actividad financiera y la ejecución remota de comandos.

Cadena 1 – Componentes de puerta trasera web
Persistencia de tareas programadas
La persistencia se estableció mediante tareas programadas de Windows configuradas para ejecutar archivos VBScript desde directorios con permisos de escritura para el usuario. Las tareas invocan PowerShell en modo oculto con la opción de omisión de la política de ejecución habilitada.
Esto garantiza la reejecución fiable de la cadena maliciosa, evitando al mismo tiempo los mecanismos tradicionales de registro de inicio.
Lanzador VBS – ppamproServiceZuneWAL.vbs
Este script actúa como intermediario de ejecución, iniciando PowerShell de forma silenciosa. No contiene la carga útil en sí, sino que funciona como un punto de entrada controlado a la cadena de cargadores remotos.
Cargador remoto – ppamproServiceZuneWAL.ps1
Este script funciona como una puerta trasera basada en web y realiza lo siguiente:
- Validación de instancia única mediante enumeración de procesos WMI
- Recuperación HTTP del script remoto (Wallet.txt)
- Ejecución dinámica mediante [ScriptBlock]::Create().Invoke()
La carga útil remota se ejecuta completamente en memoria. Dado que el contenido se aloja externamente, se puede actualizar dinámicamente, lo que permite un control continuo por parte del atacante.

El script ppamproServiceZuneWAL.ps1 actúa como un cargador remoto y controlador de ejecución basado en PowerShell . Inicialmente, recupera su propio nombre de script usando el objeto $MyInvocation y ejecuta una función llamada CURRENT-instance, que verifica todos los procesos powershell.exe en ejecución a través de WMI para determinar si otra instancia del mismo script ya está activa. Si se detecta una instancia duplicada, el script finaliza para evitar ejecuciones concurrentes múltiples. Después de asegurar la ejecución de una sola instancia, el script carga la biblioteca de red .NET System.Net.Http y usa HttpClient para descargar contenido remoto de hxxps://anycourse[.]net/wp-content/uploads/2025/04/Wallet[.]txt . El archivo Wallet.txt recuperado contiene comandos de PowerShell controlados por el atacante. En lugar de guardar este contenido en el disco, el script convierte dinámicamente el texto descargado en código ejecutable de PowerShell usando [ScriptBlock]::Create() y lo ejecuta directamente en memoria. Este mecanismo transforma eficazmente el script en una puerta trasera basada en la web que permite a los atacantes actualizar y ejecutar comandos de forma remota en el sistema comprometido, simplemente modificando el contenido del archivo Wallet.txt en el servidor.
Carga útil web – Wallet.txt
El archivo descargado contiene instrucciones de PowerShell proporcionadas desde un servidor externo.

Esto permite al atacante:
- Emitir comandos
- Actualizar o redistribuir componentes
- Realizar reconocimiento
- Datos de exfiltración
Este mecanismo convierte eficazmente el sistema comprometido en un implante de PowerShell controlado de forma remota.
El archivo Wallet.txt contiene un script de PowerShell diseñado para secuestrar el portapapeles y robar transacciones de criptomonedas. El script monitorea continuamente el portapapeles del sistema en busca de texto copiado y utiliza expresiones regulares para detectar direcciones de billeteras de criptomonedas, como Bitcoin u otros formatos. Cuando encuentra una dirección coincidente, el script reemplaza la dirección de billetera copiada con una dirección controlada por el atacante y almacenada en su diccionario interno. Como resultado, si la víctima copia una dirección de billetera legítima para enviar criptomonedas, el portapapeles se modifica silenciosamente para que los fondos se redirijan a la billetera del atacante. El script monitorea continuamente el portapapeles a intervalos regulares, lo que permite al atacante interceptar y redirigir de forma encubierta los pagos de criptomonedas en el sistema comprometido.
Direcciones de monederos de criptomonedas controladas por atacantes
El archivo Wallet.txt contiene un diccionario de direcciones de monederos de criptomonedas controlados por el atacante. Cuando se detecta un formato de monedero coincidente en el portapapeles, el malware reemplaza la dirección de la víctima con la del monedero controlado por el atacante.
Las direcciones de reemplazo cubren múltiples criptomonedas, incluidas
Bitcoin (BTC), Litecoin (LTC), Ethereum (ETH), Monero (XMR), XRP, NEO, Bitcoin Cash (BCH), Dogecoin (DOGE), Dash, Stellar (XLM), Binance Coin (BNB), Tezos (XTZ), Tron (TRX), VeChain (VET), DigiByte (DGB), Qtum, Cardano (ADA), Polkadot (DOT), Cosmos (ATOM), Lisk, Kava, Algorand (ALGO), Filecoin (FIL), Nano, NEM, Waves, Zcash (ZEC), Terra y THORChain (RUNE).
Cadena 2 – Componentes del cargador de PowerShell
Lanzador de VBS – PictureVid.vbs
Este script activa la ejecución de PiceVid.ps1, que actúa como punto de entrada para la cadena de cargadores locales, y se ejecuta a través de la tarea programada.
Cargador de PowerShell – PictureVid.PS1
El script contiene la carga útil de RetroRAT y se ejecuta directamente en la memoria.

En lugar de escribir la carga útil en un archivo ejecutable separado, el script lee su contenido y lo ejecuta dinámicamente usando Invoke-Expression (IEx).
Este método permite al atacante ejecutar el malware minimizando los rastros detectables en el disco.
La carga útil en memoria identificada durante el análisis corresponde a RetroRAT , un troyano de acceso remoto que ataca la actividad financiera asociada con instituciones bancarias estadounidenses y plataformas de criptomonedas . El malware monitorea la actividad del usuario, captura las pulsaciones de teclas y rastrea selectivamente las interacciones con servicios financieros para obtener información confidencial.
Análisis de la carga útil – RetroRAT
La carga útil analizada, denominada RetroRAT, es un troyano de acceso remoto (RAT) con fines lucrativos que ataca la actividad relacionada con criptomonedas y banca. El malware instala un gancho global para el teclado y monitoriza continuamente los títulos de las ventanas activas en busca de palabras clave asociadas a aplicaciones financieras y plataformas bancarias o de criptomonedas de uso común. Su arquitectura modular, combinada con un canal de comunicación de comando y control (C2) basado en TCP, permite al atacante ejecutar comandos remotos, manipular archivos, acceder al portapapeles y cargar dinámicamente ensamblados adicionales directamente en la memoria.
Técnicas de evasión de defensa y antianálisis
La muestra implementa múltiples técnicas anti-análisis y de evasión de defensas para evitar la detección y restringir la ejecución en entornos de análisis como sandboxes, máquinas virtuales y sistemas automatizados de análisis de malware.
– Controles de evasión en el entorno de pruebas
La muestra contiene una lista codificada de identificadores comunes de entornos de análisis y de pruebas, incluidos nombres de usuario conocidos como "John Doe", "virus", "usuario de prueba", "entorno de pruebas", etc.
Durante la ejecución, estos valores se comparan con los atributos del sistema para detectar posibles entornos de análisis. Si se encuentra una coincidencia, el malware modifica su comportamiento, probablemente como mecanismo de evasión.


– Detección de máquinas virtuales
El malware también comprueba si se está ejecutando en una máquina virtual consultando los directorios, controladores y servicios relacionados de la máquina virtual. Si encuentra algún rastro, se cierra automáticamente.


– Uso de la ofuscación
La carga útil utiliza intensivamente técnicas de ofuscación básicas pero efectivas. Los nombres de métodos y clases se renombran agresivamente, y varios identificadores contienen caracteres de control Unicode que los hacen parecer incompletos dentro del descompilador. Además, la mayoría de las cadenas significativas se almacenan codificadas y se reconstruyen en tiempo de ejecución. Esto impide un análisis estático directo y obliga al analista a observar los valores dinámicamente. Mediante de4dot, pudimos desofuscar parcialmente el binario, restaurando nombres de métodos legibles.
Uso de Mutex
Al inicio de la ejecución, el binario comprueba si ya existe un mutex con nombre en el sistema. Si lo encuentra, el malware finaliza su ejecución instantáneamente mediante Environment.Exit(0). Esta técnica es utilizada habitualmente por el malware para evitar reinfectar el sistema.


Ejecución multihilo
El malware genera múltiples subprocesos de trabajo para ejecutar en paralelo diferentes componentes de su funcionalidad. Este diseño le permite mantener una monitorización continua y actividad en segundo plano sin interrumpir otras operaciones, como la comunicación de comando y control o el procesamiento de datos.
– Hilo 1 – Bucle de intercepción de eventos de teclado
- nuevo Thread(nuevo ThreadStart(GClass25.smethod_1)).Start();
El implante crea un hilo de ejecución independiente para gestionar la interceptación del teclado mediante SetWindowsHookExA(). Dentro de esta rutina, se registra un gancho de bajo nivel (WH_KEYBOARD_LL) que permite al malware monitorizar la entrada de teclado de bajo nivel.

Una vez instalado el gancho, el hilo entra inmediatamente en un bucle de mensajes mediante Application.Run(). Esto garantiza que el gancho permanezca activo durante toda la vida útil del proceso, lo que permite que el implante capture las pulsaciones de teclas de forma continua.

Dentro de la función de devolución de llamada del hook, el malware comprueba si el mensaje interceptado corresponde a un evento de pulsación de tecla. La condición ` if (int_2 >= 0 && intptr_1 == (IntPtr)256)` garantiza que el hook procese únicamente eventos de pulsación de tecla válidos. El valor 256 corresponde al mensaje WM_KEYDOWN en Windows, lo que significa que el código se ejecuta solo cuando se pulsa una tecla.

Al final de este hilo, el malware llama a UnhookWindowsHookEx() para eliminar el gancho de teclado previamente instalado. Esto garantiza la monitorización continua de las pulsaciones de teclas hasta que se elimine el malware.
-Hilo 2 – Monitoreo basado en palabras clave de los servicios bancarios y de criptomonedas en EE. UU.
- nuevo Thread(nuevo ThreadStart(GClass11.smethod_0)).Start();
Además del hilo 1 que intercepta los eventos del teclado, el malware lanza este hilo adicional responsable de gestionar de forma independiente las comprobaciones en tiempo de ejecución vinculadas a la actividad financiera del usuario.
En primer lugar, se preparan e inicializan el directorio y los nombres de los archivos de registro que se utilizarán posteriormente para almacenar los resultados de la monitorización. Se inicializan dos archivos distintos: uno para la actividad relacionada con criptomonedas («crypto_results.txt») y otro para la actividad bancaria («banks_results.txt»). Estos archivos se almacenan en el directorio %localappdata% del usuario.

A continuación, el malware inicializa dos matrices de cadenas denominadas “array” y “array2”. Los valores de estas matrices se reconstruyen dinámicamente en tiempo de ejecución mediante rutinas de decodificación internas. Esta técnica oculta las palabras clave relevantes a la inspección estática, al tiempo que permite que el malware las utilice durante la ejecución.
El primer array (array2) contiene 47 palabras clave (0x2F) relacionadas con criptomonedas, incluyendo plataformas como Coinbase, blockchain, Bitcoin y otras. El segundo array (array2) contiene 51 palabras clave (0x33) asociadas con instituciones financieras y servicios de pago, incluyendo Bank of America, Wells Fargo, Chime y PayPal.
Un análisis más detallado de las palabras clave en array2 revela que el autor del malware se centró en el ecosistema financiero estadounidense, abarcando los principales bancos nacionales, instituciones regionales, plataformas de banca digital y servicios de pago en línea de uso generalizado.


Ciclo de monitoreo centrado en la banca y las criptomonedas
Tras inicializar la lista de palabras clave y los archivos de resultados, el malware entra en un bucle de monitorización continua diseñado para rastrear las interacciones del usuario con los servicios financieros.

Se crean dos objetos HashSet para los archivos de resultados creados previamente, lo que permite al malware evitar el registro duplicado y mantener un registro de las coincidencias ya identificadas.
Dentro de un bucle infinito, el malware recupera repetidamente el título de la ventana actualmente activa.

El texto capturado se normaliza mediante .ToLower() antes de compararlo con listas de palabras clave predefinidas que incluyen plataformas de criptomonedas y servicios bancarios. Cuando se identifica una coincidencia que no se ha registrado previamente, la palabra clave correspondiente se escribe en un archivo de resultados específico mediante File.AppendAllText(). Además, el malware comienza a capturar y registrar las pulsaciones de teclas posteriores asociadas a esa sesión, lo que le permite recopilar información potencialmente sensible del usuario relacionada con la actividad financiera.

Esta lógica vincula eficazmente la actividad del usuario en primer plano con palabras clave financieras específicas, lo que indica que el malware supervisa selectivamente las sesiones que involucran servicios bancarios, plataformas de pago o servicios de criptomonedas, en lugar de registrar indiscriminadamente toda la actividad.
Conexión C2 y exfiltración de datos
El método smethod_5() implementa la rutina principal de comunicación de comando y control (C2) del malware. Intenta continuamente establecer una conexión de red con servidores remotos predefinidos y gestiona el ciclo de vida del canal de comunicación activo. Una vez establecida la conexión, esta rutina permite una mayor interacción con el servidor remoto, sentando las bases para el intercambio de datos y el control remoto.

Inicialmente, el binario itera a través de una lista de dominios codificados (Class15.string_0) y puertos asociados (Class15.int_0).

Para cada combinación de dominio y puerto, se crea un objeto TcpClient. Una vez establecida la conexión TCP, se ejecuta una rutina de validación (smethod_6) que actúa como una comprobación de enlace para confirmar que el servidor remoto responde con el identificador esperado.

El identificador que observamos en nuestra muestra es la cadena “RETRO-OK-2025”. Las conexiones que no superan esta validación se cierran inmediatamente y se intenta con el siguiente servidor candidato.
Tras una validación exitosa del servidor C2, el malware habilita la función RAT, que recopila periódicamente los datos de pulsaciones de teclas capturados, almacenados en archivos de resultados locales, y los transmite al servidor C2.

El malware lee los datos de pulsaciones de teclas recopilados del archivo de resultados mediante File.ReadAllText(). Los datos robados se combinan con la información de identificación de la víctima y se empaquetan en un mensaje estructurado mediante la rutina interna de creación de paquetes (GClass10). A continuación, el mensaje se transmite al servidor C2 a través del canal de comunicación TCP activo (GClass12), donde la carga útil se cifra antes de la transmisión.
Este mecanismo permite que el malware recopile y transmita de forma fiable datos confidenciales del usuario a la infraestructura C2 remota, lo que permite al atacante obtener información financiera y relacionada con las credenciales del sistema comprometido.
Módulo RAT
Como troyano de acceso remoto, este malware ofrece diversas capacidades de control remoto. Los comandos recibidos del servidor C2 se procesan mediante un despachador centralizado implementado como una instrucción switch, que evalúa los identificadores de comando definidos en la enumeración GEnum1 e invoca la funcionalidad correspondiente.

En función del valor del comando, se invocan diferentes módulos para realizar operaciones como la monitorización remota del escritorio, la manipulación del sistema de archivos, la ejecución de comandos y el control del sistema.


Esta funcionalidad de RAT permite a los atacantes monitorizar y controlar de forma interactiva el sistema infectado, además de robar datos financieros.
Capacidades de mando de RAT
| Capacidad | Acción: |
| Monitorización remota de escritorio/pantalla | Iniciar/detener la captura de pantalla y configurar la transmisión de escritorio remoto. |
| Operaciones del administrador de archivos | Explorar directorios, cargar/descargar archivos, administrar el sistema de archivos |
| Monitorización de procesos/sistemas | Enumerar procesos, recopilar información del sistema, gestionar tareas |
| Ejecución de comandos | Ejecutar comandos o programas en el sistema comprometido. |
| Control de sistema | Apague/reinicie el sistema o finalice el cliente de malware. |
| Memoria / Operaciones avanzadas | Realizar tareas de manipulación de memoria o procesos. |
Palabras clave financieras específicas
| CryptoCurrency | |||
| coinbase | metamasco | Bitflyer | poloniax |
| blockchain | trustwallet | bitgets | probit |
| cartera libre | bitpay | portón | hitbtc |
| billeteras | paxful | coincheck | mercatox |
| Bitcoin | localbitcoins | debito | hotbit |
| btc | criptomonedas | bitso | digifinex |
| binance | Bitfinex | Bitmart | bitbank |
| kraken | bitstamp | exmo | luno |
| eToro | OK | Bitpanda | Géminis |
| coingecko | byte | líquidos | bitbns |
| moneda de mercado | kucoin | coinmetro | cointiger |
| tradingview | huobi | bittrex | |
| Instituciones financieras / Plataformas de pago | |||
| Banco de America | quinto y tercer banco | primerarepublica | banco de escarcha |
| Wells Fargo | Huntington | Banco de Siones | sobre |
| persecución | sincronía | Banco comercial | primeros ciudadanos |
| Citibank | banco de claves | banco del oeste | Banco CenturyLink |
| banco us | American Express | OneFinance | sinovo |
| capital uno | descubre | go2bank | primer horizonte |
| pnc | nbkc | punto verde | eBay |
| tdbank | sofi | simples | paypal |
| truista | repicar | aspiración | payeer |
| aliado | Banco Varo | nbkcbank | Amazon |
| bbt | banco de axones | estrella de bandera | caja |
| Suntrust | Citizens Bank | BMO | pago |
| regiones | Banco M&T | Everbank | |
Conclusión
La Operación DualScript es una campaña de malware en varias etapas que abusa de componentes legítimos de Windows, como Tareas programadas, VBScript y PowerShell, para mantener la persistencia y minimizar los artefactos en disco. El ataque opera a través de dos cadenas paralelas: un cargador de PowerShell basado en web que implementa un secuestrador de portapapeles de criptomonedas y una cadena de cargadores de PowerShell secundaria que ejecuta el implante RetroRAT directamente en la memoria.
Al combinar el robo financiero mediante la manipulación de monederos con capacidades de acceso remoto, los atacantes logran tanto el robo selectivo de criptomonedas como la monitorización continua del sistema. Esta campaña pone de manifiesto el creciente abuso de utilidades de sistemas confiables y técnicas de ejecución en memoria para eludir los mecanismos de detección tradicionales.
Indicadores de compromiso
Basado en archivos
| Artefacto | Hash MD5 | Detección |
| RetroRat | 7546ada1e3144371724db209ba4c5f37 | Troyano.RetroRAT.S3882604 |
| Vídeo de imagen.ps1 | 173b27e7541427929da72ebf37c6db8e | Script.RetroRat.50517.GC |
| Vídeo de imagen.vbs | 243af69d85550232da45f5a30703a4a3 | Script.RetroRat.50517.GC |
| ppamproServiceZuneWAL.ps1 | 43cac07a501e7a717023e0fa8f6111e0 | Script.Trojan.49593.GC |
| ppamproServiceZuneWAL.vbs | 163c38bd7ff7dd27e88eaef1a7a4819f | Ps.Troyano.50374 |
| Wallet.txt | 1dc82fd02a0db3e338128b6f587d7122 | Script.RetroRat.50517.GC |
Basado en red
| URL / Dominio | Categoría |
| info[.]1cooldns[.]com | Malware |
| floatsdk[.]1cooldns[.]com | Malware |
| thewpiratebay[.]st | Malware |
Mapeo de ingletes
| Táctica | Tecnologia | Identificación de la técnica |
| Persistencia | Tarea/trabajo programado | T1053.005 |
| Ejecución | Intérprete de comandos y secuencias de comandos: PowerShell | T1059.001 |
| Ejecución | Intérprete de comandos y scripts: VBScript | T1059.005 |
| Evasión de defensa | Archivos e información ofuscados/comprimidos | T1027 |
| Evasión de defensa | Debilitar las defensas: Deshabilitar o modificar herramientas (omisión de la política de ejecución) | T1562.001 |
| Descubrimiento: | Descubrimiento de procesos | T1057 |
| Colección | Captura de entrada: registro de teclas | T1056.001 |
| Colección | Datos del portapapeles | T1115 |
| Colección | Captura de pantalla | T1113 |
| Acceso a credenciales | Captura de entrada | T1056 |
| Comando y control | Protocolo de capa de aplicación (protocolos web) | T1071 |
| exfiltración | Exfiltración sobre canal C2 | T1041 |
Autores:
Niraj Makasare
Prashil Moon
Rayapati Lakshmi Prasanna Sai



