Análisis de malware

Analizar y escribir un exploit local

junio 18, por Nikhil Kumar

Hasta ahora, en los artículos anteriores aprendimos cómo explotar una aplicación de forma remota. Ejecutamos el script Python directamente en la Máquina B, que era la máquina atacante, y el script envió el valor de datos de entrada largo en la aplicación. Como resultado, la aplicación falló. Al final, desarrollamos un exploit funcional que podía enviar un código de exploit de forma remota. En este artículo, analizaremos y desarrollaremos un exploit local en el que no enviamos nada de forma remota. Antes de continuar, permítanme explicarles los tipos de exploits. En términos técnicos, el exploit se divide en dos tipos.

Explotación remota

¡Conviértete en un ingeniero inverso certificado!

Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender

Un exploit remoto funciona a través de una red y explota la vulnerabilidad de seguridad sin ningún acceso previo al sistema vulnerable. En artículos anteriores hemos visto las técnicas de explotación remota.

Explotación local

Un exploit local necesita acceso previo al sistema vulnerable y normalmente implica aumentar los privilegios de la cuenta de usuario que ejecuta el exploit. Los exploits locales necesitan algo de ingeniería social para tener éxito.

Entonces, en este artículo analizaremos y desarrollaremos un exploit local. Usaremos software de reproducción de DVD e intentaremos escribir un exploit para eso.

Nota: En este artículo, no desarrollaremos ningún exploit de día 0 para el software, pero tomaremos software vulnerable que está disponible en exploit DB e intentaremos desarrollar nuestro propio exploit para él.

[descargar]

Configuración de laboratorio

Primero, configuremos el laboratorio para escribir el exploit. La configuración del laboratorio es la misma que hemos utilizado en los artículos anteriores. Tenemos dos máquinas Windows XP Server Pack 3, en las que ejecutaremos el software vulnerable, y tenemos otra máquina virtual en la que ejecutaremos el sistema operativo Kali Linux. Esta máquina se utilizará como máquina atacante. Otros puntos notables siguen por lo mismo.

En primer lugar, instalaremos el reproductor Blaze DVD Professional en la máquina A. Puede descargar la aplicación haciendo clic en la URL que al final del artículo. Después de instalar la aplicación, ejecute el reproductor profesional Blaze DVD haciendo clic en el acceso directo del escritorio.

Una vez abrimos el reproductor de DVD Blaze, el software nos daría tres opciones: Prueba, Comprar ahora y Registrarse. Ahora, después de hacer clic en Prueba podremos ver la siguiente pantalla.

Imagen: 1

Como se puede ver en la captura de pantalla anterior, el reproductor de DVD Blaze funciona perfectamente en la máquina con Windows XP, que es la Máquina A.

Después del conocimiento adquirido en los artículos anteriores, los siguientes son los pasos para escribir un exploit.

En este artículo, veremos dos pasos iniciales en detalle. Al final del próximo artículo podremos desarrollar un exploit que funcione para Windows XP Service Pack 3.

Ahora, avancemos hacia el primer paso.

Primero, tenemos que verificar la vulnerabilidad de desbordamiento del búfer en el software. Entonces, creemos un archivo con extensión PLF e ingresemos 1000 A en él. PLF es la extensión del archivo de lista de reproducción del software del reproductor de DVD. Ahora, escribamos el script Python en la máquina B que generará el archivo exploit.plf; más adelante usaremos este script para generar también el código shell.

Imagen: 2

Como podemos ver arriba, hemos escrito un script Python simple que genera un archivo exploit.plf con 1000 A. Después de ejecutar el script, podemos ver que el archivo exploit.plf se ha creado en la misma carpeta.

Imagen: 3

Como estamos trabajando en el exploit local, tendremos que compartir el archivo exploit.plf con la Máquina A. Hay muchas formas de compartir los archivos con la máquina virtual. En nuestro escenario, hemos compartido la carpeta de la Máquina A con la Máquina B.

Ahora, copie el archivo exploit.plf en la carpeta compartida para que esté disponible en la Máquina A en la que está instalado el software del reproductor de DVD Blaze.

Imagen: 4

Se puede ver en la captura de pantalla anterior que hemos copiado el archivo generado por el script Python en la carpeta compartida de la Máquina B y lo mismo es visible en la Máquina A. Ahora, abrimos el software del reproductor de DVD Blaze y abrimos este archivo de lista de reproducción con el reproductor de DVD. Una vez que abrimos el archivo exploit.plf con el reproductor de DVD, vemos que el software del reproductor de DVD acaba de cerrarse. No muestra ningún error en pantalla como hemos visto en los artículos anteriores. Entonces, para un análisis profundo, abramos el software del reproductor de DVD Blaze con el depurador y ahora abramos el archivo exploit.plf con el reproductor de DVD Blaze.

Imagen: 5

