Generador de Números Pseudo-Aleatorios Predecible en Debian El Qué y El Cómo Luciano Bello1,2 Maximiliano Bertacchini2 luciano at debian.org mbertacchini at citefa.gov.ar 1 Debian Project 2 Si6 Labs - CITEFA (Instituto de Investigaciones Cientı́ficas y Técnicas para la Defensa, Argentina) EKOPARTY 2008 Buenos Aires, Argentina 2 y 3 de Octubre de 2008 Introducción 1 I NTRODUCCI ÓN 2 L AS C R ÓNICAS DE D EBIAN O PEN SSL 3 A N ÁLISIS DE O PEN SSL 4 E XPLOTACI ÓN 5 R EPERCUSIONES 6 C ONCLUSIONES (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 2 / 37 Introducción I NTRODUCCI ÓN A DSA-1571 H T T P :// W W W . D E B I A N . O R G / S E C U R I T Y /2008/ D S A -1571 El generador de números pseudoaleatorios (PRNG) del paquete OpenSSL de Debian ha sido predecible por 2 años Causado por un parche especı́fico de Debian En consecuencia, se puede deducir material clave criptográfico Afecta a otros paquetes enlazados con libssl Afecta a otros sistemas operativos basados en Debian Otros sistemas se ven afectados si contienen claves débiles importadas (incluso las públicas) La primera versión vulnerable es 0.9.8c-1 (publicada el 17/09/2006). Incluı́da en la versión estable actual (Etch) El advisory y el parche fueron publicados el 13/05/2008 ¡No afecta a las claves generadas por GnuPG o GNUTLS! (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 3 / 37 Introducción E N OTRAS PALABRAS En consecuencia, el espacio de claves de un criptosistema depende de: PID MAX (tı́picamente 215 ) La arquitectura / endianness del equipo Estado del generador (bytes pedidos anteriormente, etc.) Todo el material criptográfico es débil (predecible por ataque de fuerza bruta en un espacio de 215 ): Autenticación de cliente / servidor Firmas DSA Key agreement Claves de sesión Datos públicos aleatorios (Salt, IV) Passwords/passphrases automáticas (OTP, generadas por pwsafe, etc) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 4 / 37 Introducción PAQUETES A FECTADOS (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 5 / 37 Las Crónicas de Debian OpenSSL 1 I NTRODUCCI ÓN 2 L AS C R ÓNICAS DE D EBIAN O PEN SSL 3 A N ÁLISIS DE O PEN SSL 4 E XPLOTACI ÓN 5 R EPERCUSIONES 6 C ONCLUSIONES (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 6 / 37 Las Crónicas de Debian OpenSSL U N M AL C OMIENZO “U NA SERIE DE HECHOS DESAFORTUNADOS ” Richard Kettlewell registra el bug “Valgrind-Clean the RNG” el 19/04/2006 15:18:15 UTC (http://bugs.debian.org/363516) Kurt (Debian OpenSSL maintainer) identificó dos lı́neas “problemáticas” (http://bugs.debian.org/363516#10) “What it’s doing is adding uninitialised numbers to the pool to create random numbers. I’ve been thinking about commenting those out.” C R Y P T O/R A N D/M D R A N D.C 274: MD_Update(&m,buf,j); 467: #ifndef PURIFY MD_Update(&m,buf,j); /* purify complains */ #endif (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 7 / 37 Las Crónicas de Debian OpenSSL L AS “S OLUCIONES ” P ROPUESTAS 1 Marcar como “wontfix” 2 Usar el mecanismo de Valgrind para que lo ignore Produce gran cantidad de advertencias en Valgrind Es una solución especı́fica para Valgrind Cambia el binario en forma extraña 3 No agregar el buffer al pool La entropı́a extra es despreciable Preguntemos en openssl-dev (http://www.mail-archive.com/openssl-dev@openssl.org/msg21156.html) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 8 / 37 Las Crónicas de Debian OpenSSL E L M ALENTENDIDO (http://www.mail-archive.com/openssl-dev@openssl.org/msg21156.html) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 9 / 37 Las Crónicas de Debian OpenSSL E L M ALENTENDIDO (http://www.mail-archive.com/openssl-dev@openssl.org/msg21157.html) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 10 / 37 Las Crónicas de Debian OpenSSL E L FAMOSO PARCHE (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 11 / 37 Análisis de OpenSSL 1 I NTRODUCCI ÓN 2 L AS C R ÓNICAS DE D EBIAN O PEN SSL 3 A N ÁLISIS DE O PEN SSL 4 E XPLOTACI ÓN 5 R EPERCUSIONES 6 C ONCLUSIONES (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 12 / 37 Análisis de OpenSSL E L PRNG DE O PEN SSL (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 13 / 37 Análisis de OpenSSL E L PRNG DE O PEN SSL (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 13 / 37 Análisis de OpenSSL E L PRNG DE O PEN SSL (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 13 / 37 Análisis de OpenSSL E JEMPLO E XAMPLE (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 14 / 37 Explotación Autenticación 1 I NTRODUCCI ÓN 2 L AS C R ÓNICAS DE D EBIAN O PEN SSL 3 A N ÁLISIS DE O PEN SSL 4 E XPLOTACI ÓN Autenticación Man in the middle DH DSA Summary 5 R EPERCUSIONES 6 C ONCLUSIONES (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 15 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 16 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 16 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 16 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 16 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 16 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 16 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 16 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 16 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO ATAQUE POR FUERZA BRUTA (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 17 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO ATAQUE POR FUERZA BRUTA (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 17 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO ATAQUE POR FUERZA BRUTA (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 17 / 37 Explotación Autenticación AUTENTICACI ÓN POR DESAF ÍO ATAQUE POR FUERZA BRUTA (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 17 / 37 Explotación Man in the middle 1 I NTRODUCCI ÓN 2 L AS C R ÓNICAS DE D EBIAN O PEN SSL 3 A N ÁLISIS DE O PEN SSL 4 E XPLOTACI ÓN Autenticación Man in the middle DH DSA Summary 5 R EPERCUSIONES 6 C ONCLUSIONES (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 18 / 37 Explotación Man in the middle AUTENTICACI ÓN POR CERTIFICADOS ATAQUE A LOS CERTIFICADOS (M IT M) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 19 / 37 Explotación Man in the middle AUTENTICACI ÓN POR CERTIFICADOS ATAQUE A LOS CERTIFICADOS (M IT M) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 19 / 37 Explotación Man in the middle AUTENTICACI ÓN POR CERTIFICADOS ATAQUE A LOS CERTIFICADOS (M IT M) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 19 / 37 Explotación Man in the middle AUTENTICACI ÓN POR CERTIFICADOS ATAQUE A LOS CERTIFICADOS (M IT M) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 19 / 37 Explotación Man in the middle AUTENTICACI ÓN POR CERTIFICADOS ATAQUE A LOS CERTIFICADOS (M IT M) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 19 / 37 Explotación Man in the middle AUTENTICACI ÓN POR CERTIFICADOS ATAQUE A LOS CERTIFICADOS (M IT M) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 19 / 37 Explotación Man in the middle AUTENTICACI ÓN POR CERTIFICADOS ATAQUE A LOS CERTIFICADOS (M IT M) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 19 / 37 Explotación Man in the middle AUTENTICACI ÓN POR CERTIFICADOS ATAQUE A LOS CERTIFICADOS (M IT M) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 19 / 37 Explotación DH 1 I NTRODUCCI ÓN 2 L AS C R ÓNICAS DE D EBIAN O PEN SSL 3 A N ÁLISIS DE O PEN SSL 4 E XPLOTACI ÓN Autenticación Man in the middle DH DSA Summary 5 R EPERCUSIONES 6 C ONCLUSIONES (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 20 / 37 Explotación DH ACUERDO DE L LAVE D IFFIE -H ELLMAN (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 21 / 37 Explotación DH ACUERDO DE L LAVE D IFFIE -H ELLMAN p, g, X s Xc Xs Xc g mod p = Ys g mod p = Yc Xs Xc K = Yc mod p (Debian, Si6-CITEFA) Ys mod p = K Debian OpenSSL ekoparty 2008 21 / 37 Explotación DH ACUERDO DE L LAVE D IFFIE -H ELLMAN ATAQUE POR FUERZA BRUTA (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 22 / 37 Explotación DH DEMO: W IRESHARK SSL D ISSECTOR Gracias Paolo Abeni (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 23 / 37 Explotación DSA 1 I NTRODUCCI ÓN 2 L AS C R ÓNICAS DE D EBIAN O PEN SSL 3 A N ÁLISIS DE O PEN SSL 4 E XPLOTACI ÓN Autenticación Man in the middle DH DSA Summary 5 R EPERCUSIONES 6 C ONCLUSIONES (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 24 / 37 Explotación DSA F IRMADO DSA Los datos públicos son: p, q, g, y = g x mod p Los datos privados son: x Para firmar un mensaje m: 1 2 Alicia genera un número al azar, k, menor a q. Alicia calcula: r = (g k mod p) mod q s = (k −1 (H(m) + xr )) mod q 3 Los parámetros r y s son la firma de Alicia para el mensaje m Oscar puede obtener x si tiene un espacio explorable de todos los k posibles: 1 Genera ri para cada ki hasta que ri = r 2 Con el ki encontrado calcula: (ski − H(m)r −1 ) mod q = x (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 25 / 37 Explotación Summary M ANUAL PARA LA CONQUISTA DEL U NIVERSO 1 2 3 4 Elegir una aplicación Seleccionar o averiguar el algoritmo que utiliza Generar el espacio de (215 − 1) × 3 claves A bruteforcear!: Autenticarte a un servidor utilizando llaves asimétricas (requiere que el servidor tenga algún usuario que se autentique vı́a passwordless y que alguna de esas llaves sea débil) Realizar un ataque MitM utilizando un certificado de servidor clonado (requiere un certificado débil y un escenario donde sea posible un MitM) Descifrar sesiones donde alguna de las partes sea un Debian vulnerable Atacar criptografı́a simétrica conexiones/storage/etc donde la clave esté generada al azar (requiere un sistema vulnerable en el momento de generación de dicha clave) Obtener la clave privada de un firmante DSA (requiere un mensaje firmado en un sistema vulnerable) 5 Muejeje!!! (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 26 / 37 Explotación Summary T RABAJOS RELACIONADOS H. D. Moore toys (http://metasploit.com/users/hdm/tools/debian-openssl/) Wireshark parche para atacar PFS en SSL/TLS (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=2725) SSH Snort plugin de Ben Feinstein (http://www.secureworks.com/research/tools) SSH tools de Yoann Guillot and Raphaël Rigo (http://www.cr0.org/progs/sshfun/) Firefox SSL Blacklist Add-on de Marton Anka (http://codefromthe70s.org/sslblacklist.asp) OpenID/Debian PRNG/DNS Cache poisoning advisory, 08-AUG-2008 (CVE-2008-3280) (http://www.securityfocus.com/archive/1/495258) Debian wiki. Qué hacer y cómo afecta a cada paquete (http://wiki.debian.org/SSLkeys) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 27 / 37 Explotación Summary C ONTRAMEDIDAS Actualizar libssl, openssl y openssh (¿Todavı́a no lo hiciste?) Buscar y regenerar todas las llaves débiles. Eliminiar todas las llaves blacklisteadas. Las blacklists pueden obtenerse en los paquetes openvpn-blacklist, openssh-blacklist and openssl-blacklist. Conciderar comprometidas todas las llaves DSA que hayan sido utilizadas en sistemas vulnerables Utilizar Firefox SSL-Blacklist add-on Utilizar la opción PermitBlacklistedKeys=no en el OpenSSH de Debian No hay nada que puedas hacer por el pasado, la leche ya está derramada (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 28 / 37 Repercusiones 1 I NTRODUCCI ÓN 2 L AS C R ÓNICAS DE D EBIAN O PEN SSL 3 A N ÁLISIS DE O PEN SSL 4 E XPLOTACI ÓN 5 R EPERCUSIONES 6 C ONCLUSIONES (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 29 / 37 Repercusiones C ERTIFICADOS A FECTADOS 30 de Mayo (2 semanas después del advisory). Gracias a Juergen Schmidt, Editor-in-Chief Heise Security [www.heisec.de] Extrapolando, ≈ 24.000 certificados débiles firmados por una CA confiable, sobre 809.000 sitios con certificados SSL válidos (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 30 / 37 Repercusiones OTRAS RAREZAS SOBRE CERTIFICADOS SSL Sólo alrededor del 20 % de los certificados débiles especifican una URI OCSP ≈ 90 % de los usuarios utilizan browsers que no chequean CRLs por defecto Hay unos 10 certificados EV vulnerables en la muestra tomada. Extrapolando, cerca de 120 certificados EV son débiles en el mundo? (según Netcraft, 0.5 % de los certificados son EV) La herramienta http://www.heise-online.co.uk/ networks/tools/chksslkey encontró certificados débiles en 4577 hosts únicos (la mayorı́a self-signed) a mediados de Julio Para mitigar el impacto se puede utilizar Firefox SSL Blacklist Add-on junto a “that 30-meg sister extension” www.codefromthe70s.org/files/sslblacklist-3.0.22.xpi www.codefromthe70s.org/files/sslblacklist-localdb-1.0.3.xpi Gracias a Juergen Schmidt, Editor-in-Chief heise Security (www.heisec.de) por la investigación, cifras y análisis (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 31 / 37 Repercusiones R EPERCURSIONES EN D EBIAN Este es mi (Luciano Bello) punto de vista. No necesariamente representa la opinión de otros desarrolladores de Debian o la del Proyecto Debian. Mucho de este trabajo está en progreso. Debian, sus usuarios y otras distribuciones se benefician muchı́simo de los custom patches Algunas veces upstream y Debian difieren en sus objetivos y sus estándares de calidad Algunas veces es difı́cil tener una buena comunicación con upstream La detección del problema no resulta taaaan obvia (estuvo 2 años sin ser descubierto) Es humanamente imposible auditar todo el código “Sólo aquellos que no hacen nada no cometen errores. El punto es tratar de evitar errores, no de encontrar la forma de culpar a alguien.” Alguien en la lista de correo debian-devel (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 32 / 37 Repercusiones R EPERCUSIONES EN D EBIAN Estamos trabajando en mejorar la visibilidad, mostrar parches, haciedo que la Ley de Linus ocurra: Publicar todas las fuentes en VCSs públicos Nuevo formato v3 de paquete de paquete Encabezados estándares en los parches para administrarlos automáticamente? patches.debian.org? Seguir las divergencias como bugs en el BTS? Después de todo, es un problema técnico, de polı́ticas o social? (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 33 / 37 Conclusiones 1 I NTRODUCCI ÓN 2 L AS C R ÓNICAS DE D EBIAN O PEN SSL 3 A N ÁLISIS DE O PEN SSL 4 E XPLOTACI ÓN 5 R EPERCUSIONES 6 C ONCLUSIONES (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 34 / 37 Conclusiones C ONCLUSIONES ( AKA . LECCIONES APRENDIDAS ) Mirar dos veces, parchear una. Parches simples pueden tener consecuencias profundas No escribir código fancy, especialmente cuando lo que aporta es mı́nimo El código seguro tiene que estar bien organizado ¡Comenta tu código como si otros (incluso tú) fueran a leerlo! Pregunta con detalles. “Más” es mejor que “sólo lo suficiente” Si muchas personas preguntan siempre lo mismo, tal vez se trate de algo que requiera atención Involúcrate en los parches de tu down/upstream: puede que obtengas mejoras “Dejar tu código en un FTP server” no es lo mismo que “compartir tu código” ¿Es el contraejemplo a la Ley de Linus? (o no... tal vez es que sencillamente *no* hay suficiente cantidad de ojos mirando) (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 35 / 37 Conclusiones AGRADECIMIENTOS Paolo Abeni <paolo.abeni at email.it> por su ayuda en la modificación a Wireshark Bodo Möller <bodo at openssl.org> por su ayuda para entender mejor el PRNG de OpenSSL Ignacio “Nacho” Marambio Catán <ignacio.marambio at gmail.com> en las etapas iniciales Florian Weimer <fw at deneb.enyo.de> por su atención y trabajo durante el anuncio del advisory Kragen Javier Sitaker <kragen at pobox.com> por la ayuda en el análisis del código y las correcciones de nuestro pobre inglés Juergen Schmidt, Editor-in-Chief heise Security (www.heisec.de) por las estadı́sticas (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 36 / 37 Conclusiones ¿P REGUNTAS ? ¡Gracias! Luciano Bello <luciano at debian.org> Maximiliano Bertacchini <mbertacchini at citefa.gov.ar> P OWERED BY LATEX+ BEAMER (Debian, Si6-CITEFA) Debian OpenSSL ekoparty 2008 37 / 37