SlideShare una empresa de Scribd logo
 
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
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 ...	
  
	
  
	
  
	
  
	
  
	
  
	
   	
  
 
	
  
INTRODUCCIÓN	
  Y	
  OBJETIVOS	
  
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.
RESUMEN	
  EJECUTIVO	
  
• OpenSSL Consiste en un robusto paquete de herramientas de
administración y bibliotecas relacionadas con la criptografía,
que suministran funciones criptográficas a varios protocolos .
• La vulnerabilidad permitiría a un atacante obtener 64Kb de
memoria, que aunque pudiera parecer una cantidad mínima,
podría comprometer información crítica del sistema afectado.
• Además 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 extensión 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):
 
	
  
VERSIONES	
  DEL	
  OPENSSL	
  VULNERABLES	
  
No todas las versiones de OpenSSL se han visto afectadas por la
vunerabilidad, sino que sólamente 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 versión
1.0.1g ha solucionado finalmente el problema.
SISTEMAS	
  OPERATIVOS	
  AFECTADOS	
  
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 están afectadas, ya que no incluyen una
versión 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
Además de estos sistemas operativos, debemos tener en cuenta que
si hemos realizado algún tipo de actualización a una versión
vulnerable, estaremos afectados por el problema.
También lo estará cualquier dispositivo embebido que haga uso de
código fuente de estas versiones de OpenSSL.
 
	
  
ANÁLISIS	
  DE	
  LA	
  VULNERABILIDAD	
  
Es muy importante recalcar que ha sido una de las vulnerabilidades
que más ha preocupado a la comunidad de seguridad informático por
la sencillez de su explotación ya que existen herramientas con una
complejidad mínima que podría utilizarse para obtener usuarios y
contraseñas de los servidores afectados.
Dentro de la sección de memoria afectada puede encontrarse
información crítica como:
• Claves privadas
• Usuarios y contraseñas de acceso al dispositivo
• Información sensible sobre servicios de terceros
• Direcciones de memoria y contenido que podría permitir evadir
mecanismos de mitigación de exploits
La vulnerabilidad radica en la implementación de la extensión TLS
Heartbeat, de la cual la vulnerabilidad toma el nombre. Esta
extensión de TLS es habitualmente necesaria para establecer una
sesión y mantenerla durante un periodo largo de tiempo.
Podemos consultar y obtener más información en la propia RFC6520
de la extensión, aunque simplificando mucho el protocolo de
heartbeat, se basa fundamentalmente en una petición y una
respuestá.
El siguiente pseudocódigo muestra la estructura de esta petición:
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 petición o una respuesta.
A continuación, payload_length, se indica el tamaño del payload
enviado en el mensaje. Al tratarse de un entero sin signo de 16 bits,
su valor máximo 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.
 
	
  
Después nos encontramos el payload del mensaje, que tendrá
contenido arbitrario con una longitud correspondiente al tamaño
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 aún mejor esta estructura, se presenta el siguiente
gráfico donde se puede obtener una representación gráfica:
MessageType Payload_Length Payload Padding
Resaltaremos una condición más del RFC6520, que especifica que si
se recibe una petición válida, el recepto deberá responder al mensaje
con una copia idéntica del payload recibido, lo cual nos ayudará a
entender la razón del envío de bloques de memoria arbitrarios:
A partir de este momento, nos centraremos en parte del código de las
funciones encargadas de gestionar los Heartbeat en la versión de
OpenSSL 1.0.1f, dentro del fichero d1_both.c.
La primera parte del código responsable:
Podemos un puntero p que apunta a la petición 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.
 
	
  
A continuación 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 función 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 código, crearemos y asignaremos una nueva
variable, llamada buffer, que tendrá el tamaño 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 continuación se copiará campo del tamaño
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 deberían 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 continuación en la memoria del
servidor, serán 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
 
	
  
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 circulación
tratan de capturar el máximo contenido de memoria para optimizar el
ataque, indicando que la longitud del payload es el máximo
permitido:
216-1
=65535
En atacante enviaría el siguiente paquete a la víctima, indicando una
longitud de payload diferente al introducido finalmente:
La victima procesará el mensaje de acuerdo al código vulnerable,
respondiento con un mensaje en el que volcará el byte recibido, más
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
determinación.
Para corregir este fallo, en la última actualización de OpenSSL (1.0.1f
en el momento de publicación de este informe), se ha introducido un
cheque para la longitud de escritura en la respuesta:
 
	
  
COMPROBACIÓN	
  DE	
  LA	
  VULNERABILIDAD	
  
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 páginas de Internet, con sólo
introducir el nombre de dominio correspondiente, como:
• http://filippo.io/Heartbleed/
Portal original para la comprobación de la vulnerabilidad, que
también permite descargarnos el código 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 atención en activar la opción "Do not show
the results on the boards" y no mostrar el resultado de forma
pública en la página.
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 través de SSL para evadir IDS/IPS y forenses
http://pastebay.net/1422064
 
	
  
