Anlisis heart bleed

Click here to load reader

download Anlisis heart bleed

of 16

  • date post

    12-Jun-2015
  • Category

    Technology

  • view

    1.047
  • download

    2

Embed Size (px)

description

Este informe presenta los resultados obtenidos tras un proceso de investigación y análisis sobre la vulnerabilidad encontrada en la librería OpenSSL, descubierta por uno de los expertos en seguridad de Google y la compañía Codenomicon, que ha sido catalogada con el código CVE-2014-0160 y bautizada como Heartbleed, al estar vinculada con un error en la funcionalidad heartbeat de dicha libería. El objetivo del presente documento es recopilar toda la información disponible sobre la vulnerabilidad en el paquete de seguridad.

Transcript of Anlisis heart bleed

  • 1. Vulnerabilidad OpenSSL CVE 2014-0160 A missing bounds check in the handling of the TLS heartbeat extension can be used to reveal up to 64k of memory to a connected client or server ...

2. INTRODUCCINYOBJETIVOS Este informe presenta los resultados obtenidos tras un proceso de investigacin y anlisis sobre la vulnerabilidad encontrada en la librera OpenSSL, descubierta por uno de los expertos en seguridad de Google y la compaa Codenomicon, que ha sido catalogada con el cdigo CVE-2014-0160 y bautizada como Heartbleed, al estar vinculada con un error en la funcionalidad heartbeat de dicha libera. El objetivo del presente documento es recopilar toda la informacin disponible sobre la vulnerabilidad en el paquete de seguridad. RESUMENEJECUTIVO OpenSSL Consiste en un robusto paquete de herramientas de administracin y bibliotecas relacionadas con la criptografa, que suministran funciones criptogrficas a varios protocolos . La vulnerabilidad permitira a un atacante obtener 64Kb de memoria, que aunque pudiera parecer una cantidad mnima, podra comprometer informacin crtica del sistema afectado. Adems del foco sobre HTTPS/SSL, no debemos olvidarnos de que existen muchos otros protocolos que puedieran estar afectados por esta vulnerabilidad, como XMPP, SMTP / POP3 / IMAP, STARTTLS, SSL VPNs, VoIP etc. Lo realmente preocupante es la extensin que ha podido y puede tener esta vulnerabilidad, ya que OpenSSL es utilizado, entre otros muchos protocolos y servicios, por servidores web como Apache o nginx, que de forma conjunta abarcan el 66% de los sitios activos en Internet (de acuerdo con la Encuesta de Netcraft sobre Servidores Web para Abril de 2014): 3. VERSIONESDELOPENSSLVULNERABLES No todas las versiones de OpenSSL se han visto afectadas por la vunerabilidad, sino que slamente una parte de la rama 1.0.1, como: 1.0.1 1.0.1a 1.0.1b 1.0.1c 1.0.1d 1.0.1e 1.0.1f Las versiones anteriores de OpenSSL no son vulnerables, y la versin 1.0.1g ha solucionado finalmente el problema. SISTEMASOPERATIVOSAFECTADOS Muchos sistemas operativos Unix/Linux distribuyen por defecto entre sus componentes las bibliotecas de OpenSSL que se han visto afectadas por la vulnerabilidad. Algunos de los sistemas operativos afectados son: Debian Wheezy (estable) y OpenSSL 1.0.1e-2 + deb7u4 Ubuntu 12.04.4 LTS y OpenSSL 1.0.1-4ubuntu5.11 CentOS 6.5 y OpenSSL 1.0.1e-15 Fedora 18 y OpenSSL 1.0.1e-4 OpenBSD 5.3. y 5.4. y OpenSSL 1.0.1c del 10 de mayo 2012 FreeBSD: y OpenSSL 10.0 1.0.1e del 11 de febrero 2013 NetBSD 5.0.2. y OpenSSL 1.0.1e OpenSUSE 12.2 y OpenSSL 1.0.1c Las siguientes versiones no estn afectadas, ya que no incluyen una versin vulnerable: Debian Squeeze y OpenSSL 0.9.8o-4squeeze14. SUSE Linux Enterprise Server. FreeBSD 8.4 y OpenSSL 0.9.8y FreeBSD 9.2 y OpenSSL 0.9.8y FreeBSD Ports y OpenSSL 1.0.1g Adems de estos sistemas operativos, debemos tener en cuenta que si hemos realizado algn tipo de actualizacin a una versin vulnerable, estaremos afectados por el problema. Tambin lo estar cualquier dispositivo embebido que haga uso de cdigo fuente de estas versiones de OpenSSL. 4. ANLISISDELAVULNERABILIDAD Es muy importante recalcar que ha sido una de las vulnerabilidades que ms ha preocupado a la comunidad de seguridad informtico por la sencillez de su explotacin ya que existen herramientas con una complejidad mnima que podra utilizarse para obtener usuarios y contraseas de los servidores afectados. Dentro de la seccin de memoria afectada puede encontrarse informacin crtica como: Claves privadas Usuarios y contraseas de acceso al dispositivo Informacin sensible sobre servicios de terceros Direcciones de memoria y contenido que podra permitir evadir mecanismos de mitigacin de exploits La vulnerabilidad radica en la implementacin de la extensin TLS Heartbeat, de la cual la vulnerabilidad toma el nombre. Esta extensin de TLS es habitualmente necesaria para establecer una sesin y mantenerla durante un periodo largo de tiempo. Podemos consultar y obtener ms informacin en la propia RFC6520 de la extensin, aunque simplificando mucho el protocolo de heartbeat, se basa fundamentalmente en una peticin y una respuest. El siguiente pseudocdigo muestra la estructura de esta peticin: El primer campo del mensaje, HeartbeatMessageType, muestra el tipo del mensaje, que puede tener el valor de 1 o 2, depndiente de si el mensaje es una peticin o una respuesta. A continuacin, payload_length, se indica el tamao del payload enviado en el mensaje. Al tratarse de un entero sin signo de 16 bits, su valor mximo es: 216-1 =65535 Si estamos familiarizados con la vulnerabilidad, esta cifra nos ser familiar, ya que se trata de los famosos 64k de memoria que el atacante ser capaz de obtener de memoria cada vez. 5. Despus nos encontramos el payload del mensaje, que tendr contenido arbitrario con una longitud correspondiente al tamao indicado anteriormente. Finalmente, nos encontramos el padding. Se trata de contenido aleatorio, de al menos 16 bytes de longitud, tal y como est definido en la RFC6520, y debe ser ignorado: Para entender an mejor esta estructura, se presenta el siguiente grfico donde se puede obtener una representacin grfica: MessageType Payload_Length Payload Padding Resaltaremos una condicin ms del RFC6520, que especifica que si se recibe una peticin vlida, el recepto deber responder al mensaje con una copia idntica del payload recibido, lo cual nos ayudar a entender la razn del envo de bloques de memoria arbitrarios: A partir de este momento, nos centraremos en parte del cdigo de las funciones encargadas de gestionar los Heartbeat en la versin de OpenSSL 1.0.1f, dentro del fichero d1_both.c. La primera parte del cdigo responsable: Podemos un puntero p que apunta a la peticin de heartbeat que hemos recibido, hbtype contendr el valor del tipo de mensaje (pregunta o respuesta) que hemos visto anteriormente, y el campo payload que contendr la longitud del payload que recibamos (no debemos confundir el campo con los datos de payload recibidos), y el padding del mensaje, que conocemos que al menos debe ser de 16 bytes. 6. A continuacin comienza a procesarse el mensaje: El primer byte, tipo de mensaje, es copiado a la variable hbtype y el el campo que define la longitud del payload se copia a la variable definida anteriormente como payload, utilizando la funcin n2s, y dejamos el puntero pl apuntando a la parte del payload recibido. Ahora es momento de comprobar si hemos recibido una solicitud de heartbeat y preparar el contenido en memoria para la respuesta: Como vemos en el cdigo, crearemos y asignaremos una nueva variable, llamada buffer, que tendr el tamao en memoria del paquete de respuesta que vamos a crear. Se asignar como tipo de mensaje una respuesta de heartbeat, y tal como indica el RFC6520, a continuacin se copiar campo del tamao del payload y el payload enviado originalmente. Aqu es donde se encuentra la vulnerabilidad, ya que el campo payload contiene la longitud del campo, y se utilizar para determinar exactamente cuantos bytes de memoria deberan ser copiados en el buffer que utilizaremos para la respuesta, sin comprobar que en el paquete original: payload_length < payload Esto implica que una vez que el atacante modifique estos campos, puede indicar que la longitud del payload es superior a la del mensaje enviado, por lo que los datos a continuacin en la memoria del servidor, sern copiados en la respuesta. Por ejemplo, si el atacante define el campo payload_length a un valor de 255 bytes y el payload enviado contiene 5 bytes, el resto del 7. contenido de respuesta pertenecer a zonas de memoria que pueden incluir mensajes sin cifrar, credenciales, claves privadas etc. En el momento actual, los exploits que se encuentran en circulacin tratan de capturar el mximo contenido de memoria para optimizar el ataque, indicando que la longitud del payload es el mximo permitido: 216-1 =65535 En atacante enviara el siguiente paquete a la vctima, indicando una longitud de payload diferente al introducido finalmente: La victima procesar el mensaje de acuerdo al cdigo vulnerable, respondiento con un mensaje en el que volcar el byte recibido, ms los datos localizados en la memoria en el momento del ataque, hasta generar los 65535 bytes: Es importante recalcar que los datos a los que puede tener acceso un atacante corresponden y dependen exclusivamente del contenido de la memoria en el momento del ataque, no siendo posible su determinacin. Para corregir este fallo, en la ltima actualizacin de OpenSSL (1.0.1f en el momento de publicacin de este informe), se ha introducido un cheque para la longitud de escritura en la respuesta: 8. COMPROBACINDELAVULNERABILIDAD Para comprobar de forma online si un servidor puede estar afectado por la vulnerabilidad CVE-2014-0160, existen posibilidades para realizar el chequeo en diferentes pginas de Internet, con slo introducir el nombre de dominio correspondiente, como: http://filippo.io/Heartbleed/ Portal original para la comprobacin de la vulnerabilidad, que tambin permite descargarnos el cdigo fuente desde el sitio de GitHub, pudiendo adaptarlo a nuestras necesidades o implantarlo como herramienta en nuestra Intranet http://www.ssllabs.com/ssltest/ Debemos prestar atencin en activar la opcin "Do not show the results on the boards" y no mostrar el resultado de forma pblica en la pgina. Dentro de las diferentes pruebas de concepto y herramientas publicadas para detectar y explotar la vulnerabilidad, destacaremos: Prueba de concepto original http://s3.jspenguin.org/ssltest.py Metasploit https://github.com/rapid7/metasploit- framework/blob/master/modules/auxiliary/scanner/ ssl/openssl_heartbleed.rb Prueba de concepto que permite tunelizar los datos filtrados a travs de SSL para evadir IDS/IPS y forenses http://pastebay.net/1422064 9. Script NSE para nmap https://svn.nmap.org/nmap/scripts/ssl- heartbleed.nse Plugin oficial