Hola a tod@s!

Continuando con el primer post y con el segundo, nos faltaría mostrar las herramientas relacionadas con el scripting en Windows, es decir, aquellas que son utilizadas para analizar los ficheros Javascript, Visual Basic Script, Powershell, HTA, Batch, etc.

Lo primero de todos es saber qué va a ejecutar este tipo de ficheros, la siguiente tabla nos ayudará.

Ejecución del fichero

En todos estos casos os recomiendo una herramienta que coloree la sintaxis del código fuente, siempre ayuda. Una buena opción es Notepad++ o Sublime Text.

Empezaremos con los ficheros Javascript. En muchas ocasiones veréis el código en 1 sóla línea y, perdonadme si os digo que, así no ve nada, es poco intuitivo así que utilizaremos Notepad++ para transformarlo en varias líneas y legible.

Notepad una sola linea ilegible

Necesitaremos realizar los siguientes pasos. Pulsamos en el plugin JSTool y seleccionamos JSMin para eliminar comentarios que dificulten el análisis y después JSFormat para dejarlo en diferentes líneas (además, tabula las líneas por bloques).

Ejecucion de JSFormat para dejarlo en una sola línea

Después de pulsar en las opciones, esto ya es otra cosa.

Vision en varias lineas de código

Si el código javascript está dentro de una página html, entre los tags <script> y </script>, podréis utilizar cualquier navegador con las opciones de debugging que traen incorporados, añadís “<script>debugger;” y el depurador se detendrá ahí para ir paso a paso.

A menudo os vais a encontrar palabras como:

  • eval
  • document.write
  • document.parentNode.insertBefore
  • document.body.appendChild
  • arguments.callee

en páginas maliciosas. Hay que vigilar estas cosas.

Volviendo a los ficheros javascripts que se ejecutan fuera de los navegadores, se pueden usar aplicaciones como SpiderMonkey, V8 o cscript.exe del propio Windows.

A mí me gusta utilizar Notapad++ y preparar el script hasta donde pueda. Por ejemplo, veo que separa las cadenas para evitar detecciones de cadenas sospechosas. Se ve que es una clave de Registro.

¿Qué tal si reemplazamos “ + “ por una cadena vacía?

Reemplazo de +

Reemplazamos:

Reemplazo por cadena vacia

Y nos quedan un montón de cadenas, que si hubiesen estado tal cual, serían detectadas por casi todos los antivirus.

Cadena detectable por casi cualquier antivirus

Más abajo había más código, y es ligeramente similar, en lugar de usar comillas dobles, han usado simples para ponerlo un poquito más difícil.

Uso de comillas simples antivirus

Reemplazamos y quedaría:

Reemplazo de comillas simples

Poco a poco lo vamos dejando lo más legible que podamos. Hay cadenas que no sabremos qué hacen hasta que no ejecutemos el script. Supongamos que sabemos, más o menos, qué hace todo el script menos la última parte. Necesitaríamos crear un nuevo fichero con ese contenido (siempre respetando las variables llamadas dentro él, tienen que estar todas las que sean llamadas en el script o fallará).

ShellExecute, nos haría polvo, ejecutaría Powershell con esos parámetros y no queremos eso, así que renombramos a una función que nos imprima por pantalla el comando para ver como seguir, por ejemplo WScript.Echo. Tenemos que dejarlo como nosotros queremos.

ShellExecute

Tenemos varias opciones, pero lo más rápido es utilizar Cyberchef.

Cyberchef Malware

Siempre nos ayudaremos de utilidades como esta para poder ver qué hace ciertas cadenas codificadas o cifradas.

Para que veáis qué haría una de las herramientas que he comentado, SpiderMonkey (js para los amigos), aquí tenemos un ejemplo con un malware que he modificado ligeramente para que se vea mejor en el ejemplo:

SpiderMonkey con ejemplo modificado

