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á.
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.
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).
Después de pulsar en las opciones, esto ya es otra cosa.
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?
Reemplazamos:
Y nos quedan un montón de cadenas, que si hubiesen estado tal cual, serían detectadas por casi todos los 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.
Reemplazamos y quedaría:
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.
Tenemos varias opciones, pero lo más rápido es utilizar Cyberchef.
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:
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.
Lo abrimos y vamos quitando lo que nos sobra. Podemos ir poco a poco sacando el valor de las variables.
Extraemos el código que necesitamos conocer su resultado y lo vamos ejecutando poco a poco.
Y una vez finalizado componemos como quedaría el 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.
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.
O simplemente F5 para ejecutar el script. Veamos otro ejemplo.
Otro script en 1 línea. Aprovechamos el plugin JSFormat que hemos visto de Notepad++, nos sirve aquí.
Queremos decodificar esa cadena en base64:
Ahora el contenido está en $dec. Pero no lo vemos, para ello añadimos una línea al script.
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.
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.
Este es su código, abre una calculadora. El código es 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.
Realizamos un simple cambio, execute por la función que haría que nos mostrara el código.
De nuevo, hacemos uso de Cyberchef para conocer qué será ejecutado con Powershell y aquí lo tenemos.
Para finalizar con el post, los ficheros bat, que no son otra cosa que scripts que ejecutan comandos.
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.
Se definen unas variables al principio y serán utilizadas en la siguiente línea.
Quedando el comando final de la siguiente manera.
Fijaros en esto, lo veréis muchas veces.
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.
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!!