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…
Desde 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.
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, [ 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.