lunes, 12 de agosto de 2013

Ataque BREACH, un toque de atención a SSL/TLS/Cualquier tipo de cifrado realmente

Estando desconectado temporalmente del tema de la seguridad, un Security Advisory de Django me volvió a traer al mundo de los vivos. El tema viene siendo éste:

https://www.djangoproject.com/weblog/2013/aug/06/breach-and-django/

Donde avisan del ataque BREACH. Por supuesto, me puse a indagar sobre el tema y echar un ojo al PAPER que presentan, ya que me sorprendió ver que TLS/SSL (y realmente cualquier tipo de cifrado!) eran vulnerables al ataque.

El ataque se basa en uno anterior, CRIME, basado en la comprensión TLS, que no es demasiado común. Ésto va más allá usando la comprensión básica que va sobre HTTP, es decir, antes de realizar ningún tipo de cifrado del tráfico. Es muy común en cualquier tipo de web, tanto usando HTTP como HTTPS, usar algún tipo de compresión para ahorrar ancho de banda, eligiendo muchas veces la compresión gzip.

El ataque tiene varios requisitos:
  • Un servidor que use compresión a nivel HTTP (cae de cajón)
  • Que aparezca algún parámetro introducido por el usuario en el body de la respuesta HTTP
  • Que haya algo "interesante" en el body de la respuesta (un token CSRF, por ejemplo). Algo secreto que queremos robar.
Y ahora empieza la gracia. Si tenemos una petición tal que:

GET /owa/?ae=Item&t=IPM.Note&a=New&id=canary=<guess> 

Y nos devuelve algo como (esto lo hace Outlook Web Access):

<span id=requestUrl>https://malbot.net:443/owa/forms/
basic/BasicEditMessage.aspx?ae=Item&amp;t=IPM.Note&
amp;a=New&amp;id=canary=<guess></span>
...
<td nowrap id="tdErrLgf"><a href="logoff.owa?
canary=d634cda866f14c73ac135ae858c0d894">Log
Off</a></td>


Guess sería lo que nosotros inyectamos. Gzip intenta buscar coincidencias de palabras para comprimir la respuesta. Por lo tanto comprimirá canary= al tenerlo en dos partes (en el ejemplo) de la respuesta. Pero qué pasa si intentamos inyectar cosas? El tamaño de la compresión será el mismo si no acertamos pero si acertamos y metemos canary=d... al encontrar canary=d634... en otra parte del texto la compresión será mejor, y la respuesta por parte del servidor más pequeña. Esto permite que repitiendo el ataque podamos ir sacando, byte a byte, el token.

Y ya el tema de cómo explotarlo, pues a partir de ahí a echarle imaginación. Lo difícil es llegar hasta estas conclusiones. Me he saltado varios detalles que son relevantes, para más información echad un ojo al PDF.

Por último comentar que me gustó ver que uno de los investigadores involucrados es el lugués Ángel Prado, habitual speaker en las Jornadas de Seguridad de A Coruña, y al que espero poder ver este año a finales de octubre en GSICKMINDS (nuevo nombre de dichas jornadas).

Un saludo a todos!

1 comentario:

  1. El presidente Juan Manuel Santos pidió a los Ministros de Defensa, Justicia y TIC crear una comisión de alto nivel para fortalecer la seguridad cibernética en Colombia. Y es que estamos en pañales en el tema de seguridad en la información, estamos expuestos a todo tipo de ataques. En Colombia las empresas están muy vulnerables, y aún no han comrendido la dimensión de la seguridad en la información. Hoy ya no hay fronteras sobre estos temas y necesitamos empezar a crear conciencia.

    ResponderEliminar