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

Post on 28-May-2020

5 views 0 download

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

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=&quot;base64+primary==&quot;; pin-sha256=&quot;base64+backup==&quot;; 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