• Script NSE para nmap
https://svn.nmap.org/nmap/scripts/ssl-
heartbleed.nse
• Plugin oficial NASL de Tenable
http://www.tenable.com/plugins/index.php?view=si
ngle&id=73404
Si no disponemos de conexión a Internet para realizar el chequeo de
forma online o descargar la herramienta adecuada, podemos
comprobarlo desde la propia línea de comandos haciendo uso del
cliente de OpenSSL:
$ openssl s_client -connect <ip>:<puerto>
Y desde la interfaz, pulsar B. Si recibimos un error, el servicio no es
vulnerable. En otro caso, el servicio es potencialmente vulnerable.
Veamos como ejemplo una salida real de un servicio vulnerable:
New, TLSv1/SSLv3, Cipher is AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : AES256-GCM-SHA384
Session-ID:
1907E866C9EA711CBCC79990A42A3397F42C18187E134C1D45F127D2892D
Session-ID-ctx:
Master-Key:
1879E87ED22A69961A769C09CC7BBD920CD274D26D4856AD21A162DA5B9
754415204E737F3AD6D1C658E486D6F1FDB17
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - db cb 01 bb d5 55 70 90-0a 23 3e 5c 21 e1 f1 f6 .....Up..#>!...
0010 - 7f 84 fe b3 1a f3 6f f7-82 ea b3 be ff b2 8d 14 ......o.........
0020 - dc 9c e6 d4 fc ed 8a 0d-f9 64 59 1d 2e e3 5b 25 .........dY...[%
0030 - a0 cb 45 c7 bd fd 74 8e-a3 1d 4e 9f 03 2f 30 b9 ..E...t...N../0.
0040 - 1e fa 84 36 bd ba 36 21-5c cc 18 00 18 bb 0a 1a ...6..6!.......
0050 - b2 01 87 d1 bc cd 11 cb-2e 64 62 36 50 51 89 57 .........db6PQ.W
0060 - e6 d3 19 a8 5e 01 2e 3d-6d ec bc 13 ce fb ee 52 ....^..=m......R
0070 - bc b4 5c 16 92 93 8a a5-bd d7 01 9d 5e a9 84 1e ...........^...
0080 - 37 d2 15 93 bf 9d 22 93-06 fb e6 b9 16 18 61 f8 7.....".......a.
0090 - 3b b8 df 77 f9 2e 8c 81-e4 10 e2 3c 07 40 c7 81 ;..w.......<.@..
00a0 - 13 e2 91 1f 69 a6 7e 64-93 28 30 78 55 34 6b 5e ....i.~d.(0xU4k^
00b0 - f6 99 78 ba 7c 9f 13 51-d8 2b b3 1f bc e5 7e b1 ..x.|..Q.+....~.
Start Time: 1396986311
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
B
HEARTBEATING
read R BLOCK
 
	
  
ACTUALIZACIÓN	
  DE	
  PAQUETES	
  AFECTADOS	
  
Para solucionar la vulnerabilidad, es necesario actualizar los paquetes
de OpenSSL siguiendo las indicaciones y recomendaciones del
fabricante.
Como normal general, será necesario actualizar la versión de
OpenSSL a una versión que no sea vulnerable (en este momento la
1.0.1f) utilizando el gestor de paquetes correspondiente de nuestro
sistema operativo.
Es importante reiniciar los servicios correspondientes que utilicen las
librerias vulnerables para asegurarnos de que la actualización
produce el efecto deseado de inmediato.
Por ejemplo, en el caso de Ubuntu, el procedimiento sería el
siguiente:
$ sudo apt-get update
$ sudo apt-get install -y libssl1.0.0 openssl
Ahora confirmaremos la versión instalada:
$ openssl version -a
OpenSSL 1.0.1 14 Mar 2012
built on: Mon Apr 7 20:33:29 UTC 2014
platform: debian-amd64 options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int)
blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -
D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -
DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -
Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-
Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -
DOPENSSL_NO_TLS1_2_CLIENT -
DOPENSSL_MAX_TLS1_2_CIPHER_LENGTH=50 -DMD32_REG_T=int -
DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -
DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -
DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -
DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM OPENSSLDIR:
"/usr/lib/ssl"
Procedemos a reiniciar todos los servicios que lo utilicen:
$ lsof -n | grep ssl | grep DEL
A continuación se presenta una lista con los enlaces a las
recomendaciones de las principales plataformas:
Ubuntu
http://www.ubuntu.com/usn/usn-2165-1/
Redhat
https://rhn.redhat.com/errata/RHSA-2014-0376.html
CentOS
http://lists.centos.org/pipermail/centos-announce/2014-
April/020249.html
 
	
  
Fedora
https://lists.fedoraproject.org/pipermail/announce/2014-
April/003205.html
OpenSUSE
http://lists.opensuse.org/opensuse-security-announce/2014-
04/msg00005.html
OpenBSD
http://ftp.openbsd.org/pub/OpenBSD/patches/5.5/common/00
2_openssl.patch.sig
Gentoo
http://www.gentoo.org/security/en/glsa/glsa-201404-07.xml
Si no nos es posible utilizar las fuentes y procedimientos oficiales de
actualización, tenemos como alternativa recompilarlo desde cero,
deshabilitando el soporte de Heartbeat con la opción:
-DOPENSSL_NO_HEARTBEATS
REGLAS	
  DE	
  DETECCIÓN	
  DE	
  LA	
  AMENAZA	
  PARA	
  IDS/IPS	
  
Para poder además detectar posibles ataques que exploten la
vulnerabilidad descrita en este reporte, se recomiendan una serie de
reglas para incluir en los diferentes sistemas de IPS/IDS, que nos
alertaran cuando un posible atacante realice algún intento malicioso.
A continuación se detallan una serie de reglas oficiales dentro del
paquete oficial de suscripción para clientes del Sourcefire
Vulnerability Research Team:
alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER
OpenSSL SSLv3 heartbeat read overrun attempt";
flow:to_server,established; content:"|18 03 00|"; depth:3; dsize:>40;
detection_filter:track by_src, count 3, seconds 1; metadata:policy balanced-
ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160;
classtype:attempted-recon; sid:30510; rev:2;)
alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER
OpenSSL TLSv1 heartbeat read overrun attempt";
flow:to_server,established; content:"|18 03 01|"; depth:3; dsize:>40;
detection_filter:track by_src, count 3, seconds 1; metadata:policy balanced-
ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160;
classtype:attempted-recon; sid:30511; rev:2;)
alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER
OpenSSL TLSv1.1 heartbeat read overrun attempt";
flow:to_server,established; content:"|18 03 02|"; depth:3; dsize:>40;
detection_filter:track by_src, count 3, seconds 1; metadata:policy balanced-
ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160;
classtype:attempted-recon; sid:30512; rev:2;)
alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER
OpenSSL TLSv1.2 heartbeat read overrun attempt";
flow:to_server,established; content:"|18 03 03|"; depth:3; dsize:>40;
 
	
  
