Este documento describe las supercookies basadas en HSTS, una técnica para rastrear usuarios a través de dominios alternando HTTP y HTTPS. Explica cómo funciona HSTS y cómo se pueden implementar supercookies usando la lista de hosts conocidos de HSTS. También evalúa contramedidas como vaciar la lista de HSTS o forzar HTTPS en dominios sospechosos, y presenta ASCOK, una extensión que detecta y neutraliza supercookies cambiando los identificadores de HSTS.
2. @javitobal
CONTENIDO
1. Introducción
2. HTTP Strict Transport Security (HSTS)
Especificación (RFC 6797)
Soporte
Implementación
3. Supercookies basadas en HSTS
Funcionamiento
4. Contramedidas para evitar las Supercookies
HSTS
Alternativas
5. ASCOK 1.0
Disclaimer:
ASCOK es,
aún, una
PoC:
Prueba de
Concepto
3. @javitobal
1. Introducción
¿por qué?
¿por qué
HSTS?
¿por qué
ASCOK?
Interés creciente por la aplicación de super-cookies
basadas en HSTS. Interés creciente por desarrollar
medidas protectoras frente a estas super-cookies
HSTS es un mecanismo que se está generalizando y que
está soportado por la mayoría de los navegadores web
actuales. HSTS es, además, “persistente” aunque se
eliminen las “cookies tradiciones” o se use el modo
anónimo (o “incógnito” o “privado”) del navegador
ASCOK (Anti Super CoOKies) es, actualmente, una
prueba de concepto que explora alternativas para
proteger al usuario de Internet del uso de las super-
cookies HSTS
4. @javitobal
2. HTTP Strict Transport Security (HSTS)
HSTS
aporta
seguridad
a HTTPS
El 3,2% de los
sites del Top
1M de Alexa
implementan
HSTS.
Sólo el 14%
usa HTTPS.
SIN HSTS
CON HSTS
https://www.owasp.org
5. @javitobal
2.1 HSTS. Especificación
RFC 6797
“[HSTS:]
mecanismo
que permite a
los sitios web
declararse a
sí mismos
como
accesibles
sólo vía
conexiones
seguras
[SSL/TLS]”
Los servidores web se autodefinen como HSTS:
“known HSTS host” (KHH)
Dos mecanismos:
• Lista precargada en el navegador
• Mediante cabecera HTTP en una respuesta a una
petición HTTPS (SSL/TLS)
A partir de este momento, el navegador utilizará
directamente conexión HTTPS sin pasar por HTTP.
Strict-Transport-Security:
max-age=31536000
[;includeSubdomains]
[;preload]
MAX-AGE en segundos: 0 -
31.536.000 (365 días)
6. @javitobal
2.2 HSTS. Soporte
HSTS está
soportado
por,
práctica-
mente, todas
las versiones
actuales de
los
navegadores
http://caniuse.com/#feat=stricttransportsecurity
7. @javitobal
2.3 HSTS. Implementación
Los navegadores analizados implementan HSTS de forma similar,
diferenciando la manera de registrar la lista de “known HSTS host”.
CHROME
chrome://
net-
internals
/#hsts
FIREFOX
%APPDATA%Mozil
laFirefoxProf
iles<profile-
id>SiteSecurit
yServiceState.t
xt
SAFARI
~/Library/Cooki
es/HSTS.plist
8. @javitobal
2.4 HSTS. Funcionamiento en FIREFOX
Por ejemplo,
Firefox cargar la
lista desde
fichero y la
actualiza
periódicamente
(o al terminar)
%APPDATA%
Mozilla
Firefox
Profiles
<profile-id>
SiteSecuritySer
viceState.txt
HOST FREQ LAST-ACCESS EXPIRE TIME SET INCLUDESUBDOMAINS
9. @javitobal
3. Supercookies basadas en HSTS
Sam Greenhalgh (@zapthedingbat)
es un experto en seguridad,
responsable de RadicalResearch,
que ha desarrollado esta
implementación de super-cookies
basadas en HSTS.
Esta herramienta permite
comprobar como, por ejemplo, la
“super-cookie” se mantiene en
modo “incógnito”.
http://www.radicalresearch.co.uk/lab/hstssupercookies
10. @javitobal
3.1 Supercookies basadas en HSTS. SET
[HTTP. Puerto: 80]
GET / HTTP/1.1
Host: 1-hsts-lab.radicalresearch.co.uk
...
HTTP/1.1 301 Moved Permanently
Location: https://1-hsts-
lab.radicalresearch.co.uk/
...
[HTTPS. Puerto: 443]
https://1-hsts-lab-
radicalresearch.co.uk/
GET /HTTP/1.1
Host: 1-hsts-lab.radicalresearch.co.uk
...
HTTP/1.1 200 OK
...
Strict-Transport-Security:
max-age=1493038952
...
lista de “known
HSTS host”
Añadir 1-hsts-lab-
radicalresearch.co
.uk
0x8187FE4A
11. @javitobal
3.2 Supercookies basadas en HSTS. RETRIEVE
TIME METHOD RESULT URL
0.384 GET 200 https://www.radicalresearch.co.uk/lab/hstssupercookies
0.151 GET (Cache) https://www.radicalresearch.co.uk/Content/Css/main.css
0.162 GET (Cache) https://www.radicalresearch.co.uk/Scripts/JsHead?v=
0.127 GET (Cache) https://www.radicalresearch.co.uk/Scripts/Js?v=
0.105 GET 200 https://www.radicalresearch.co.uk/Scripts/Lab/HstsSuperCookies?v=agvzTXbxVya8wtMOizZpSLPY_23PwgzcIRIIwiQ6DGc1
0.208 GET 200 http://www.radicalresearch.co.uk/lab/hstssupercookies
0.206 GET 304 http://www.radicalresearch.co.uk/Content/Css/main.css
0.104 GET (Cache) http://www.radicalresearch.co.uk/Scripts/JsHead?v=
0.099 GET (Cache) http://www.radicalresearch.co.uk/Scripts/Js?v=
0.104 GET (Cache) http://www.radicalresearch.co.uk/Scripts/Lab/HstsSuperCookies?v=agvzTXbxVya8wtMOizZpSLPY_23PwgzcIRIIwiQ6DGc1
0.153 GET 304 http://www.radicalresearch.co.uk/Content/Images/favicon-32x32.png
* GET * http://1f-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%270%27]
0.605 GET 200 https://1f-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%270%27]
0.730 GET 200 http://0-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%271%27]
* GET * http://1-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%272%27]
0.700 GET 200 http://2-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%273%27]
….
0.429 GET 200 http://1e-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27v%27]
* GET * http://1f-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27w%27]
0.427 GET 200 https://1-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%272%27]
0.416 GET 200 https://3-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%274%27]
0.626 GET 200 https://6-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%277%27]
0.694 GET 200 https://9-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27a%27]
0.603 GET 200 https://a-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27b%27]
0.590 GET 200 https://b-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27c%27]
0.524 GET 200 https://c-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27d%27]
0.568 GET 200 https://d-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27e%27]
0.549 GET 200 https://e-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27f%27]
0.558 GET 200 https://f-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27g%27]
0.652 GET 200 https://10-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27h%27]
0.613 GET 200 https://11-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27i%27]
0.559 GET 200 https://12-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27j%27]
0.648 GET 200 https://17-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27o%27]
0.614 GET 200 https://18-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27p%27]
0.214 GET 200 https://1f-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window[%27hsts%27]._[%27w%27]
* GET * http://www.radicalresearch.co.uk/Content/Images/favicon-32x32.png
0x8187FE4A
x32
x16
12. @javitobal
4. CONTRAMEDIDAS EVALUADAS (1)
Ventajas e
inconvenientes
de las
contramedidas
evaluadas
Eliminar todos los
“known HSTS
hosts” (KHH)
Vaciar la lista al
iniciar o cerrar el
navegador
Todas las sesiones
serían anónimas
Interoperabilidad
entre navegadores
Visitas consecutivas
Inseguro (sites
legitimos)
Impedir el registro
de nuevos “known
HSTS hosts”
Interceptar la
cabecera HSTS y
poner max-age= 0
Impediría añadir
nuevos KHH
Quitaría de la lista los
KHH preexistentes
Interoperabilidad
entre navegadores
Inseguro (sites
legitimos)
Interceptar HTTPS
Hacer caducar los
“known HSTS
hosts”
Interceptar la
cabecera HSTS y
poner max-age= 5
Se añadiría el KHH,
pero en la próxima
petición se revisaría
Inseguro (sites
legitimos)
Interceptar HTTPS
13. @javitobal
4.1 CONTRAMEDIDAS EVALUADAS (2)
Incluir todos los hosts del
dominio sospechoso como KHH
1. Interceptar la cabecera HSTS e
incluir “;includesubdomains” en
la respuesta del dominio de nivel
superior.
Sólo afecta a los dominios peligrosos
El servicio recibiría siempre como
cookie el valor “0xFF….FF”
En caso de “falso” positivo, el
servicio fallaría; e.g. hay un servidor
http (no https) con contenido útil
Interceptar HTTPS y generar una
petición adicional
Incluir todos los hosts del
dominio sospechoso como KHH
2. Forzar peticiones HTTPS a todos
los hosts de la super-cookie que no
están en la lista (KHH) para forzar
su inclusión.
Sólo afecta a los dominios peligrosos
El servicio recibiría siempre como
cookie el valor “0xFF….FF”
En caso de “falso” positivo, el
servicio podría verse afectado (muy
poco probable)
Un site con super-cookie podría
desarrollar una contra-contra-medida
14. @javitobal
5. ASCOK 1.0. Status: PoC. Funcionamiento
VERSIÓN ACTUAL
Extensión de desarrollador de Chrome. JavaScript.
1. DETECTAR LA SUPERCOOKIE
Analiza todas las peticiones HTTP/HTTPS realizadas.
Detecta peticiones consecutivas a hosts del mismo
(sub)dominio alternando HTTP y HTTPS
Alerta al encontrar un número mínimo de hosts que
cumplen la condición (configurable -20-)
[Descarta hosts “preload” o “includeSubdomains”]
2. CAMBIAR EL ID
Una vez detectada la posible super-cookie, se muestra un
mensaje al usuario y se le permite “neutralizar” la super-
cookie. Para ello, realiza peticiones HTTPS a todos los
hosts HTTP de la super-cookie (“la pone a 0xFF…FF”)
EXCLUSIVA
MUNDIAL!
16. @javitobal
5.2 ASCOK 1.0. Evolución futura
La versión actual de ASCOK 1.0 es una prueba de
concepto. Si es necesario, esta extensión deberá
evolucionar antes de ser distribuida:
• Soporte para mayor número de navegadores: Chrome,
Firefox, Safari, IOS, Android, etc.
• Funcionamiento y aspecto más profesional. Modo
“silencioso”: el usuario no percibe ninguna actividad.
• Distribuirlo en los “markets” oficiales. Firmar la
extensión, depurar, etc.
• Registro centralizado de sites que utilizan super-
cookies HSTS.
Pronto
aparecerán
en la red
implementa
ciones de
super-
cookies
basadas en
HSTS