Esta utilidad puede llegar a donde queráis ya que es capaz de sustituir las llamadas a las funciones reales por otras a vuestro antojo. He modificado la llamada de document.write por WScript.Echo para que muestre por pantalla el contenido de la salida comentado (los comentarios comienzan por // en javascript). Para ello se ejecuta js con 2 ficheros, primero el que lleva nuestras funciones personalizadas (que serán cargadas o definidas antes que las buenas) y segundo el script que queremos analizar.

Para los ficheros vbs o Visual Basic Script, haremos lo mismo que con los anteriores.

Modificación de ficheros Visual Basic Script

Lo abrimos y vamos quitando lo que nos sobra. Podemos ir poco a poco sacando el valor de las variables.

Obtención del valor de las variables

Extraemos el código que necesitamos conocer su resultado y lo vamos ejecutando poco a poco.

Ejecución progresiva del fichero Visual Basic Script modificado

Y una vez finalizado componemos como quedaría el script final:

Composición Script final

Descarga un fichero de paste.ee, lo guarda en un directorio accesible a todos los usuarios y lo ejecuta con Powershell gracias al Objeto Wscript.Shell y su método Run. El 0 del final quiere decir que se ejecutará de forma oculta a la vista del usuario.

Hay una herramienta, VbsEdit, que permite ir depurando el script paso a paso. Al ser una versión de pago, cada vez que queráis continuar con el proceso de depurado, tendréis que esperar unos segundos (que se irán incrementando en cada breakpoint) a que finalice una ventana a modo de contador. El aspecto es similar al de Visual Basic for Applications que trae Microsoft Office. Es muy buena alternativa si se licencia, todo lo que sea depurar está muy bien, más rápido que componer tú mismo las partes de que consta el script, aunque es más barato, eso sí.

Nos metemos de lleno con Powershell, lo mejor es usar el entorno que trae el propio Windows, Powershell ISE.

Herramienta VbsEdit

Colorea la sintaxis y puedes ir paso a paso depurando el contenido de las variables. Se puede ejecutar por bloques si lo prefieres, seleccionas la zona de código que quieres ejecutar, botón derecho y ejecutar selección.

Entorno Powershell ISE

O simplemente F5 para ejecutar el script. Veamos otro ejemplo.

F5 para la ejecución del programa

Otro script en 1 línea. Aprovechamos el plugin JSFormat que hemos visto de Notepad++, nos sirve aquí.

Plugin JSFormat

Queremos decodificar esa cadena en base64:

Cadena en base64

Ahora el contenido está en $dec. Pero no lo vemos, para ello añadimos una línea al script.

Cambio a DEC

Podemos hacer lo mismo que hemos estado viendo a lo largo del artículo, crear ficheros más pequeños con lo que queremos analizar.

Creación de ficheros mas pequeños

El resultado es el mismo como podéis observar.

Veamos qué aspecto tiene un fichero hta. Se trata de un código destinado a ser ejecutado con un navegador antiguamente, Internet Explorer, hasta que se dieron cuenta que esto tenía mucho peligroso y cambiaron esa opción por mshta.exe. No quiere decir esto que Internet Explorer no sea capaz de abrir el fichero, lo es y además avisa que no es poco.

fichero hta

Este es su código, abre una calculadora. El código es Visual Basic Script.

Calculadora Visual Basic Script

Por lo que se analizaría de la misma forma que hemos visto anteriormente, lo vemos con un ejemplo. Nos quedamos con la parte que está dentro de los tags del script.

Parte interna dentro de los TAGs del Scripts

Realizamos un simple cambio, execute por la función que haría que nos mostrara el código.

Cambio de execute por la visibilidad del codigo

De nuevo, hacemos uso de Cyberchef para conocer qué será ejecutado con Powershell y aquí lo tenemos.

Volvemos a hacer uso del Cyberchef para el análisis

Para finalizar con el post, los ficheros bat, que no son otra cosa que scripts que ejecutan comandos.

Ejecución de fichero .bat

Normalmente los vais a ver que inicial el script con @echo off, para que no haya eco en el comando y se vea más de la cuenta (por defecto activo), ya que estos ficheros son ejecutados por cmd.exe y ésta es una característica disponible en la shell.

Ejecución de @echo_off

Se definen unas variables al principio y serán utilizadas en la siguiente línea.

Definicion inicial de variables

Quedando el comando final de la siguiente manera.

Ejecución del comando final

Fijaros en esto, lo veréis muchas veces.

Malware calculadora de Windows

La última línea ejecutaría la calculadora, la anterior la he puesto para mostrar su significado. El carácter ^ se utiliza para evitar que reglas yara o búsquedas de cadenas por Antivirus no coincidan.

Si se quiere detectar powershell y se pone de esta forma po^we^rs^he^ll ya no sería encontrada y desde el cmd, no tiene ningún efecto.

Ofuscar powershell , poniendo po^we^rs^he^ll

Espero que este repaso a análisis de ficheros de scripting os sea útil y si echáis de menos alguna herramienta, lo siento, yo suelo usar muchas más, pero he tratado de mostraros las más comunes.

Como resumen, se puede ir analizando poco a poco, por trozos de código, guardándolos en ficheros y mostrando la salida por consola y como alternativa, utilizad las herramientas disponibles (muchas de ellas vienen de serie en el Sistema Operativo) que no son pocas.

Espero que os haya gustado.

¡¡Nos vemos en el próximo post!!