detection_filter:track by_src, count 3, seconds 1; metadata:policy balanced-
ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160;
classtype:attempted-recon; sid:30513; rev:2;)
alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER
SSLv3 large heartbeat response - possible ssl heartbleed attempt";
flow:to_client,established; content:"|18 03 00|"; depth:3;
byte_test:2,>,128,0,relative; detection_filter:track by_dst, count 5, seconds
60; metadata:policy balanced-ips drop, policy security-ips drop, service ssl;
reference:cve,2014-0160; classtype:attempted- recon; sid:30514; rev:3;)
alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER
TLSv1 large heartbeat response - possible ssl heartbleed attempt";
flow:to_client,established; content:"|18 03 01|"; depth:3;
byte_test:2,>,128,0,relative; detection_filter:track by_dst, count 5, seconds
60; metadata:policy balanced-ips drop, policy security-ips drop, service ssl;
reference:cve,2014-0160; classtype:attempted- recon; sid:30515; rev:3;)
alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER
TLSv1.1 large heartbeat response - possible ssl heartbleed attempt";
flow:to_client,established; content:"|18 03 02|"; depth:3;
byte_test:2,>,128,0,relative; detection_filter:track by_dst, count 5, seconds
60; metadata:policy balanced-ips drop, policy security-ips drop, service ssl;
reference:cve,2014-0160; classtype:attempted- recon; sid:30516; rev:3;)
alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER
TLSv1.2 large heartbeat response - possible ssl heartbleed attempt";
flow:to_client,established; content:"|18 03 03|"; depth:3;
byte_test:2,>,128,0,relative; detection_filter:track by_dst, count 5, seconds
60; metadata:policy balanced-ips drop, policy security-ips drop, service ssl;
reference:cve,2014-0160; classtype:attempted- recon; sid:30517; rev:3;)
También se ha publicado un módulo de detección para Bro, disponible
en la URL oficial:
https://github.com/bro/bro/blob/topic/bernhard/heartbeat/scripts/policy/pro
tocols/ssl/heartbleed.bro
La correspondiente regla para Suricata:
alert tls any any -> any any ( msg:"TLS HEARTBLEED malformed heartbeat
record"; flow:established,to_server; dsize:>7; content:"|18 03|"; depth:2;
lua:tls-heartbleed.lua; classtype:misc-attack; sid:3000001; rev:1;)
Y el script necesario:
function init (args)
local needs = {}
needs["payload"] = tostring(true)
return needs
end
function match(args)
local p = args['payload']
if p == nil then
--print ("no payload")
return 0
end
 
	
  
if #p < 8 then
--print ("payload too small")
end
if (p:byte(1) ~= 24) then
--print ("not a heartbeat")
return 0
end
-- message length
len = 256 * p:byte(4) + p:byte(5)
--print (len)
-- heartbeat length
hb_len = 256 * p:byte(7) + p:byte(8)
-- 1+2+16
if (1+2+16) >= len then
print ("invalid length heartbeat")
return 1
end
-- 1 + 2 + payload + 16
if (1 + 2 + hb_len + 16) > len then
print ("heartbleed attack detected: " .. (1 + 2 + hb_len + 16) .. " > "
.. len)
return 1
end
--print ("no problems")
return 0
end
return 0
MITIGAR	
  LOS	
  EFECTOS	
  DE	
  LA	
  AMENAZA	
  
En última instancia, además de actualizar los paquetes afectados por
la vulnerabilidad, será necesario gestionar los datos que hayan
podido ser comprometidos por terceras personas, para evitar ataques
posteriores.
Debido a que la vulnerabilidad permite acceder a bloques de memoria
en los servidores afectados, es posible que información como la
detallada a continuación, se haya visto comprometida:
• Credenciales (login y password) de usuarios del sistema
• Claves privadas de los certificados TLS/SSL
• Información sensible sobre servicios de terceros
• Direcciones de memoria y contenido que podría permitir
evadir mecanismos de mitigación de exploits
	
  
Solamente una vez actualizado y corregido el problema, se
recomendará comenzar con el proceso de mitigación, que pueden
afectar tanto a la seguridad de los usuarios, como a la del servidor y
los certificados instalados.
 
	
  
CLAVES	
  PRIVADAS	
  DE	
  LOS	
  CERTIFICADOS	
  SSL	
  
En la siguiente captura, podremos demostrar que es posible bajo
ciertas condiciones, acceder a la clave privada SSL de forma parcial o
total de un sistema vulnerable:
Será necesario actuar de la siguiente manera en relación las claves
privadas SSL del servidor afectado:
1. Revocar los certificados instalados, ya que un atacante podría
haber podido acceder a ellas, y por tanto estar comprometidas
2. Generar nuevas claves y nuevos certificados para los servicios
que que hayan estado expuestos
3. Mantener una copia de los certificados y claves antiguas, por si
fuera necesario en un futuro acceder a información protegida
por los mismos
 
	
  
CLAVES	
  Y	
  DATOS	
  DE	
  USUARIOS
En lo referente a las claves y datos de los usuarios, y con el objetivo
claro de salvaguardar la información, así como de generar confianza
en los clientes, se recomienda regenerar las contraseñas de los
usuarios o comunicarles que será necesario un cambio en la
contraseña, forzándolo en el siguiente acceso a la plataforma.
Esta acción es de vital importancia, ya que el acceso a todas estas
credenciales es más factible en su totalidad en los fragmentos de
memoria devueltos por el servidor afectado:
	
  
OTROS	
  SERVICIOS	
  
