Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
cccccccccccccccccc
CyberCamp.es
HSTS & HPKP: Los Batman y Robinde la seguridad web
Pablo González @pablogonzalezpe
Carmen Torrano@ctorranog
Agenda
Introducción HPKP HSTS Ataques Conclusiones
2
3
Whoami
Pablo González
Ingeniero Informática, URJC. Technical Manager en Telefónica. Docente en:
UEM, UOC, UCLM, URJC, UNIR, ESIC Flu project & hackersClub Libros 0xWord
Got Root, Metasploit para pentesters, Pentesting con Kali, Pentesting con Powershell Ethical Hacking
@pablogonzalezpe
4
Whoami
Carmen Torrano Giménez.
Doctora en Informática, UC3M, CSIC. Senior Security Researcher en 11Paths
(Telefónica). Docente en UCLM.
@ctorranog
5
Introducción
6
HSTS & HPKP
TLS/SSL
HSTS & HPKP
7
HPKP
8
Problemática
Detección de la suplantación de autoridadesintermedias en una cadena de certificación.
Por defecto los navegadores no detectan si lacadena de confianza se ha modificado, puesto quesolo comprueban la validez formal de lasautoridades certificadoras y sus certificados. En elcaso de robo de certificados o conexionesintermedias de terceros de confianza, la conexiónsería aceptada sin problemas.
Compromiso de la CA Comodo, Diginotar, TurkTrust,etc.
9
Cadena de certificación
10
Certificate pinning
Para detectar cuándo una cadena de confianza ha sido modificada.
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)
dominio.com CA A
CA B - certificado de dominio.com -> detección
11
¿Qué es HPKP?
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.
12
¿Qué es HPKP?
Permite que el navegador recuerde el pin esperadodel certificado de un dominio.
Cuando se accede al dominio, el servidor debepresentar una cadena de certificación que incluya almenos uno de los pines almacenados para esedominio.
De esta manera es posible detectar modificacionesen la cadena de certificación, así como detectarataques MiTM debidos a CA comprometidas.
13
¿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.
14
La primera conexión
El momento de la primera redirección es unaventana de oportunidad para un potencial atacante.
Esta debilidad se llama Trust On First Use, y se basaen que el protocolo debe dar por buena la primeraconexión usada, y la recuerda como referente enfuturos diálogos entre los implicados.
Misma casuística cuando max-age expira.
15
Preload
Precisamente, para evitar este punto débil variosnavegadores cuentan con una lista de preloaded.
16
Directivas
pin-sha256. Contiene el hash SHA-256 en base 64 del campo Subject Public 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.
17
Directivas
max-age. El número de segundos, a partir de la fechaactual, que el navegador debe almacenar la informaciónsobre el certificado proporcionada en el campo anterior.
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 eneste campo. La URI indicada no debería encontrarse en elmismo dominio, ya que en caso de fallo con la conexiónoriginal, no podrá resolverse el error. Esta funcionalidadestá implementada solo a partir de Chrome 46.
18
Directivas
Public Key Pins: pin-sha256="d+Nzzj/kBbW36XgzHd3iQz7lzmMFM7UedINRmVf+ie4="; pin-sha256="U7ZybtJ2wCBeg7QSvWZppKSa06gOYkSCIZkaR2ft3DM="; pin-sha256="JNFyeZHEFDpGO41RvpVRuQY1Oi19xtLFeF99j0EYduE="; max-age=15768000; includeSubDomains
19
Cómo puedo consultar las cabeceras
Curl --head <dominio>
20
Cálculo del pin
El pin se calcula concatenando SubjectPublicKey yla SubjectPublicKeyInfo del certificado, calculandoel hash sha256 de la cadena resultante, ycodificándolo en base64.
Por tanto, se eluden otros datos del certificado yextensiones X.509.
21
Cálculo del pin. Ejemplo
22
Cálculo del pin. Ejemplo
23
¿Cómo puedo implementarlo en mi servidor?
Apache Añadir a la configuración del servidor (necesario
habilitar mod_headers) Header always set Public-Key-Pins "pin-
sha256=\"base64+primary==\"; pin-sha256=\"base64+backup==\"; max-age=5184000; includeSubDomains"
24
¿Cómo puedo implementarlo en mi servidor?
Nginx Añadir esta línea (necesario habilitar
ngx_http_headers_module). Insertando pines en pin-sha256 add_header Public-Key-Pins 'pin-sha256="base64+primary=="; pin-sha256="base64+backup=="; max-age=5184000; includeSubDomains' always;
25
¿Cómo puedo implementarlo en mi servidor?
Lighttpd Insertando pines en pin-sha256. Requiere cargar el
módulo mod_setenv server.module (server.modules+= (“mod_setenv”) ) setenv.add-response-header = ( "Public-Key-Pins" => "pin-
sha256=\"base64+primary==\"; pin-sha256=\"base64+backup==\"; max-age=5184000; includeSubDomains")
26
¿Cómo puedo implementarlo en mi servidor?
IIS Añadir este código
<system.webServer> ... <httpProtocol> <customHeaders> <add name="Public-Key-Pins" value="pin-sha256="base64+primary=="; pin-sha256="base64+backup=="; max-age=5184000; includeSubDomains" /> </customHeaders> </httpProtocol> ... </system.webServer>
27
Consideraciones de seguridad
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.
28
Implementación en servidores
Shodan "Public-Key-Pins" port:80, 8080, 443, 8443 "Strict-Transport-Security" port:80, 8080, 443, 8443
29
Implementación en navegador
Chrome 46.0 Firefox 35 (preloaded sites en Firefox 32) EMET/Internet Explorer: no soportado Firefox Mobile (Gecko) 35
30
Implementación en navegador
Firefox C:\Users\[user]\AppData\Roaming\Mozilla\Firefox\Profiles\
[profile]\SiteSecurityServiceState.txt
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 delsistema en contraste con el valor almacenado en la terceracolumna.
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 visitarealizada. Este dato se actualiza siempre con cada petición.
31
Implementación en navegador
4. Separados por ‘,’:□ 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).
□ 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.
□ 4.3 includeSubdomains□ 4.4 Array de pines recibido de forma concatenada separados por
‘=’.
32
Pin Patrol
Instalación Visualización. ¿Qué dominios has visitado que
tengan HSTS y HPKP?
33
Implementación en navegador
Chrome 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.
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.
34
Implementación en navegador
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. 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 estacabecera.
chrome://net-internals/hsts#hsts
35
HSTS
36
¿Qué es HSTS?
HSTS (HTTP Strict Transport Security) es unmecanismo de seguridad que se fuerza desde elservidor web a los navegadores y que permiteasegurar que las conexiones que se realizan desdeel navegador al sitio web se realizarán siempre através de un canal seguro con TLS/SSL Si no se hiciera ese forzado, durante esa primera conexión un
atacante en medio podría hacer una manipulación de todo eltráfico entre el navegador y el atacante para que la conexión enese tramo fuera sin cifrar, y el cifrado se hiciera entre la máquinadel atacante y el servidor original que usa HTTPs
Es decir, sería (potencialmente) vulnerable a SSL Strip v1 (2009)
37
¿Qué es HSTS?
Muchos sitios, comúnmente utilizados, implementan HSTS en sus servidores (Paypal, Gmail, Twitter, Facebook, Outlook…)
El navegador debe soportarlo
38
¿Qué es HSTS?
39
¿Qué es HSTS?
El problema de la primera petición Quedaba el problema generado en la primera petición Cuando se instala un navegador, es decir, si nosotros
instalamos Mozilla Firefox o Google Chrome, la primera vez quehiciéramos una petición a gmail.com, esta petición iría por HTTPhasta ser redirigido al servidor por HTTPs con un redirect yrecibir la cabecera HSTS para establecer la política deseguridad
Para resolverlo se habilitó una “lista precargada” de dominios□ Al instalar el navegador, éste ya tiene una lista precargada a los que se
debe conectar siempre por HTTPs
40
SSL Strip v2 (2014)
También conocido como SSL Strip + MITMf (framework) implementa el plugin de SSL
Strip +
41
SSL Strip v2 (2014)
42
SSL Strip v2 (2014)
Como se puede ver en la imagen, el objetivo esquitar la cabecera HSTS para que la víctima (sunavegador) 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é
43
Ataques de tiempo (NTP Protocol)
José Selvi
Si modificamos la hora de los equipos se caducan las entradas HSTS en el navegador
Ataque: Delorean
44
Ataques de tiempo (NTP Protocol)
Esquema: ARP Spoofing SSL Strip 2 Delorean: Interceptar peticiones NTP de las máquinas y
modificarlas (adelantar la hora varios años)□ Bypass HSTS
45
Ataques de tiempo (NTP Protocol)
46
Conclusiones
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.
Gracias porsu atención