HSTS & HPKP. Los Batman y Robin de la seguridad web

53
29-10-2016 Pablo González Carmen Torrano Giménez Navaja Negra 2016 HSTS & HPKP: Los Batman y Robin de la seguridad web

Transcript of HSTS & HPKP. Los Batman y Robin de la seguridad web

29-10-2016

Pablo González

Carmen Torrano Giménez

Navaja Negra 2016

HSTS & HPKP:

Los Batman y Robin

de la seguridad web

• Introducción

• HPKP

• HSTS

• Ataques

• Ejercicios prácticos

• Conclusiones

Índice

• Pablo González

Ingeniero Informática, URJC.

Technical Manager en Telefónica.

Profesor en UCLM.

Flu project

Libros 0xWord

[email protected]

@pablogonzalezpe

Presentación

• Carmen Torrano Giménez.

Doctora en Informática, UC3M, CSIC.

Senior Security Researcher en 11Paths (Telefónica).

Profesora en UCLM.

[email protected]

@ctorranog

Presentación

Introducción

HSTS & HPKP

TLS/SSL

HSTS & HPKP

• Por defecto los navegadores no detectan si la cadena de confianza se ha modificado, puesto que solo comprueban la validez formal de las autoridades certificadoras y sus certificados. En el caso de robo de certificados o conexiones intermedias de terceros de confianza, la conexión sería aceptada sin problemas.

• Compromiso de la CA Comodo, Diginotar, TurkTrust, etc.

Problemática

Cadena de certificación

La idea es asociar inequívocamente un certificado o conjunto de certificados a un dominio concreto (por ejemplo, almacenando certificados presentes en una cadena de certificación).

www.dominio.com CA A

CA B - certificado de dominio.com -> alerta.

Certificate pinning

• RFC 7469 de abril de 2015 (borrador febrero 2014).

• Es un protocolo de seguridad que permite evitar que un atacante suplante utilizando certificados fraudulentos.

• Es necesario que se implemente en el servidor y cliente.

¿Qué es HPKP?

• Permite que el navegador recuerde el pin esperado del certificado de un dominio. El servidor debe presentar unacadena de certificación que incluya al menos uno de los pines almacenados para ese dominio.

• De esta manera es posible detectar modificaciones en la cadena de certificación, así como detectar ataques MiTMdebidos a CA comprometidas.

¿Qué es HPKP?

• Para ello, el servidor introduce la cabecera “Public-Key-Pins” en la que el dominio envía información al navegador sobre sus certificados y política de pinning.

¿Qué es HPKP?

• El momento de la primera redirección es una ventana de oportunidad para un potencial atacante.

• Esta debilidad se llama Trust On First Use, y se basa en que el protocolo debe dar por buena la primera conexión usada, y la recuerda como referente en futuros diálogos entre los implicados.

• Misma casuística cuando max-age expira.

La primera conexión

• Precisamente, para evitar este punto débil varios navegadores cuentan con una lista de preloaded sites.

• Los dueños de los dominios solicitan que siempre se navegue por ellos mediante HTTPS (incluso desde el primer momento).

• Petición de inclusión: https://hstspreload.appspot.com + proceso manual de revisión.

• Lista de sitios aceptados:

https://chromium.googlesource.com/chromium/src/+/master/net/http/transport_security_state_static.json

Preload

• pin-sha256. Contiene el hash SHA-256 en base 64 del campo SubjectPublic Key Information (SPKI) del certificado digital que el servidor desea pinear.

• RFC: al menos dos: uno de ellos, al menos, debe encontrarse en la cadena de certificación que ofrece el servidor. Otro de ellos, no, y se considerará de respaldo.

Directivas

• max-age. El número de segundos, a partir de la fecha actual, que el navegador debe almacenar la información sobre el certificado proporcionada en el campo anterior.

Directivas

• includeSubdomains (opcional).

• report-uri (opcional). En caso de error en la verificación, se envía una petición POST a la URI que se indique en este campo. La URI indicada no debería encontrarse en el mismo dominio, ya que en caso de fallo con la conexión original, no podrá resolverse el error. Esta funcionalidad está implementada solo a partir de Chrome 46.

Directivas

Directivas

Public Key Pins:pin-sha256="d+Nzzj/kBbW36XgzHd3iQz7lzmMFM7UedINRmVf+ie4="; pin-sha256="U7ZybtJ2wCBeg7QSvWZppKSa06gOYkSCIZkaR2ft3DM="; pin-sha256="JNFyeZHEFDpGO41RvpVRuQY1Oi19xtLFeF99j0EYduE="; max-age=15768000; includeSubDomains

• Curl --head <dominio>

Cómo puedo consultar las cabeceras

• El pin se calcula concatenando SubjectPublicKey y la SubjectPublicKeyInfo del certificado, calculando el hash sha256 de la cadena resultante, y codificándolo en base64. Por tanto, se eluden otros datos del certificado y extensiones X.509.

Cálculo del pin

Cálculo del pin. Ejemplo

Cálculo del pin. Ejemplo

Añadir a la configuración del servidor (necesario habilitar mod_headers)