Finalmente, deberemos tener en cuenta que la posible afectación de
plataformas intermedias, como los VPN SSLs, han podido exponer a
un atacante el tráfico en claro que se encontrara cursando durante la
explotación del ataque, revelando credenciales de servicios de
terceros, cookies, así como otra información sensible:
	
  
REFERENCIAS	
  
Puede	
  encontrarse	
  más	
  información	
  de	
  utilidad	
  sobre	
  esta	
  vulnerabilidad	
  en	
  los	
  
siguientes	
  enlaces	
  proporcionados:	
  
• http://cert.inteco.es/securityAdvice/Actualidad/Avisos_seguridad_tecnicos
/grave_vulnerabilidad_funcionalidad_heartbeat_openssl_20140	
  408	
  
• https://cve.mitre.org/cgi-­‐bin/cvename.cgi?name=CVE-­‐2014-­‐0160	
  
http://heartbleed.com	
  
• http://www.openssl.org/news/secadv_20140407.txt	
  
 
	
  
• http://vrt-­‐blog.snort.org/2014/04/heartbleed-­‐memory-­‐disclosure-­‐
upgrade.html	
  
• http://doc.emergingthreats.net/bin/search/Main/?search=heartbleed	
  
http://www.blackploit.com/2014/04/vulnerabilidad-­‐critica-­‐en-­‐openssl-­‐
cve.html	
  
• http://www.kb.cert.org/vuls/id/720951	
  
• https://github.com/musalbas/heartbleed-­‐
masstest/blob/master/top1000.txt	
  
• http://www.circl.lu/pub/tr-­‐21/	
  

Más contenido relacionado

PDF
Tutorial de protocolos udp,tcp,sctp
PPTX
Redes del computador unidad 3
PDF
Squid3 - Servidor Proxy
PPTX
Actividad 3 redes
ODP
Curso Redes Linex 2
PDF
servidor proxy squid
PDF
Unidad iii seguridad de redes
ODP
Tutorial de protocolos udp,tcp,sctp
Redes del computador unidad 3
Squid3 - Servidor Proxy
Actividad 3 redes
Curso Redes Linex 2
servidor proxy squid
Unidad iii seguridad de redes

La actualidad más candente (20)

PDF
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
DOCX
PROXY CENTOS 6.5
PPT
VC4NM73-EQ#6-TLS
PPS
Vc4 nm73 eq#6-tls
PPTX
Sockets tcp
PDF
los seguridad puertos
PDF
Manual de configuracion de proxy SQUID
PDF
Introduccion a la tecnologia web
PPTX
Protocolos redes
PDF
Tutorial Instalacion Openvpn
PPTX
Resumen Servidor Proxy
PDF
92 Php. Instalar Php4 Como Cgi
PPTX
Configuracion proxy Windows server 2008
PDF
Unidad didactica cortafuegos_final
PDF
PDF
Servidor proxy en centos
PDF
Unidad iii seguridad de redes bmos
PDF
Filtrado der contenido web con GNU/Linux y Squid
PDF
Configuracion del servidor vsftpd en linux
PDF
Http net gui preguntas y soluciones
Instalacion del servidor proxy para conectar una red lan a una pc con salid...
PROXY CENTOS 6.5
VC4NM73-EQ#6-TLS
Vc4 nm73 eq#6-tls
Sockets tcp
los seguridad puertos
Manual de configuracion de proxy SQUID
Introduccion a la tecnologia web
Protocolos redes
Tutorial Instalacion Openvpn
Resumen Servidor Proxy
92 Php. Instalar Php4 Como Cgi
Configuracion proxy Windows server 2008
Unidad didactica cortafuegos_final
Servidor proxy en centos
Unidad iii seguridad de redes bmos
Filtrado der contenido web con GNU/Linux y Squid
Configuracion del servidor vsftpd en linux
Http net gui preguntas y soluciones
Publicidad

Destacado (20)

PPT
16 Administración Android - EMM
PPTX
Telefónica I Jornada Economia y Sociedad Digital
PDF
Cloud computing Autelsi
PDF
Innovation Security Day FAAST
PPTX
Software social y comunicaciones integradas en telefónica
PDF
eCongress 2015: El nuevo consumidor. Ponencia de Manuel López Pérez, de Telef...
PDF
Innvovation Security Day Metashield
PPTX
Revolution Banking: Banca en un Futuro Digital
PDF
Raquel Pinillos, Congreso DEC. Informe sobre nivel de la "operativización" d...
PDF
Social Engagement
PDF
The 2015 U.S. Mobile App Report - COMSCORE
PDF
Ponencia Andrés Laseca en el evento Cloud Media de Telefónica
PPTX
Aprende a crear y desplegar una aplicación de python que use APIs de BlueVia
PDF
Una completa y pionera guía sobre Bitcoin, la moneda virtual
PPTX
Gamification in 2012: Trends in Consumer and Enterprise Markets with Metrics
PDF
Informe Ostelea Turismo Colaborativo 2015
PDF
Resultados Proyecto Valcronic presentados en Congreso Crónicos 2014. Más info...
PPTX
Predicciones cloud Telefónica para 2016
PDF
Observatorio de Redes Sociales: 4ª ola
PPTX
Cloud Híbrida de Telefónica
16 Administración Android - EMM
Telefónica I Jornada Economia y Sociedad Digital
Cloud computing Autelsi
Innovation Security Day FAAST
Software social y comunicaciones integradas en telefónica
eCongress 2015: El nuevo consumidor. Ponencia de Manuel López Pérez, de Telef...
Innvovation Security Day Metashield
Revolution Banking: Banca en un Futuro Digital
Raquel Pinillos, Congreso DEC. Informe sobre nivel de la "operativización" d...
Social Engagement
The 2015 U.S. Mobile App Report - COMSCORE
Ponencia Andrés Laseca en el evento Cloud Media de Telefónica
Aprende a crear y desplegar una aplicación de python que use APIs de BlueVia
Una completa y pionera guía sobre Bitcoin, la moneda virtual
Gamification in 2012: Trends in Consumer and Enterprise Markets with Metrics
Informe Ostelea Turismo Colaborativo 2015
Resultados Proyecto Valcronic presentados en Congreso Crónicos 2014. Más info...
Predicciones cloud Telefónica para 2016
Observatorio de Redes Sociales: 4ª ola
Cloud Híbrida de Telefónica
Publicidad

