jueves, 12 de enero de 2012

2. Protección contra clickjacking


"Trabaja en impedir delitos para no necesitar castigos" - Confucio




¡Muy Buenas!

En este mi segundo artículo voy a hablar de las distintas medidas que se han utilizado para evitar la técnica de "clickjacking" o secuestro del clic, cuya definición en español enlazo de la Wikipedia o, incluso más desarrollada, en inglés.

He de reconocer que peleé contra estas medidas cuando trataba de saltar una restricción que, además, no era estrictamente un secuestro de clic, sino que intentaba cargar una popular página (de cuyo nombre no quiero acordarme) en un marco o "frame". Mi intención era poder interactuar con esta página desde un frame propio mediante Javascript.


Sin embargo me topé con varias contra-medidas que intentan evitar el comportamiento anterior para imposibilitar la técnica de secuestro del clic. Esto es así porque esta capacidad se puede forzar para conseguir controlar los clic de los usuarios.

Tratando de desarrollar el concepto del clickjacking he encontrado una explicación muy buena y que os recomiendo leer en un blog que desconocía, ya que queda muy claro: http://rooibo.wordpress.com/2008/10/05/clickjacking-a-fondo-y-con-ejemplos/

Así pues vamos a ver las defensas que se han venido utilizando para evitar este ataque.

Una posible solución consiste en utilizar complementos para el navegador (extensiones o plugins), que protejan contra este ataque. La primera opción es el popular NoScript para Firefox, que permite hacer una lista blanca de los dominios en los que confiamos para ejecutar su Javascript. Sin embargo esta opción no es válida para todos los públicos, por la complejidad que añade y, sobretodo, porque se traslada la responsabilidad al usuario final, que no tiene porqué saber nada de Clickjacking, Javascript o condensadores de fluzo.

Entendiendo por tanto que no es responsabilidad del usuario, se deben trasladar los controles al lado del servidor.

La opción más utilizada ha sido siempre la inserción de código Javascript propio en el código de la web, para dificultar lo máximo posible este ataque, medidas no estándares y ad-hoc desarrolladas con el mejor hacer de sus programadores más la ofuscación de este código. Estas protecciones eran objetivo de un constante intento por sortearlas, por ello en las páginas más populares hemos visto auténticas carreras de medidas, contra-medidas, contra-contra-medidas, etc.

En el siguiente enlace vemos como se desarrolla un código Javascript para evitar que una página web sea incluida en un marco "frame-buster" y al mismo tiempo se indica cómo es posible saltarse dicha protección "frame-buster-buster": StackOverflow Frame buster buster

Pues en este punto me hallaba yo, tratando de obtener mi anti-anti-protección_contra_frames, peleando con Javascript, cuando me di cuenta de que existía una nueva medida de protección que superaba este planteamiento del gato y el ratón.

Y esta medida es una sencilla idea que Microsoft implementó en IE8, una meta etiqueta que se inserta en la cabecera del código HTML que no quiere ser incluido en un marco, llamada X-FRAME-OPTION. De este modo cuando el navegador ve esta etiqueta entiende que la página no quiere ser incluida en un frame y no lo cargará. Esta medida pronto se convirtió en un estándar de hecho, implementada en la mayaría de los navegadores.

Por lo tanto la única manera de saltarse esta protección es modificando el navegador del usuario, lo que impide un ataque masivo.

Así que con esto se frustraba definitivamente mi idea ya que mi intención era añadir funcionalidad a esta página web, no engañar al usuario para que se instale un complemento que modifique el funcionamiento de su navegador, para este propósito es más ético y sencillo realizar un complemento que consiga directamente la funcionalidad que deseaba.

Bueno, esta no ha sido una entrada para enseñar alguna técnica de ataque o auditoría, sino todo lo contrario, como proteger una web fruto de no haber podido conseguir una "funcionalidad extra".

¡Saludos!


PD: Este artículo ha tardado en salir más de 3 meses, cuando mi intención era al menos una publicación mensual. Prometo ponerme las pilas y que el próximo salga mucho antes, ya tengo varias ideas sobre las que estoy trabajando.

No hay comentarios:

Publicar un comentario

Por favor, deja tu comentario relacionado con el tema, solo te pido que digas lo que digas lo hagas con respeto :)