Mi mayor aporte a la seguridad informática
Escribo este artículo con orgullo y preocupación. Orgullo por el impacto que logró mi trabajo y preocupación porque, bueno ya van a ver porque.
El año 2005 escribí un artículo en codeproject donde mostré un esquema práctico que explotaba una de las vulnerabilidades encontradas en ese tiempo al algoritmo MD5. El artículo alcanzó notoriedad al ser destacado en Slashdot, y en Kriptópolis.
Mi artículo original está en inglés y hay un (muy breve) resumen en este mismo blog.
La verdad es que no me preocupé much más del tema, y no estaba enterado de los derroteros que siguió esta prueba de concepto, pero haciendo una investigación reciente encontré el trabajo de Peter Selinger, profesor e investigador de la Universidad de Dalhouse en Canada que extendió mi esquema aprovechando el resultado de Patrich Stach, que permite aprovechar los posteriores descubrimientos sobre las fallas de este algoritmo.
Otra sorpresa es que este trabajo ha sido mencionado como una herramienta anti forense en círculos de hackers éticos.
¿De que se trata todo esto, y que implicancias tiene?
Les voy a dar un ejemplo.
Cuando ustedes van a un sitio donde se encuentran las imágenes de disco de Ubuntu encontrarán un archivo llamado MD5SUMS que en el caso de Ubuntu 7.10 contiene lo siguiente:
ebf7ad055bc39634065daa10de980d7e *ubuntu-7.10-alternate-amd64.iso 9a4ae3cfd68911a861d094ec834c9b48 *ubuntu-7.10-alternate-i386.iso
61c87943a92bc7bf519da4e2555d6e86 *ubuntu-7.10-desktop-amd64.iso
d2334dbba7313e9abc8c7c072d2af09c *ubuntu-7.10-desktop-i386.iso
43ff753b260729b12c7d21d3a6db8c73 *ubuntu-7.10-server-amd64.iso
7d88cd87df509a740d9f47b9bbf1375e *ubuntu-7.10-server-i386.iso
5308a79f5e652edba5be84644ee14b09 *ubuntu-7.10-server-sparc.iso
La serie de numeros y letras a la izquierda de cada nombre nos indica el valor resultante al aplicar el algoritmo MD5 al archivo de la derecha.
En este caso, para la imagen del CD ubuntu-7.10-desktop-i386.iso el valor MD5 es d2334dbba7313e9abc8c7c072d2af09c.
Para validar de que nuestra imagen es la correcta, lo más seguro es aplicar un cálculo del hash MD5 en el archivo descargado y comprobar que coincida con lo informado en el sitio oficial de Ubuntu. Si estos valores coinciden sabemos que el disco no ha sido saboteado ni alterado por nadie.
Esto impide que un hacker malicioso pueda infectar Ubuntu con un virus o un trojano, ya que el hacker tendría que crear una imagen iso similar, reemplazarla en el servidor y asegurarse de que que el valor MD5 de su archivo coincida con lo informado por Ubuntu.
Hasta ahora eso parecía imposible, pero como demostré en el 2005 es muy sencillo escribir un programa extractor que burlara este mecanismo de verificación, aprovechando los fallos al algoritmo MD5 (descubiertos en ese tiempo por Xiaoyun Wang and Hongbo Yu de la Universidad de Shandong en China).
El problema con mi esquema es que requiere la distribución del programa extractor, pero la prueba de concepto de Selinger elimina esta traba.
Selinger es capaz de crear un programa “auto extractor”, con lo que deja inutilzable la “firma MD5” como medio de validación de la integridad de los archivos.
Si pensamos en los archivos ISO con que se distribuyen las imagenes vivas de Ubuntu, y otros sistema operativos, estos archivos son “auto ejecutables”, y por lo tanto aplica el esquema propuesto por Selinger.
La puerta está abierta para distribuir troyanos infectando cualquier distribución de linux que use MD5 como único mecanismo de validación1.
No es dificil imaginar una extensión al programa de Salinger para genera imagenes ISO maliciosas de muchos sistema operativos distribuidos de esta manera.
Por supuesto esta prueba de concepto también inhabilita el uso de MD5 como base para construir MAC (Message Autentication Code) en registros, transacciones o documentos digitales.
En este caso es más sencillo romper este mecanismo de control, porque los MACs siempre son ejecutados por programas externos, y para esto basta usar un esquema como el que describí en mi artículo original.
Han pasado 2 años de que sabemos estas cosas y aún me encuentro con implementaciones en que usan MD5 como un mecanismo de autenticar transacciones.2
Pero lo peor, es que todavía me topo con sistemas que proclaman su alto nivel de seguridad porque las claves de sus usuarios son almacenadas en MD5, algo no recomendado antes del 2005, y que aún sigue usándose.
¿Entienden ahora por qué aparte de orgullo siento preocupación?
-
Insisto en lo de único mecanismo de verificación, porque en muchos casos se usan otras códigos de autenticación adicionales o complementarios, como firmas PGP o dos valores de hash, uno MD5 y otro SHA-1 por ejemplo. ↩︎
-
Lamentablemente muchos usuarios no saben o no se preocupan de verificar la integridad de las imágenes de los archivos descargados, así que muchas veces los hackers no necesitan algo tan complicado para vulnerar la distribución de sofware. ↩︎