¿Cómo puedo implementarlo en mi servidor?Apache

Header always set Public-Key-Pins "pin-sha256=\"base64+primary==\"; pin-sha256=\"base64+backup==\"; max-age=5184000; includeSubDomains"

Añadir esta línea (necesario habilitar ngx_http_headers_module). Insertando pines en pin-sha256.

¿Cómo puedo implementarlo en mi servidor?Nginx

add_header Public-Key-Pins 'pin-sha256="base64+primary=="; pin-sha256="base64+backup=="; max-age=5184000; includeSubDomains' always;

Insertando pines en pin-sha256. Requiere cargar el módulo mod_setenv server.module (server.modules += (“mod_setenv”) )

¿Cómo puedo implementarlo en mi servidor?Lighttpd

setenv.add-response-header = ( "Public-Key-Pins" => "pin-sha256=\"base64+primary==\"; pin-sha256=\"base64+backup==\"; max-age=5184000; includeSubDomains")

Añadir este código

¿Cómo puedo implementarlo en mi servidor?IIS

<system.webServer> ... <httpProtocol> <customHeaders> <add name="Public-Key-Pins" value="pin-sha256=&quot;base64+primary==&quot;; pin-sha256=&quot;base64+backup==&quot;; max-age=5184000; includeSubDomains" /> </customHeaders> </httpProtocol> ... </system.webServer>

• El RFC especifica que los navegadores deben descartar las cabeceras HPKP cuando se envían a través de canales inseguros. Sin embargo, no es una práctica habitual.

Consideraciones de seguridad

"Public Key Pinning" port:80, 8080, 443, 8443

"Strict Transport Security" port:80, 8080, 443, 8443

Implementación en servidoresShodan

• Chrome 46.0

• Firefox 35 (preloaded sites en Firefox 32)

• EMET/Internet Explorer: no soportado

• Firefox Mobile (Gecko) 35

Implementación en navegador

• C:\Users\[user]\AppData\Roaming\Mozilla\Firefox\Profiles\[profile]\SiteSecurityServiceState.txt

Implementación en navegadorFirefox

• Se trata de un fichero de texto plano tabulado.

• 1. Dominio: protocolo

• 2. Score. Inicial: 0. + 1 por cada día posterior que se visite el dominio, tomando como referencia la fecha y hora actual del sistema en contraste con el valor almacenado en la tercera columna.

Implementación en navegadorFirefox

• 3. Número de días transcurridos desde el 1 de enero de 1970 (Epoch) hasta la fecha del sistema de la última petición o visita realizada. Este dato se actualiza siempre con cada petición.

Implementación en navegadorFirefox

• 4. Separados por ‘,’:

o 4.1 mozilla:pkix:time. Se trata del tiempo de expiración de la cabecera (max-age) en Epoch extendido (en milisegundos desde el 1 de enero de 1970).

o 4.2 SecurityPropertyState. Desactivado (SecurityPropertyUnset, 0), activado (SecurityPropertySet, 1) o está siendo sobreescrito(SecurityPropertyKnockout, 2). Esta información es para uso interno del navegador y no se encuentra documentada.

o 4.3 includeSubdomains

o 4.4 Array de pines recibido de forma concatenada separados por ‘=’.

Implementación en navegadorFirefox

• Instalación

• Visualización. ¿Qué dominios has visitado quetengan HSTS y HPKP?

Pin Patrol

• Fichero Json

• C:\Users\[user]\AppData\Local\Google\Chrome\User Data\Default\TransportSecurity

• Almacena un hash del dominio para mantener cierta confidencialidad. Dificulta que se conozca el dominio si solo se posee el hash.

Implementación en navegadorChrome

• dynamic_spki_hashes lista de hashes de certificado del dominio (SKPI).

• Expiry: fecha de expiración de la cabecera HSTS o HPKP.

• Mode: valor “force-https”, que indica que el comportamiento esperado para ese dominio es forzar el acceso por HTTPS.

Implementación en navegadorChrome

• dynamic_spki_hashes_expiry: fecha en la que expiran los SPKI.

• Pkp_include_subdomains: incluir subdominios de HPKP o no.

• Pkp_observed: recoge el momento en el que se han observado los pines, es decir, cuándo se ha visitado una página.

Implementación en navegadorChrome

• Sts_include_subdomains: subdominios de HSTS.

• Sts_observed: es el momento en el que se han observado los pines, es decir, cuándo se ha visitado una página con esta cabecera.

• chrome://net-internals/hsts#hsts

Implementación en navegadorChrome

• HSTS (HTTP Strict Transport Security) es un mecanismo de seguridad que se fuerza desde el servidor web a los navegadores y que permite asegurar que las conexiones que se realizan desde el navegador al sitio web se realizarán siempre a través de un canal seguro con TLS/SSL

¿Qué es HSTS?

• Si no se hiciera ese forzado, durante esa primera conexión unatacante en medio podría hacer una manipulación de todo eltráfico entre el navegador y el atacante para que la conexiónen ese tramo fuera sin cifrar, y el cifrado se hiciera entre lamáquina del atacante y el servidor original que usa HTTPs