Similar a Análisis heart bleed (20)

DOCX
Fallo de seguridad "HeartBleed".
PDF
Noticia abril
PPTX
Heartbleed
PDF
PDF
Compu ...noticia 6
PDF
Compu ...noticia 6
PDF
Compu ...noticia 6
PDF
Compu ...noticia 6
PDF
PDF
Noticia no6
PDF
Compañías de internet alertan de un grave error de software que compromete la...
DOCX
Noticia 6
PDF
Noticia Abril
PPTX
Análisis de la vulnerabilidad en las paginas web
DOCX
Viviana
DOCX
Reporte de procesador ccc
PDF
Heartbleed
PDF
Noticia no
PDF
Noticia no
Fallo de seguridad "HeartBleed".
Noticia abril
Heartbleed
Compu ...noticia 6
Compu ...noticia 6
Compu ...noticia 6
Compu ...noticia 6
Noticia no6
Compañías de internet alertan de un grave error de software que compromete la...
Noticia 6
Noticia Abril
Análisis de la vulnerabilidad en las paginas web
Viviana
Reporte de procesador ccc
Heartbleed
Noticia no
Noticia no

Más de Telefónica Grandes Clientes (20)

PDF
PPTX
IT Sourcing towards the Cloud
PDF
eBook Emprendimiento digital
PDF
Infografía con las claves para ser excelente en experiencia de cliente
PDF
Infografía profesiones con futuro. Más información http://bit.ly/2bSDVNN
PDF
El eCommerce español en cifras
PDF
Infografía innovación a nivel global. Más info: http://bit.ly/2900oaC
PDF
ebook con las últimas tendencias en Cloud
PDF
eBook Big Data 2016
PDF
El nuevo paradigma de la educación digital
PDF
Ponencia Telefónica Europa en #cloudmediaday
PDF
Ponencia rtve en #cloudmediaday
PDF
Ponencia Firstvision startup wayra en #cloudmediaday
PDF
Ponencia 89bits startup Wayra en #CloudMmediaDay
PDF
Caso éxito de la solución Archivo Digital Cloud de Telefónica. Más informació...
PDF
Infografía Cloud Privada. Más información en http://ow.ly/F1Y7t
PPTX
Ponencia Datos abiertos en educación SIMO Educación 2014. Más información sob...
PDF
Genesys en Contact Center Telefónica
PDF
Verbio en Contact Center Telefónica
PDF
Oracle en Contact Center Telefónica
IT Sourcing towards the Cloud
eBook Emprendimiento digital
Infografía con las claves para ser excelente en experiencia de cliente
Infografía profesiones con futuro. Más información http://bit.ly/2bSDVNN
El eCommerce español en cifras
Infografía innovación a nivel global. Más info: http://bit.ly/2900oaC
ebook con las últimas tendencias en Cloud
eBook Big Data 2016
El nuevo paradigma de la educación digital
Ponencia Telefónica Europa en #cloudmediaday
Ponencia rtve en #cloudmediaday
Ponencia Firstvision startup wayra en #cloudmediaday
Ponencia 89bits startup Wayra en #CloudMmediaDay
Caso éxito de la solución Archivo Digital Cloud de Telefónica. Más informació...
Infografía Cloud Privada. Más información en http://ow.ly/F1Y7t
Ponencia Datos abiertos en educación SIMO Educación 2014. Más información sob...
Genesys en Contact Center Telefónica
Verbio en Contact Center Telefónica
Oracle en Contact Center Telefónica

Último (20)

PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
DOCX
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
PPTX
Propuesta BKP servidores con Acronis1.pptx
DOCX
Guía 5. Test de orientación Vocacional 2.docx
PPTX
Control de calidad en productos de frutas
PPTX
modulo seguimiento 1 para iniciantes del
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PPTX
Curso de generación de energía mediante sistemas solares
PPTX
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
PPTX
Uso responsable de la tecnología - EEST N°1
PPTX
ccna: redes de nat ipv4 stharlling cande
PPT
Protocolos de seguridad y mecanismos encriptación
PPTX
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PDF
TRABAJO DE TECNOLOGIA.pdf...........................
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
Propuesta BKP servidores con Acronis1.pptx
Guía 5. Test de orientación Vocacional 2.docx
Control de calidad en productos de frutas
modulo seguimiento 1 para iniciantes del
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
Curso de generación de energía mediante sistemas solares
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
Uso responsable de la tecnología - EEST N°1
ccna: redes de nat ipv4 stharlling cande
Protocolos de seguridad y mecanismos encriptación
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
la-historia-de-la-medicina Edna Silva.pptx
TRABAJO DE TECNOLOGIA.pdf...........................

