Buenas a todos, en el post de hoy me
gustaría hablaros sobre la exposición de numerosos sistemas de
"cifrado" de contraseñas que utilizan infinidad de servicios web de
Internet.
Por gracia o por desgracia (dependiendo de si nos toca auditar.... o proteger :P), md5
sigue siendo un estándar utilizado a la hora de hashear contraseñas
para almacenarlas en base de datos, a pesar de que md5 lleva roto dos
décadas... Fue desarrollado en 1991 como reemplazo de md4 después de que
Hans Dobbertin
descubriese su debilidad, pero solo tuvo la oportunidad de ser
considerado 100% seguro durante 5 años, hasta que en 1996 el mismo Hans
Dobbertin anunciase una colisión de hash. Hoy en día, mediante rainbow
tables y fuerza bruta es posible romper md5 en un tiempo aceptable (en
comparación con otros algoritmos como SHA1 o SHA256).
Si queréis saber más sobre md5 os recomiendo este genial libro de Manuel J. Lucena,
del que soy muy fan desde que me ayudó a aprobar criptografía en la
facultad y a dominar numerosos algoritmos criptográficos :)
Volviendo al origen del post, vamos a
buscar algunas exposiciones de distintos sitios web encargados de la
generación y/o el almacenamiento de contraseñas bajo md5.
Con una búsqueda tan simple como la anterior en Google, podremos
encontrar más de 3.500 scripts SQL en los que aparecen sentencias
"select", con las palabras md5 y password o pass. Dentro de todos ellos
encontraremos desde procedimientos almacenados y funciones, hasta
triggers, sentencias de inserción.... cada script es un mundo.
Si escogemos algunos al azar podemos ver que muchos programadores han
decidido realizar la lógica de generación de hashes en el propio código
SQL, en lugar de en el código del servidor web, como por ejemplo PHP. No
es una práctica que aminore la seguridad, en absoluto, siempre y cuando
dichos scripts no acaben en Internet...
Así que consejo número uno, cuidado de donde almacenáis las
contraseñas y
cómo las almacenáis. Consejo número dos, revisad los permisos de los
archivos y carpetas de vuestros servidores, para impedir que ciertos
archivos acaben en Internet y si es posible, limitad también que se
puedan exponer archivos con ciertas extensiones críticas, como por
ejemplo "sql". Y por supuesto, ¡comenzad a olvidar md5, en favor de
otros algoritmos más robustos como SHA256!