Sei sulla pagina 1di 43

El ataque CRIMEN

Https: // HTTP seguro

HTTPS proporciona:

● Confidencialidad (cifrado),
● Integridad (Message Authentication Code),
● Autenticidad (certificados)
CRIMEN descifra el tráfico HTTPS para robar las cookies y secuestrar sesiones.
¿Cómo se puede llegar a ser víctima de un delito?

● Primera exigencia: el
atacante puede oler su
tráfico de red.
○ Comparte un (W) LAN.
○ Se han pirateado su router.

○ Él es su administrador de red,
proveedor de Internet o de
gobierno.
¿Cómo se puede llegar a ser víctima de un delito?

● Segundo requisito: que visita evil.com.


○ Hace clic en un enlace.
○ O navega por un sitio que no sea HTTPS.
inyección CRIMEN
C en el crimen es de compresión

● Transmitir o almacenar la misma cantidad de datos en un menor


número de bits.

● Cuando vea la compresión de los protocolos de Internet,


es probable que desinflarse.

● zlib y gzip son las dos envolturas desinflan más


populares.
La compresión es en todas partes

● compresión capa TLS.

● compresión de la capa de aplicación


○ la compresión de cabecera SPDY,
○ HTTP compresión gzip respuesta,
○ No estoy tan seguro si explotable: SSH, PPTP, OpenVPN, XMPP,
IMAP, SMTP, etc.

● Vamos a discutir la compresión TLS, SPDY y gzip


HTTP.
DESINFLAR

● La compresión sin pérdida reducción de los bits mediante la


eliminación de la redundancia.

● Mejor manera de aprender: RFC 1951 y puff.c.

● DEFLATE consta de dos algoritmos sub:


a. LZ77, y
segundo. La codificación de Huffman.
DESINFLAR: LZ77

● GRAMO oogle es tan g oogle y -> G oogle es tan g (-13, 5) y

● Analiza de entrada, busca cadenas repetidas y las reemplaza con


las copias de las referencias a la última aparición como (distancia,
longitud).

● parámetro más importante: tamaño de la ventana.


○ ¿Hasta dónde va a parar de nuevo a buscar la
repetición?
○ También llamado tamaño del diccionario.
DEFLATE: la codificación de Huffman

● Reemplazar bytes comunes con los códigos más cortos.

● Construir una tabla que asigna cada byte con un código


único.
○ tabla dinámica: construida en base a la entrada, los códigos pueden ser tan cortos
como 1 o 2 bits.
○ mesa fija: se especifica en el RFC, códigos más largos (7-9 bits), bueno para
Inglés o la entrada de corto.
R en el crimen es la relación

● La cantidad de redundancia del mensaje tiene.

● Más redundancia -> mejor relación de compresión ->


menor longitud petición.

● len (compresa (entrada + secreto))


○ de entrada es controlado por el atacante.
○ Si tiene algo de redundancia con el secreto, la duración será menor.

○ Idea: entrada de cambio y la longitud medida de adivinar secreto.


I en el crimen es información de fugas

● SSL / TLS no oculta petición / respuesta de longitud.


algoritmo CRIMEN