Como se puede ver en la captura de pantalla anterior, cuando ejecutamos el software del reproductor de DVD con el depurador y abrimos el archivo de lista de reproducción en el reproductor de DVD, el software falla. Pudimos ver que EIP se sobrescribe exitosamente con 41414141, que es nuestra A en hexadecimal. Esto muestra que el software es vulnerable al desbordamiento del búfer, ahora pasemos al siguiente paso.

Ahora, tenemos que identificar la posición exacta en la entrada del usuario donde se sobrescribe el EIP en la memoria. Para identificar el mismo tendremos que generar el patrón como hicimos en los artículos anteriores. Entonces, generemos el patrón ejecutando el siguiente comando en la Máquina B.

/usr/share/metasploit-framework/tools/pattern_create.rb 1000 /root/Desktop/pattern.plf

Este comando generará un patrón de 1000 caracteres y guardará este patrón en el escritorio en el archivo patrón.plf.

Imagen: 6

En la captura de pantalla anterior, podemos ver que después de ejecutar el comando en la terminal, se crea un archivo Pattern.plf en el escritorio de la máquina B. Después de esto, copiamos este archivo en la carpeta compartida para que esté disponible en la Máquina A.

Ahora, reiniciaremos el software del reproductor de DVD Blaze en el depurador. Podemos hacer esto presionando CTRL+F2 en el depurador. Abramos el archivo Pattern.plf en el reproductor de DVD Blaze.

Imagen: 7

En la captura de pantalla anterior, podemos ver que el software del reproductor de DVD Blaze volvió a fallar. Esta es una buena noticia para nosotros. Pero esta vez EIP y Top of Stack se sobrescriben con un valor diferente. Anotemos las direcciones y sus valores por separado.

Registro

Valor

Registro EIP

37694136

Parte superior de la pila

6A41336A

Ahora, ejecutaremos el siguiente comando en la Máquina B para obtener la posición exacta sobrescrita en el búfer. Los siguientes son los comandos para el mismo:

/usr/share/metasploit-framework/tools/pattern_offset.rb 37694136

/usr/share/metasploit-framework/tools/pattern_offset.rb 6a41336a

Imagen: 8

Como se puede ver en la captura de pantalla anterior, cuando damos el valor EIP con el comando, obtenemos el valor 260 y cuando ejecutamos el mismo comando con el valor Top of Stack, obtenemos la coincidencia exacta en 280. Agreguemos el script salida en la tabla anterior. Después de hacer los cambios se verá la tabla.

Registro

Valor

Posición de coincidencia exacta

Registro EIP

37694136

260

Parte superior de la pila

6A41336A

280

Ahora, tenemos la posición exacta en la entrada del usuario donde el registro EIP se sobrescribió en la memoria. Verifiquemos lo mismo haciendo algunos cambios en la secuencia de comandos Python en la Máquina B. Entonces, creemos el archivo exploit.plf nuevamente y hagamos los siguientes cambios en la secuencia de comandos Python.

Más adelante, las B serían reemplazadas por alguna dirección de memoria que cambiaría el control de ejecución del programa y señalaría el código de shell y las C serían reemplazadas por el código de shell.

Después de realizar los cambios, el script de Python se parecerá al de la siguiente pantalla.

Imagen: 9

Como se puede ver en la captura de pantalla anterior, hemos realizado los cambios necesarios en el script de Python. Ahora, ejecutaremos el script Python en la Máquina B. Cuando ejecutemos el script, sobrescribirá el archivo exploit.plf anterior y creará el archivo con los cambios. Ahora copiaremos el nuevo archivo en la carpeta compartida para que esté disponible en la Máquina A.

Imagen: 10

Se puede ver en la captura de pantalla anterior que hemos copiado el archivo exploit.pdf en la carpeta compartida de la Máquina B. Ahora, se puede acceder a este archivo en la Máquina A. Abramos el archivo exploit.pdf en el bloc de notas de la Máquina. A para verificar los cambios.

Imagen: 11

Podemos ver en la captura de pantalla anterior que el archivo exploit.plf tiene A, B y C exactamente como lo hemos indicado en el script de Python.

Ahora, reiniciaremos el software del reproductor de DVD Blaze en el depurador y abriremos el archivo exploit.plf nuevamente.

Imagen: 12

Podemos ver en la captura de pantalla anterior que EIP se sobrescribe con 42424242, que es B en hexadecimal, y Top of Stack contiene 43434343, que es C en hexadecimal. Esto confirma que hemos identificado con éxito la posición sobrescrita de la pila.

Hasta ahora hemos verificado la vulnerabilidad de desbordamiento del búfer e identificado la posición sobrescrita de la pila. Ahora, el siguiente paso es identificar los personajes malos, lo cual continuaremos en el próximo artículo.

¡Conviértete en un ingeniero inverso certificado!

Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender

Conclusión