DROWN: Atacando SSL/TLS (IV)

1, DRWN-4
CapturaDROWN: Atacando SSL/TLS (3)

Si osfijáisen la <captura superior> (mensajes) donde aparece elasterisco– (*) no es una multiplicación normal (o habitual), se trata de una #multiplicación en aritmética modular# (en #RSA# todos los mensajes, –el mensaje original como el cifradose tratan comonúmeros enteros“). Por lo cuál y dado un #valor# al que llamamos <m0>, y del que tan sólo conocemos suvalor cifrado-, al que llamamos <c0>, elobjetivoes encontrar un número <s> de tal manera que al #multiplicar su valor cifrado# por <c0> nos devuelva un #valor# al que le vamos a llamar <c1>, correspondiente a un <m1> que es elresultadode #multiplicar# <m0> por <s>.

Dicho de otra manera, operando con el #valor# <cifrado> conseguimosmodificara nuestro gusto el #valor# “original“.

Exactamente, podemos pensar que <m0> es el #premastersecret# que hemoscapturadode lacomunicación– #SSLv3/TLS#, y elobjetivo es descubrir un valor <s> tal que nos lo convierta en un <m1> que sea adecuado paraactuarcomo #masterkey# en lanegociación– #SSLv2#. Veamos:

2, DRWN-4

En cuanto a todo esto y llegados aquí, ahora en lacomunicación– #SSLv2# el <atacante> elige un #valor# <s> cualquiera (al azar) y manda dentro del mensaje #ClientMasterKey# el #valor# <c1> con la certeza (y/o esperanza) de que sea un #masterkey# <válido> (recordad que la operación se hace a ciegas, sin conocer el #valor real# de <m1>), sabiendo que su mensaje descifrado” <m1> está ligado con <m0> (que recordad que es elobjetivofinal) a través de <s>.

No por fortuna precisamente para dicho <atacante>, si osfijáis en lanegociaciónde #SSLv2#, justo tras mandar el <paquete> #ClientMasterKey#, debe enviar un paquete” #ClientFinished#. En estepaquetese debeenviar el identificador de conexiónenviado por el <servidor> en #ServerHello#, <cifrado> con una de lasclaves simétricas que se hancalculado a partir de lostres valoresanteriores (exactamente, la denominada #clientwritekey#).

Como dicho <atacante> no tiene disponibilidad del #masterkey# (es lo quenecesita descubrirpara poderderivarel #premastersecret# de #SSLv3/TLS#), no podrácalcular– #clientwritekey# y por como resultado <no puede enviar un paquete> #ClientFinished# –válido-.

Por suerte para el <atacante>, trasenviar el paquete– #ClientMasterKey# y mientras continúa pensando cómo <cifrar el contenido> de #ClientFinished#, recibe de forma inesperada un <mensaje> #ServerVerify# sin tener que hacer nada.

·|Entonces ¿Qué ha pasado? 

3, DRWN-4

A pesar de que en los <ejemplos> queaparecenen laespecificaciónde #SSLv2# el camino seguido es elmostrado anteriormente-, la <especificación del paquete> #ServerVerify# puede ser entendida de varias maneras, ya que en <ningún momento> “especificaque se deba esperar al <paquete> #ClientVerify#, sino que dice que debe <enviarse> trasrecibirel #ClientMasterKey# y por lo cuál disponer de <todos los datos necesarios para generar> las “claves simétricas“. En concreto, parece ser que todas las <implementaciones> de #SSLv2# se basan en estafraseen vez debasarse en losejemplosdeflujo de paquetes-.

Entonces, aunque el <atacante> noenvíesu #ClientVerify# (como ya os comente antes <no puede calcularlo>), elservidorenvíasu #ServerVerify#.

Veamos pues, elflujo realpara este caso es:

4, DRWN-4

El hecho de que elservidorhayageneradouna <clave> #serverwritekey# a partir del #valor c1-# que el <atacante> ha enviado hace pensar que este #ataque# va porbuen camino“, ya que elatacante ha conseguido hallar unvalorde <s> correcto a la primera. Realmente una suerte.

Llegados a este punto (esta frase me suena) el <atacante> “cierra la conexiónporque ya dispone de toda la #información# que podía extraer de estanegociación-; el <paquete> #ServerVerify#. Estepaquete– “contieneel #valor# –challenge– <enviado por el cliente> en #ClientHello#, “cifrado con la clave” #serverwritekey#.

Dicho de otro modo, el <servidor> hadescifrado– #ClientMasterKey# y lo hautilizadopara <generar una clave> con la que ha <cifrado> un #valor# que elatacanteconoce.

Y llegados -aquí-.. más para el <próximo> #artículo#. Podéis “repasar” mientras (si os apetece) los -anteriores- #artículos#: ·|-1-|*|-2-|*|-3-|·

Salu2

giphy

Anuncios

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s