● len (cifrar (compresa (entrada + público + OBTENER / Twid = a

Anfitrión: twitter.com
secreto)) es de filtrada
User-Agent: Cromo Cookie:
○ Entrada: ruta URL
Twid = secreto
○ públicas: conocida encabezados .. . OBTENER / Twid
○ secreto: Galleta =s

● Algoritmo: Anfitrión: twitter.com


User-Agent: Cromo Cookie:
○ Hacer una conjetura, pida navegador para enviar una solicitud
Twid = secreto
con la ruta como conjetura.

○ Observar la longitud de la solicitud que se envió.

○ suposición correcta es cuando la longitud es

diferente que de costumbre.


Crimen en una diapositiva
ME en el crimen es la explotación de masas

● Trabajado para el 45% de los navegadores: Chrome y Firefox.

● Trabajado para todos los servidores SPDY: Gmail, Twitter, etc.

● Trabajado para 40% de los servidores SSL / TLS:


Dropbox, GitHub, etc.
ME en el crimen también es fácil

● JavaScript es opcional.

● Fast descifrado al estilo de Hollywood. El mejor algoritmo


requiere un promedio de 6 solicitudes para descifrar 1 byte
galleta.

● Trabajado para todas las versiones TLS y todos los


conjuntos de cifrado (AES y RC4).
El crimen es la nueva bestia

● BESTIA abrió el camino a la delincuencia


○ Fáciles de realizar un ataque de texto plano escogido contra HTTPS.

○ Usar ruta URL para descifrar la galleta.


○ Mover datos a través de la capa límite.

● ¿Qué hay de nuevo?


○ SSL longitud de registro de información comprimida de fugas, en lugar de modo CBC
con la vulnerabilidad IVs encadenados.
○ Nuevas fronteras: compresor de tamaño de ventana y tamaño de registro TLS, en
lugar de tamaño de bloque de bloque de cifrado.
Así longitud se filtró

● La longitud es el número de bytes,


pero DEFLATE da salida a bits.

● Longitud de la solicitud con un


partido debe tener una diferencia
de al menos 8 bits.

○ Una solicitud de 63 bits se ve exactamente


lo mismo que un poco 59- en el alambre.
Primer ataque: dos intentos

● Recordemos tamaño de la ventana: si la distancia desde la cadena actual a la


aparición anterior es mayor que el tamaño de la ventana, no será reemplazado.

● Tamaño de la ventana es esencialmente un límite de datos. Lo vamos a pasar a través de


ella!

● Para cada conjetura, enviar dos peticiones (de ahí dos tries)
○ REQ1 con la suposición dentro de la ventana de la cookie.

○ REQ2 es una permutación de REQ1, con la suposición exterior.


Dos intentos diferencia de longitud:

● Si la suposición es incorrecta:
○ guess no serán reemplazados por una referencia a la galleta ni REQ1
ni REQ2.
○ Por lo tanto, len (REQ1) == len (REQ2).

● Si la suposición es correcta:
○ guess será reemplazada por una referencia a la galleta REQ1.

○ adivinar costumbre ser sustituido en REQ2, porque es fuera de


la ventana.
○ por lo tanto, len (REQ1)! = len (REQ2).
dos intentos

● Oráculo:
○ Si len (REQ1) = len (REQ2), entonces la suposición es correcta!;

○ Es incorrecto lo contrario.

OBTENER / A B C D E F Twid = s <Acolchado> Cookie: Twid = secreta

OBTENER / Twid = s A B C D E F <Acolchado> Cookie: Twid = secreta


dos intentos

● Pros:
○ Trabajar para la compresión TLS, SPDY y gzip HTTP también.

○ Falso positivo gratuita con algunos trucos.

● Contras
○ Requerir S (W) las solicitudes, en el que W es charset galleta.
○ Pueden fallar cuando cookie contiene secuencias repetidas.
○ Dependerá de la comprensión profunda de DESINFLE y de zlib deflate.c
para crear una diferencia de 8 bits.
SPDY

● Un nuevo protocolo de red abierta para el transporte


de contenido web.

● De manera similar a HTTP, con objetivos concretos para reducir la


latencia de carga página Web y mejorar la seguridad en la web.

● SPDY logra latencia reducida a través


compresión, multiplexación, y priorización.
SPDY

● Estandarizado: seleccionado por IETF como el punto de


partida para HTTP 2.0.

● Servidores: Google, Twitter, Wordpress, F5 Networks,


Cloudflare, httpd Apache, Nginx, etc.

● Clientes: Chrome, Firefox, Opera (beta), etc.


Compresión en SPDY

● DEFLATE se utiliza para comprimir las cabeceras.

● SPDY utiliza el mismo contexto de compresión para todas las


peticiones en una dirección en una conexión.

○ cadenas repetidas en las nuevas solicitudes pueden ser sustituidas por referencias a
esas peticiones.
Delictivas para SPDY

● El contexto de compresión compartida es una espada de dos


filos
○ Mejor compresión.
○ cabeceras comprimidas subsiguientes son tan pequeñas que zlib decide
utilizar fijo tabla de Huffman.

● Recordemos que fija la tabla de Huffman utiliza códigos de 7-9 bits. Por
lo tanto, es más fácil tener una diferencia de 8 bits.
Delictivas para SPDY

1. Enviar una solicitud a "reset" el contexto de compresión (es


decir, preparar el diccionario).

2. Enviar una nueva solicitud con una suposición equivocada para obtener la
longitud de la base.

3. Para cada conjetura, enviar una solicitud. Utilice la longitud


de la base de detectar posibles aciertos.
Delictivas para SPDY

OBTENER / aatwid = a HTTP / 1.1 \ r \ n (-84, 5) a bis (-20, 5) a (-84, 71)


Anfitrión: twitter.com \ r \ n User-Agent:

Cromo \ r \ n Cookie: Twid = secreto \ R \ n

OBTENER / bbtwid = b HTTP / 1.1 \ r \ n (-84, 5) bb (-20, 5) b (-84, 71)


Anfitrión: twitter.com \ r \ n User-Agent:

Cromo \ r \ n Cookie: Twid = secreto \ R \ n


Delictivas para SPDY

OBTENER / rrtwid = r HTTP / 1.1 \ r \ n (-84, 5) rr (-20, 5) r (-84, 71)


Anfitrión: twitter.com \ r \ n User-Agent:

Cromo \ r \ n Cookie: Twid = secreto \ R \ n

OBTENER / sstwid = s HTTP / 1.1 \ r \ n (-84, 5) ss (-20, 6) (-84, 71)


Anfitrión: twitter.com \ r \ n User-Agent:

Cromo \ r \ n Cookie: Twid = secreto \ R \ n


Delictivas para SPDY

● Pros
○ Aún O (W), pero con una constante menor que dos intentos.

○ Muy rápido, gracias a SPDY.


○ También falsa libre positivo.

● Contras
○ No se puede enviar muchas peticiones a la vez si servidor establece un límite
máximo.
○ Los diferentes navegadores tienen diferentes implementaciones de compresión de
cabeceras SPDY.
Delictivas para SPDY

● Solución del problema


○ Chrome y Firefox tienen desactivada la compresión de
cabecera en sus implementaciones SPDY.

● SPDY / 4 hará CRIMEN irrelevante (con


suerte).
Compresión en TLS

● Se especifica en RFC 3749 (DESINFLE) y RFC 3943


(LZS).

● Cromo (NSS), OpenSSL, GnuTLS, etc. implementar


desinflarse.

● Si los datos es mayor que el máximo tamaño de registro (16K), que


se divide-then-comprimir cada registro de forma independiente (en
un contexto zlib separada).
Delictivas para compresión TLS: 16K-1

● 16K es esencialmente otro límite. elegido-ataque límite de BEAST


ataca de nuevo!

● Hacer una petición tan grande que se dividirá en dos registros de tal manera que:

○ 1er registro: GET / <acolchado> Cookie: Twid = s

○ Segundo registro: ecret

● Simular la compresión de la primera registro para cada candidato.

● Enviar la solicitud, obtener la longitud comprimida de su primera grabación. Utilizarla


para seleccionar posibles bytes correctos.
16K-1
16K-1 POC
next_byte def (galleta, conocido, alfabeto = BASE64):
candidatos = lista (alfabeto), mientras
que len (candidatos) = 1:
URL = random_16K_url (conocido)
record_lens = Query (URL) longitud =
record_lens [0]
registro = "GET /% s% s% s" (url, REQ, conocidos) buenas = []

para C en los candidatos:

si len (comprimir (registro + c)) == longitud:


good.append (c) Los

candidatos = buenos candidatos de

retorno [0]
Delito por compresión TLS

● Pros
○ Sólo requieren O (logW) peticiones. Puede elegir entre la compresión
sin conexión ya o mayor número de solicitudes en línea.

○ Falso positivo libre.


○ algoritmo de compresión independiente.

● Contras
○ Mientras que el despliegue del lado del servidor es del 40%, Chrome fue el
único navegador que admite la compresión TLS.
○ zlib versiones en víctima y atacante debe ser el mismo.
Delito por compresión TLS

● Solución del problema


○ Chrome ha desactivado la compresión en su ClientHello.
HTTP compresión gzip respuesta

● La compresión más popular en Internet.


Delito por el HTTP gzip

● Requisito: El servidor hace eco de alguna entrada del cliente en


la respuesta (por ejemplo, / search? Q = crimeN0tF0uddd?).

● Utilice la entrada se hizo eco para extraer PII o ficha XSRF


incrustado en la respuesta.

● Dos intentos pueden trabajar, pero no hemos probado todavía.


"Creemos"

● compresión TLS puede resucitar en un futuro próximo

○ "Los navegadores no son los únicos clientes TLS!"

● gzip HTTP puede ser un problema más grande que tanto la


compresión SPDY y TLS
○ Si el control de la red, a continuación, una muestra XSRF es tan buena como, si
no mejor, una cookie de sesión.

● Recuerde: es la compresión en todos lados.


Gracias

● Google, Mozilla, y Dropbox.

● Dan Boneh, Agustin Gianni, Kenny Paterson, Marsh


Ray, Eduardo Vela y muchos otros amigos.

● EkoParty xD xD xD !!
Trabajo relacionado

● John Kelsey, La compresión y la fuga de información de


texto plano.

● Adam Langley, enviar a la lista de correo SPDY.


¿Preguntas?
https://twitter.com/julianor o thaidn@gmail.com

Potrebbero piacerti anche