Análisis 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.     INTRODUCCIÓN  Y  OBJETIVOS   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. RESUMEN  EJECUTIVO   • OpenSSL Consiste en un robusto paquete de herramientas de administración y bibliotecas relacionadas con la criptografía, que suministran funciones criptográficas a varios protocolos . • La vulnerabilidad permitiría a un atacante obtener 64Kb de memoria, que aunque pudiera parecer una cantidad mínima, podría comprometer información crítica del sistema afectado. • Además 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 extensión 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.     VERSIONES  DEL  OPENSSL  VULNERABLES   No todas las versiones de OpenSSL se han visto afectadas por la vunerabilidad, sino que sólamente 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 versión 1.0.1g ha solucionado finalmente el problema. SISTEMAS  OPERATIVOS  AFECTADOS   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 están afectadas, ya que no incluyen una versión 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 Además de estos sistemas operativos, debemos tener en cuenta que si hemos realizado algún tipo de actualización a una versión vulnerable, estaremos afectados por el problema. También lo estará cualquier dispositivo embebido que haga uso de código fuente de estas versiones de OpenSSL.
  • 4.     ANÁLISIS  DE  LA  VULNERABILIDAD   Es muy importante recalcar que ha sido una de las vulnerabilidades que más ha preocupado a la comunidad de seguridad informático por la sencillez de su explotación ya que existen herramientas con una complejidad mínima que podría utilizarse para obtener usuarios y contraseñas de los servidores afectados. Dentro de la sección de memoria afectada puede encontrarse información crítica como: • Claves privadas • Usuarios y contraseñas de acceso al dispositivo • Información sensible sobre servicios de terceros • Direcciones de memoria y contenido que podría permitir evadir mecanismos de mitigación de exploits La vulnerabilidad radica en la implementación de la extensión TLS Heartbeat, de la cual la vulnerabilidad toma el nombre. Esta extensión de TLS es habitualmente necesaria para establecer una sesión y mantenerla durante un periodo largo de tiempo. Podemos consultar y obtener más información en la propia RFC6520 de la extensión, aunque simplificando mucho el protocolo de heartbeat, se basa fundamentalmente en una petición y una respuestá. El siguiente pseudocódigo muestra la estructura de esta petición: 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 petición o una respuesta. A continuación, payload_length, se indica el tamaño del payload enviado en el mensaje. Al tratarse de un entero sin signo de 16 bits, su valor máximo 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.     Después nos encontramos el payload del mensaje, que tendrá contenido arbitrario con una longitud correspondiente al tamaño 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 aún mejor esta estructura, se presenta el siguiente gráfico donde se puede obtener una representación gráfica: MessageType Payload_Length Payload Padding Resaltaremos una condición más del RFC6520, que especifica que si se recibe una petición válida, el recepto deberá responder al mensaje con una copia idéntica del payload recibido, lo cual nos ayudará a entender la razón del envío de bloques de memoria arbitrarios: A partir de este momento, nos centraremos en parte del código de las funciones encargadas de gestionar los Heartbeat en la versión de OpenSSL 1.0.1f, dentro del fichero d1_both.c. La primera parte del código responsable: Podemos un puntero p que apunta a la petición 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 continuación 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 función 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 código, crearemos y asignaremos una nueva variable, llamada buffer, que tendrá el tamaño 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 continuación se copiará campo del tamaño 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 deberían 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 continuación en la memoria del servidor, serán 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 circulación tratan de capturar el máximo contenido de memoria para optimizar el ataque, indicando que la longitud del payload es el máximo permitido: 216-1 =65535 En atacante enviaría el siguiente paquete a la víctima, indicando una longitud de payload diferente al introducido finalmente: La victima procesará el mensaje de acuerdo al código vulnerable, respondiento con un mensaje en el que volcará el byte recibido, más 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 determinación. Para corregir este fallo, en la última actualización de OpenSSL (1.0.1f en el momento de publicación de este informe), se ha introducido un cheque para la longitud de escritura en la respuesta:
  • 8.     COMPROBACIÓN  DE  LA  VULNERABILIDAD   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 páginas de Internet, con sólo introducir el nombre de dominio correspondiente, como: • http://filippo.io/Heartbleed/ Portal original para la comprobación de la vulnerabilidad, que también permite descargarnos el código 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 atención en activar la opción "Do not show the results on the boards" y no mostrar el resultado de forma pública en la página. 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 través 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 NASL de Tenable http://www.tenable.com/plugins/index.php?view=si ngle&id=73404 Si no disponemos de conexión a Internet para realizar el chequeo de forma online o descargar la herramienta adecuada, podemos comprobarlo desde la propia línea de comandos haciendo uso del cliente de OpenSSL: $ openssl s_client -connect <ip>:<puerto> Y desde la interfaz, pulsar B. Si recibimos un error, el servicio no es vulnerable. En otro caso, el servicio es potencialmente vulnerable. Veamos como ejemplo una salida real de un servicio vulnerable: New, TLSv1/SSLv3, Cipher is AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : AES256-GCM-SHA384 Session-ID: 1907E866C9EA711CBCC79990A42A3397F42C18187E134C1D45F127D2892D Session-ID-ctx: Master-Key: 1879E87ED22A69961A769C09CC7BBD920CD274D26D4856AD21A162DA5B9 754415204E737F3AD6D1C658E486D6F1FDB17 Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 300 (seconds) TLS session ticket: 0000 - db cb 01 bb d5 55 70 90-0a 23 3e 5c 21 e1 f1 f6 .....Up..#>!... 0010 - 7f 84 fe b3 1a f3 6f f7-82 ea b3 be ff b2 8d 14 ......o......... 0020 - dc 9c e6 d4 fc ed 8a 0d-f9 64 59 1d 2e e3 5b 25 .........dY...[% 0030 - a0 cb 45 c7 bd fd 74 8e-a3 1d 4e 9f 03 2f 30 b9 ..E...t...N../0. 0040 - 1e fa 84 36 bd ba 36 21-5c cc 18 00 18 bb 0a 1a ...6..6!....... 0050 - b2 01 87 d1 bc cd 11 cb-2e 64 62 36 50 51 89 57 .........db6PQ.W 0060 - e6 d3 19 a8 5e 01 2e 3d-6d ec bc 13 ce fb ee 52 ....^..=m......R 0070 - bc b4 5c 16 92 93 8a a5-bd d7 01 9d 5e a9 84 1e ...........^... 0080 - 37 d2 15 93 bf 9d 22 93-06 fb e6 b9 16 18 61 f8 7.....".......a. 0090 - 3b b8 df 77 f9 2e 8c 81-e4 10 e2 3c 07 40 c7 81 ;..w.......<.@.. 00a0 - 13 e2 91 1f 69 a6 7e 64-93 28 30 78 55 34 6b 5e ....i.~d.(0xU4k^ 00b0 - f6 99 78 ba 7c 9f 13 51-d8 2b b3 1f bc e5 7e b1 ..x.|..Q.+....~. Start Time: 1396986311 Timeout : 300 (sec) Verify return code: 20 (unable to get local issuer certificate) --- B HEARTBEATING read R BLOCK
  • 10.     ACTUALIZACIÓN  DE  PAQUETES  AFECTADOS   Para solucionar la vulnerabilidad, es necesario actualizar los paquetes de OpenSSL siguiendo las indicaciones y recomendaciones del fabricante. Como normal general, será necesario actualizar la versión de OpenSSL a una versión que no sea vulnerable (en este momento la 1.0.1f) utilizando el gestor de paquetes correspondiente de nuestro sistema operativo. Es importante reiniciar los servicios correspondientes que utilicen las librerias vulnerables para asegurarnos de que la actualización produce el efecto deseado de inmediato. Por ejemplo, en el caso de Ubuntu, el procedimiento sería el siguiente: $ sudo apt-get update $ sudo apt-get install -y libssl1.0.0 openssl Ahora confirmaremos la versión instalada: $ openssl version -a OpenSSL 1.0.1 14 Mar 2012 built on: Mon Apr 7 20:33:29 UTC 2014 platform: debian-amd64 options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS - D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN - DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat - Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,- Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall - DOPENSSL_NO_TLS1_2_CLIENT - DOPENSSL_MAX_TLS1_2_CIPHER_LENGTH=50 -DMD32_REG_T=int - DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT - DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM - DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM - DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM OPENSSLDIR: "/usr/lib/ssl" Procedemos a reiniciar todos los servicios que lo utilicen: $ lsof -n | grep ssl | grep DEL A continuación se presenta una lista con los enlaces a las recomendaciones de las principales plataformas: Ubuntu http://www.ubuntu.com/usn/usn-2165-1/ Redhat https://rhn.redhat.com/errata/RHSA-2014-0376.html CentOS http://lists.centos.org/pipermail/centos-announce/2014- April/020249.html
  • 11.     Fedora https://lists.fedoraproject.org/pipermail/announce/2014- April/003205.html OpenSUSE http://lists.opensuse.org/opensuse-security-announce/2014- 04/msg00005.html OpenBSD http://ftp.openbsd.org/pub/OpenBSD/patches/5.5/common/00 2_openssl.patch.sig Gentoo http://www.gentoo.org/security/en/glsa/glsa-201404-07.xml Si no nos es posible utilizar las fuentes y procedimientos oficiales de actualización, tenemos como alternativa recompilarlo desde cero, deshabilitando el soporte de Heartbeat con la opción: -DOPENSSL_NO_HEARTBEATS REGLAS  DE  DETECCIÓN  DE  LA  AMENAZA  PARA  IDS/IPS   Para poder además detectar posibles ataques que exploten la vulnerabilidad descrita en este reporte, se recomiendan una serie de reglas para incluir en los diferentes sistemas de IPS/IDS, que nos alertaran cuando un posible atacante realice algún intento malicioso. A continuación se detallan una serie de reglas oficiales dentro del paquete oficial de suscripción para clientes del Sourcefire Vulnerability Research Team: alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER OpenSSL SSLv3 heartbeat read overrun attempt"; flow:to_server,established; content:"|18 03 00|"; depth:3; dsize:>40; detection_filter:track by_src, count 3, seconds 1; metadata:policy balanced- ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160; classtype:attempted-recon; sid:30510; rev:2;) alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER OpenSSL TLSv1 heartbeat read overrun attempt"; flow:to_server,established; content:"|18 03 01|"; depth:3; dsize:>40; detection_filter:track by_src, count 3, seconds 1; metadata:policy balanced- ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160; classtype:attempted-recon; sid:30511; rev:2;) alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER OpenSSL TLSv1.1 heartbeat read overrun attempt"; flow:to_server,established; content:"|18 03 02|"; depth:3; dsize:>40; detection_filter:track by_src, count 3, seconds 1; metadata:policy balanced- ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160; classtype:attempted-recon; sid:30512; rev:2;) alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER OpenSSL TLSv1.2 heartbeat read overrun attempt"; flow:to_server,established; content:"|18 03 03|"; depth:3; dsize:>40;
  • 12.     detection_filter:track by_src, count 3, seconds 1; metadata:policy balanced- ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160; classtype:attempted-recon; sid:30513; rev:2;) alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER SSLv3 large heartbeat response - possible ssl heartbleed attempt"; flow:to_client,established; content:"|18 03 00|"; depth:3; byte_test:2,>,128,0,relative; detection_filter:track by_dst, count 5, seconds 60; metadata:policy balanced-ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160; classtype:attempted- recon; sid:30514; rev:3;) alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER TLSv1 large heartbeat response - possible ssl heartbleed attempt"; flow:to_client,established; content:"|18 03 01|"; depth:3; byte_test:2,>,128,0,relative; detection_filter:track by_dst, count 5, seconds 60; metadata:policy balanced-ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160; classtype:attempted- recon; sid:30515; rev:3;) alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER TLSv1.1 large heartbeat response - possible ssl heartbleed attempt"; flow:to_client,established; content:"|18 03 02|"; depth:3; byte_test:2,>,128,0,relative; detection_filter:track by_dst, count 5, seconds 60; metadata:policy balanced-ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160; classtype:attempted- recon; sid:30516; rev:3;) alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER TLSv1.2 large heartbeat response - possible ssl heartbleed attempt"; flow:to_client,established; content:"|18 03 03|"; depth:3; byte_test:2,>,128,0,relative; detection_filter:track by_dst, count 5, seconds 60; metadata:policy balanced-ips drop, policy security-ips drop, service ssl; reference:cve,2014-0160; classtype:attempted- recon; sid:30517; rev:3;) También se ha publicado un módulo de detección para Bro, disponible en la URL oficial: https://github.com/bro/bro/blob/topic/bernhard/heartbeat/scripts/policy/pro tocols/ssl/heartbleed.bro La correspondiente regla para Suricata: alert tls any any -> any any ( msg:"TLS HEARTBLEED malformed heartbeat record"; flow:established,to_server; dsize:>7; content:"|18 03|"; depth:2; lua:tls-heartbleed.lua; classtype:misc-attack; sid:3000001; rev:1;) Y el script necesario: function init (args) local needs = {} needs["payload"] = tostring(true) return needs end function match(args) local p = args['payload'] if p == nil then --print ("no payload") return 0 end
  • 13.     if #p < 8 then --print ("payload too small") end if (p:byte(1) ~= 24) then --print ("not a heartbeat") return 0 end -- message length len = 256 * p:byte(4) + p:byte(5) --print (len) -- heartbeat length hb_len = 256 * p:byte(7) + p:byte(8) -- 1+2+16 if (1+2+16) >= len then print ("invalid length heartbeat") return 1 end -- 1 + 2 + payload + 16 if (1 + 2 + hb_len + 16) > len then print ("heartbleed attack detected: " .. (1 + 2 + hb_len + 16) .. " > " .. len) return 1 end --print ("no problems") return 0 end return 0 MITIGAR  LOS  EFECTOS  DE  LA  AMENAZA   En última instancia, además de actualizar los paquetes afectados por la vulnerabilidad, será necesario gestionar los datos que hayan podido ser comprometidos por terceras personas, para evitar ataques posteriores. Debido a que la vulnerabilidad permite acceder a bloques de memoria en los servidores afectados, es posible que información como la detallada a continuación, se haya visto comprometida: • Credenciales (login y password) de usuarios del sistema • Claves privadas de los certificados TLS/SSL • Información sensible sobre servicios de terceros • Direcciones de memoria y contenido que podría permitir evadir mecanismos de mitigación de exploits   Solamente una vez actualizado y corregido el problema, se recomendará comenzar con el proceso de mitigación, que pueden afectar tanto a la seguridad de los usuarios, como a la del servidor y los certificados instalados.
  • 14.     CLAVES  PRIVADAS  DE  LOS  CERTIFICADOS  SSL   En la siguiente captura, podremos demostrar que es posible bajo ciertas condiciones, acceder a la clave privada SSL de forma parcial o total de un sistema vulnerable: Será necesario actuar de la siguiente manera en relación las claves privadas SSL del servidor afectado: 1. Revocar los certificados instalados, ya que un atacante podría haber podido acceder a ellas, y por tanto estar comprometidas 2. Generar nuevas claves y nuevos certificados para los servicios que que hayan estado expuestos 3. Mantener una copia de los certificados y claves antiguas, por si fuera necesario en un futuro acceder a información protegida por los mismos
  • 15.     CLAVES  Y  DATOS  DE  USUARIOS En lo referente a las claves y datos de los usuarios, y con el objetivo claro de salvaguardar la información, así como de generar confianza en los clientes, se recomienda regenerar las contraseñas de los usuarios o comunicarles que será necesario un cambio en la contraseña, forzándolo en el siguiente acceso a la plataforma. Esta acción es de vital importancia, ya que el acceso a todas estas credenciales es más factible en su totalidad en los fragmentos de memoria devueltos por el servidor afectado:   OTROS  SERVICIOS   Finalmente, deberemos tener en cuenta que la posible afectación de plataformas intermedias, como los VPN SSLs, han podido exponer a un atacante el tráfico en claro que se encontrara cursando durante la explotación del ataque, revelando credenciales de servicios de terceros, cookies, así como otra información sensible:   REFERENCIAS   Puede  encontrarse  más  información  de  utilidad  sobre  esta  vulnerabilidad  en  los   siguientes  enlaces  proporcionados:   • http://cert.inteco.es/securityAdvice/Actualidad/Avisos_seguridad_tecnicos /grave_vulnerabilidad_funcionalidad_heartbeat_openssl_20140  408   • https://cve.mitre.org/cgi-­‐bin/cvename.cgi?name=CVE-­‐2014-­‐0160   http://heartbleed.com   • http://www.openssl.org/news/secadv_20140407.txt  
  • 16.     • http://vrt-­‐blog.snort.org/2014/04/heartbleed-­‐memory-­‐disclosure-­‐ upgrade.html   • http://doc.emergingthreats.net/bin/search/Main/?search=heartbleed   http://www.blackploit.com/2014/04/vulnerabilidad-­‐critica-­‐en-­‐openssl-­‐ cve.html   • http://www.kb.cert.org/vuls/id/720951   • https://github.com/musalbas/heartbleed-­‐ masstest/blob/master/top1000.txt   • http://www.circl.lu/pub/tr-­‐21/