Random IRC quote :      <gabriel> a mi no me hablas de tu ni en sueños

Shellcodes para Microsoft Office

A ver si vamos recuperando un poco el espíritu técnico del blog, que llevamos unos meses de capa caida eh!!

Voy a hablar un poco de cómo liarla parda con las vulnerabilidades en los documentos de Microsoft Office, doc, ppt, xls … para currar en Rusia o China te lo piden en todos lados, vamos eso me ha dicho un amigo… 8)

Lo primero de todo es destacar ciertas características de estos ficheros vistos desde la perspectiva del «atacante».

Los ficheros doc,ppt,xls (Office de ahora en adelante) campean libremente por emails, intranets,shares, etc, y pueden fácilmente atravesar cualquier perímetro sin levantar demasiadas sospechas. El fulano que recibe el documento tampoco sospechará debido al constante flujo de documentos que recibe, así que uno más no importa…

compoundDesde el punto de vista más técnico tenemos que:
* Estos ficheros permiten añadir al final de ellos bytes adicionales y el documento se podrá seguir abriendo sin problemas, no corrompiendose. Estos bytes también son mapeados en memoria.
* Estos bytes pueden estar cifrados para hacer invisible un ejecutable embebido a aquellas heurísticas que usen x-rays u otros métodos para buscar ejecutables dentro de estos documentos.
* De esta manera nos podemos saltar la limitación de embeber mediante un contenedor de un objeto binario el ejecutable que queremos dropear, ya que la estructura del documento vulnerable puede hacer imposible esta opción.Ademas los parsers de los antivirus suelen detectar estos contenedores.

Asi es que tenemos un documento vulnerable + bytes adicionales que pueden contener lo que nosotros queramos, un troyano o un video de pocoyo. Nos falta espacio para una shellcode. La shellcode la podemos camuflar dentro de los bytes de una imagen embebida en el documento, o al más puro estilo de los virus cavity en huecos que nos permita el propio Compound Document File Format. Esto también depende del tipo de vulnerabilidad que estemos explotando.

Bien, ahora asumamos que hemos explotado correctamente la vulnerabilidad y nuestra shellcode toma el control. Esta shellcode tiene que tener en cuenta ciertas peculiaridades:
*Nosotros hemos generado el documento vulnerable por lo tanto sabemos su tamaño exacto, donde está cada uno de los componentes embebidos que necesitamos, etc.Por lo tanto todos estos valores/offsets se pueden hardcodear en la shellcode.
*La victima espera verse abrir un documento, así que hay que darle lo que espera.

Tenemos a nuestra shellcode con el control, pero ¿cómo buscamos donde están los bytes correspondientes al video de pocoyo que queremos dropear? Fácil, sabemos cuanto ocupa nuestro documento vulnerable, pues lo que hacemos es bruteforcear los handles abiertos por el proceso ( Winword.exe, excel.exe…) comparando el tamaño de los ficheros a los que corresponden esos handles con el que hemos hardcodeado en nuestra shellcode. Haremos esto hasta dar con el que corresponde con nuestro documento.

BuscandoelHandle:
        add ebx,4
        cmp ebx,0x2000
        jge NoFile
        push 0x00000000
        push ebx
        call GetFileSize
        cmp eax, TAMAÑO_DOCUMENTO_HARDCODEADO
        jnz BuscandoelHandle
 

Tras esto sólo nos queda mapear el fichero en memoria usando CreateFileMapping y podremos acceder a todos los contenidos de éste. Descrifrar el video, dropearlo, ejecutarlo, borrarlo, restaurar el documento para evitar forensics etc…

Si recordamos lo que hemos hecho antes, el fulano que recibe el documento espera que cuando pinche en éste se abra con normalidad. Lo que haremos es obtener del PEB el path del ejecutable del Office que corresponda y hacer un CreateProcess de un documento que puede ser una copia «saneada» del vulnerable u otro que elijamos. Inmediatamente despues llamaremos a ExitProcess.

        mov eax, fs:0x30        /* PEB */
        mov eax, [ eax + 0x10] /* PROCESS_PARAMETERS */
        mov eax, [ eax + 0x3C ] /* UNICODE_STRING ImageName */
 

Y esto es básicamente el proceso para explotar en condiciones una vulnerabilidad en Office. Suerte ahí fuera.

8 Comentarios para “Shellcodes para Microsoft Office”

  1. Comment por Mario Ballano | 05/19/09 at 10:43 pm

    Muy bueno el post!, como comentas esto es un «must» para cualquier entrevista de trabajo en Rusia, China y demás… así que aplicaros el cuento! 😀

    Aquí os dejo un enlace a una shellcode de Office analizada con IDA que en su momento me encontré ITW:

    http://www.mnin.org/write/2006_w0rd.html

    P.S: y si… a ver si volvemos un poco a las andadas que estamos un poco paradiños 🙂

  2. Comment por Tora | 05/20/09 at 6:17 am

    Mola! ¿Para cuándo los cursillos de «aprenda ruso en sólo 48bits»?

  3. prk
    Comment por prk | 05/20/09 at 6:34 am

    Me gusta el concepto. Porque el concepto es el concepto eh?? Esa es la cuestión.

  4. Comment por Andres Tarasco | 05/21/09 at 12:32 pm

    Desde mi desconocimiento, me surge una duda..
    El añadir bytes extras al documento, sin estar mapeada esa región internamente, ¿no genera alertas por parte de motores av?

  5. Comment por ruben | 05/21/09 at 5:06 pm

    nop. Porque el antivirus tiene que parsear e interpretar inteligentemente el documento para descubrir el overlay.

  6. Comment por Miguel | 05/22/09 at 3:53 am

    /*++
    Buenos dias!

    Yo creo que los AV detectarian un fichero con esas caracteristicas en situaciones concretas.

    En un prodcuto de consumo seguramente solo se detectaria si el AV en cuestion tuviese un numero considerable de clientes afectados. Y seguramente solo lo detectarian con analisis bajo demanda, pero no con un residente de ficheros.

    En cambio, el mismo AV funcionando en un Appliance, o en su version de producto corporativo yo creo que si lo pillarian (O deberían).

    En todo caso, no creo que en este caso el problema de los AVs sea tecnologico.

    –*/

  7. Comment por Mario | 05/22/09 at 6:22 am

    Yo creo que Andres se refiere a si actualmente los antivirus usan heuristica en ficheros de office. Algunos lo hacen, aunque no se si tienen en cuenta cosas como esta, pero es comun buscar ejecutables embebidos en determinadas areas, por ejemplo.

    Un saludo,

  8. Comment por Miguel | 05/23/09 at 5:51 am

    /*++

    A eso me referia con el ejemplo de los appliances y los productos de seguridad corporativos. En Gateways, por ejemplo, dificilmente dejaran pasar un ZIP con contraseña. Y de la misma forma, tampoco pasara un fichero Office que tenga algo sospechoso. No se si en este caso concreto se podria detectar esa anomalia en el fichero de forma generica, y tampoco los AVs lo hacen o no. Pero lo que si creo es que en lineas generales en entornos mas restrictivos estas cosas tienden a detectarse.

    Un saludo!
    –*/

Se han cerrado los comentarios