INICIO Category Blog Fallo criptográfico en debian y derivados
Fallo criptográfico en debian y derivados PDF Imprimir Correo electrónico
16 de Mayo de 2008

En septiembre de 2006 alguien en Debian decidió suprimir una línea de código molesta en el fichero md_rand.c de OpenSSL:

	MD_Update(&m,buf,j);
[ .. ]
MD_Update(&m,buf,j); /* purify complains */

La decisión se tomó para suprimir los avisos sobre datos no inicializados que lanzaban herramientas de depuración de código como Valgrind y Purify.

La medida fue efectiva; desde luego desaparecieron los errores, pero -y aquí viene el problema- también desapareció la correcta siembra del generador pseudoaleatorio necesaria para producir claves de calidad, es decir, claves no predecibles. La siembra correcta requería hasta ese momento una mezcla de datos aleatorios, pero quedó de pronto reducida a la escasa aleatoriedad aportada por el identificador del proceso, que en Linux sólo puede llegar hasta el número 32.768. En consecuencia el espacio de claves se vio repentinamente reducido, de los previstos 2^1024 a 2^15, es decir, tan sólo 32.768 posibles claves...

En definitiva, esta chapuza afecta a muchos sistemas Debian y derivados como Ubuntu. Por supuesto la actualización de OpenSSL (que ya está disponible) es necesaria, pero no suficiente. En esta ocasión han de generarse además claves nuevas para todos aquellos casos en que hayamos utilizado OpenSSL, es decir, redes privadas virtuales, servidores seguros, certificados X.509, SSH, etc. En el caso de usuarios comunes, no obstante, el problema más frecuente puede radicar en tener que renovar las claves SSH utilizadas para acceder remotamente a servidores.

Moraleja: Si funciona, no lo toques. Si lo tocas, házlo bien.

 

Actualización (18:32): Parece que afortunadamente se despeja un poco otro aspecto muy preocupante del problema: ¿Qué hubiera ocurrido ahora si las principales autoridades de certificación hubieran expedido sus miles de certificados desde Debian-OpenSSL?

Actualización (18:25): Sin piedad. Visto en Metasploit.com:

 

Traducción: "Aquí tenemos nuestro generador de números aleatorios. Nueve, nueve, nueve, nueve, nueve, nueve, nueve, nueve. ¿Seguro que eso es aleatorio? Ése es el problema de la aleatoriedad; nunca puedes estar seguro."

 

Traducción: "Elegido tras una tirada limpia de dados. Aleatoriedad garantizada."

Actualización (17:43): Otros dos enlaces muy interesantes para entender mejor lo que ha ocurrido: el blog de Luciano Bello (descubridor del fallo) y Vitavonni (aclara por qué el borrado resultó catastrófico y carga bastante las tintas sobre OpenSSL).

Actualización (17:32): No os perdáis este esclarecedor post. Kurt Roeckx (presunto responsable en Debian de la supresión de código que ha generado la catástrofe) pregunta cuatro meses antes a los desarrolladores de OpenSSL qué ocurriría si suprimiese esas líneas, al tiempo que expresa su preocupación con respecto a una posible pérdida de aleatoriedad. El menda de OpenSSL le responde: "No creo que afecte mucho. Si ayuda a la depuración soy partidario de borrarlas".

Actualización (11:57): Peor todavía. Publican un exploit que realiza un ataque de fuerza bruta sobre las claves debilitadas y logra el login en SSH en sólo unos minutos. La parte buena es que también podemos utilizarlo para comprobar si nuestras claves y/o certificados son vulnerables. Y lo serán con toda probabilidad si fueron generadas(os) en Debian, Ubuntu o similar entre septiembre de 2006 y ayer mismo.

  1. Actualizar a una de las versiones reparadas de openssl:
    • 0.9.8c-4etch3 (etch)
    • 0.9.8g-9 (lenny, sid)
  2. Las claves del servidor serán inmediatamente regeneradas tras aplicar la actualización, pero cuando un cliente trate de conectarse verá un mensaje de aviso mientras no se cambie la clave del host en el fichero .ssh/known_hosts del cliente:
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that the RSA host key has just been changed.
    The fingerprint for the RSA key sent by the remote host is
    xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
    Please contact your system administrator.
    Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
    Offending key in /home/user/.ssh/known_hosts:3
    RSA host key for server has changed and you have requested strict checking.
    Host key verification failed.

  3. Se deben regenerar además todas claves de usuarios. Esto ha de hacerse manualmente con ssh-keygen:
    sudo ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
    sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
  4. Actualizar por último el fichero .ssh/authorized_keys borrando las claves comprometidas.

 

Referencias:

Fuente: kriptópolis
Ultima actualización ( 16 de Mayo de 2008 )