Archivos Criptografía: Septiembre 2005
Un interesante comentario a mi artículo http://www.codeproject.com/useritems/HackingMd5.asp de parte de Erik Westermann {dispatches}
La siguiente es una traducción libre del comentario (el original se puede leer aquí: http://www.codeproject.com/useritems/HackingMd5.asp#xx1231841xx
Creo que la intención es demostrar un tipo muy específico de ataque que explota la inherente confianza en el hash MD5. Es una especie de ataque de ingenieria semi-social.1 Crypto-Gram Newsletter, May 15, 2000[^]El ataque mostrado en el artículo ilustra como el distribuidor-autor-etc puede distribuir una "buena" aplicación y luego empezar a distribuir una aplicación dañina explotanto la confianza dada al hash MD5 de la aplicación "buena". De todas maneras, este es un escenario muy específico, y usa vectores predefinidos; sin embargo ayuda a reforzar una verdad fundamentas sobre seguridad.
Bruce Schneier indica que la seguridad es un proceso, no un producto1. Este artículo demuestra un ataque específico que explota la visión de la seguridad basada en el producto..."Este archivo es seguro porque el hash MD5 que recién calcule coincide con el hash MD5 publicado (y bien conocido). El artículo resalta la importanca de establecer un proceso que asume que los producto tienen fallas y maneja la exposición a los ataque y trata en forma efectiva con las brechas.
No podría decirlo mejor, Erik Westermann ha resaltado mejor que yo el objetivo de este artículo, y de paso hemos reforzado una vieja lección, la seguridad es un proceso.
Agradezco la elogiosa mención en Kriptópolis, acerca de mi anterior post: Explotando las colisiones de MD5.
Pero me entero a través del mismo sitio que Microsoft ha decidido abandonar el uso de las funciones de hash bajo ataque, e incluso la función criptográfica DES, mas detalles aquí: http://www.kriptopolis.org/node/1126 y aquí: http://www.eweek.com/article2/0,1759,1859751,00.asp.
Me habrán leido en Redmond? :)
Como saben, escribí un par de artículos en CodeProject, el primero, Good Bye MD5, lleva menos de un mes y ya ha tenido cerca de 20.000 lecturas, incluso con un interesante debate.
Mi segundo artículo "Exploiting MD5 collisions" en que muestro como explotar el ataque a MD5 para perturbar los sistemas de distribución de software, lleva cerca de las 2000 lecturas en menos de 48 horas.
No es que me las quiera dar de genio, pero la verdad es que esto se sabe desde casi un año, y la base del ataque:
MD5(x)==MD5(y) => MD5(x+q) == MD5(y+q)
desde hace mucho más tiempo.
Las bases de datos, y el algoritmo de las tablas Rainbow se conoce desde el 2003.
Lo que pasa es que ahora, tenemos las bases para crear esquemas para romper la seguridad basada estos algoritmos.
De hecho el esquema que presenté, es un tanto burdo, pero el paper de Kaminsky , en que describe el script en perl stripwire, me lleva a pensar, que es posible construir un ejecutable auto extraible, con un MD5 confiable, pero con un comportamiento dañino.
Es cuestión de tiempo...
Piensen por ejemplo, que la distribución de los archivos .RPM RedHat usan MD5 checksum, que tal si un hacker quiebra el utilitario RPM.
O si uno coloca código malicioso en utilitarios como tar, o gzip, y con eso se deja vulnerable los MD5 de Apache, solo por mencionar algunas consecuencias.
De hecho el ejemplo de los 2 archivos postscript, es un ejemplo de un autoejecutable atacado con la colision de MD5.
Escribí un programa en C# para demostrar como se puede explotar las colisiones encontradas en MD5 para crear 2 archivos con el mismo valor de hash.
Esta imagen muestra la prueba de concepto:
Primero generamos 2 archivos binarios para distribuir, usando un programa inofensivo (good.exe), y otro programa peligroso (evil.exe).
El valor MD5 para ambos archivos es el mismo.
Posteriormente un programa extractor saca distintas versiones del programa, dependiendo del archivo de distribución que se le entrega.
En el primer caso vemos como se extrae del archivo good.bin el programa inofensivo, y se ejecuta sin problemas.
En el segundo caso, el usuario extrae del archivo evil.bin nuestro programa dañino, como el usuario está confiado de que el archivo no ha sido alterado, debido a que su hash MD5 es el correcto, ejecuta un programa, que en este caso puede hacer mucho daño, como formatear el disco.
Puedes bajar los fuentes de la prueba de concepto de este archivo:
Codigo Fuente para Visual Studio 2003.
Y la versión compilada desde acá:
Demo compilada
Este desarrollo se basó en los siguientes papers:
http://www.cits.rub.de/MD5Collisions/
http://www.doxpara.com/md5_someday.pdf
Un artículo mas detallado lo publiqué en CodeProject.