• Es decir, sería (potencialmente) vulnerable a SSL Strip v1(2009)

¿Qué es HSTS?

• Muchos sitios, comúnmente utilizados, implementan HSTS en susservidores (Paypal, Gmail, Twitter, Facebook, Outlook…)

• El navegador debe soportarlo

¿Qué es HSTS?

¿Qué es HSTS?

• El problema de la primera peticióno Quedaba el problema generado en la primera petición

o Cuando se instala un navegador, es decir, si nosotros instalamosMozilla Firefox o Google Chrome, la primera vez que hiciéramos unapetición a gmail.com, esta petición iría por HTTP hasta ser redirigidoal servidor por HTTPs con un redirect y recibir la cabecera HSTS paraestablecer la política de seguridad

o Para resolverlo se habilitó una “lista precargada” de dominios

� Al instalar el navegador, éste ya tiene una lista precargada a losque se debe conectar siempre por HTTPs

¿Qué es HSTS?

• También conocido como SSL Strip +

• MITMf (framework) implementa el plugin de SSL Strip +

SSL Strip v2 (2014)

SSL Strip v2 (2014)

• Como se puede ver en la imagen, el objetivo es quitar la cabecera HSTS para que la víctima (su navegador) no conozca este hecho

• ¿Qué ocurre con la lista precargada?

• Se comporta como una caché

• Es una lista dinámica

• Si el tiempo pasa, la entrada puede caducar

• Hay que tener en cuenta que cada vez que se accede a un sitio “se actualiza” dicha caché

SSL Strip v2 (2014)

• José Selvi

• Si modificamos la hora de los equipos se caducan las entradas HSTS en el navegador

• Ataque: Delorean

Ataques de tiempo (NTP Protocol)

• Esquema:

oARP Spoofing

o SSL Strip 2

oDelorean: Interceptar peticiones NTP de las máquinas y modificarlas (adelantar la hora varios años)

� Bypass HSTS

Ataques de tiempo (NTP Protocol)

Ataques de tiempo (NTP Protocol)

• riseup.net

• github.com

• coinbase.com

• mozilla.org

• defcon.org

• Google.com

• accounts.google.com

• blockchain.info

• bitcoin.org

• dropbox.com

• en.wikipedia.org

Juego: Dominios

• es.noticias.yahoo.com

• es.wikipedia.org

• es.yahoo.com google

• www.yahoo.es

• evernote.com

• f5.com

• ipsec.pl

• lastpass.com

• itunes.apple.com

• login.windows.net

• mail.yahoo.com

• outlook.office365.com

• telegram.org

• vimeo.com

• www.airbnb.es

• www.coursera.org

• www.cryptool.org

• www.ingdirect.es

• www.kali.org

• www.spotify.com

• www.w3.org

• www.torproject.org

• Implantación poco extendida.

• Hay que utilizarlos correctamente para que protejan bien. Seguir las recomendaciones del RFC.

• No utilizarlos con HTTP (puerto 80, 8080).

• Utilizar preload e includeSubdomains.

• Por parte de los navegadores, todavía existen muchos que no soportan estas cabeceras, especialmente, entre dispositivos móviles.

• Susceptibles de ataque/debilidades.

• Aún queda mucho trabajo por hacer para una correcta protección, además de concienciación de su uso.

Conclusiones

• MUCHAS GRACIAS!

¡Síguenos en nuestras redes sociales y entérate de todo!

2016 © Telefónica Digital España, S.L.U. Todos los derechos reservados.La información contenida en el presente documento es propiedad de Telefónica Digital España, S.L.U. (“TDE”) y/o de cualquier otra entidad dentro del Grupo Telefónica o sus licenciantes. TDE y/o cualquier compañía del GrupoTelefónica o los licenciantes de TDE se reservan todos los derechos de propiedad industrial e intelectual (incluida cualquier patente o copyright) que se deriven o recaigan sobre este documento, incluidos los derechos de diseño,producción, reproducción, uso y venta del mismo, salvo en el supuesto de que dichos derechos sean expresamente conferidos a terceros por escrito. La información contenida en el presente documento podrá ser objeto demodificación en cualquier momento sin necesidad de previo aviso.La información contenida en el presente documento no podrá ser ni parcial ni totalmente copiada, distribuida, adaptada o reproducida en ningún soporte sin que medie el previo consentimiento por escrito por parte de TDE.El presente documento tiene como único objetivo servir de soporte a su lector en el uso del producto o servicio descrito en el mismo. El lector se compromete y queda obligado a usar la información contenida en el mismo parasu propio uso y no para ningún otro.TDE no será responsable de ninguna pérdida o daño que se derive del uso de la información contenida en el presente documento o de cualquier error u omisión del documento o por el uso incorrecto del servicio o producto. Eluso del producto o servicio descrito en el presente documento se regulará de acuerdo con lo establecido en los términos y condiciones aceptados por el usuario del mismo para su uso.TDE y sus marcas (así como cualquier marca perteneciente al Grupo Telefónica) son marcas registradas. TDE y sus filiales se reservan todo los derechos sobre las mismas.

www.elevenpaths.com