miércoles, 8 de octubre de 2008

Clickjacking a fondo y con ejemplos

Hoy voy a cumplir un poco con mi fama de obsesionado por la seguridad, y voy a escribir un artículo sobre clickjacking, ese extraño y misterioso término que no para de aparecer por la blogosfera y las páginas de noticias… Y es que en seguridad informática, todos los días suceden cosas graves, pero algunas, saltan a los medios populares, se convierten en “noticia” y perciben cierto protagonismo, como si otros problemas de seguridad, no fuesen igual de recientes y graves…pero vaya, esto es como cuando un caso de asesinato salta a la prensa amarillista: lo mismo. El clickjacking no es un agujero de seguridad en si mismo, es una forma de darle la vuelta a las tecnologías que utilizamos hoy en día, para engañar al usuario y hacerle creer que ciertas cosas, son lo que realmente no son.

Este ataque consiste en cargar una página web externa dentro de un iframe invisible (con opacidad 0, por ejemplo) y poner debajo del iframe invisible (con menor z-index), elementos xhtml para que el usuario haga click, pero que realmente, tienen el iframe invisible encima, y es quien recibirá el click. Dicho de otra forma, imaginaos un cristal (opacidad 0) con algo debajo, intentamos tocar con el dedo lo que hay debajo, pero tocamos el cristal, esto es lo mismo que sucede cuando ponemos un iframe con opacidad 0 (invisible) encima de ciertos elementos de nuestra web: el usuario irá a hacer click en nuestros elementos, pero hará click dentro del iframe. Ahora imaginemos que cargamos en el iframe una página de noticias, como meneame, fresqui, o digg, lo volvemos transparente, y debajo metemos un botón que diga: haz click aquí, posicionándolo justo exactamente debajo de donde aparece el botón para votar a la noticia, dentro de la página de noticias.

Cuando el usuario haga click en nuestro botón, que está debajo del iframe transparente, justo donde está el botón para votar de la web de noticias que hay cargada dentro del iframe, hará click en el botón votar de la pagina que hay dentro del iframe. Creo que lo mejor para acabar de entenderlo es una imagen:

clickjacking

Sin embargo, muchos de vosotros pensaréis: y para que tanta historia, si para simular el click de un usuario, podemos realizar la petición, cargando un iframe con la dirección de destino?…es decir, podemos realizar un ataque CSRF (Cross-site request forgery). Para entrar bien a fondo en el tema del clickjacking, tenemos que comprender primero los ataques CSRF, ya que el clickjacking es una extensión de los CSRF (a mi modo de verlo :). Un ataque CSRF consiste en que si en una web, digamos: http://www.example.com, hay una página de noticias, y para votar una noticia, digamos la noticia número 51, se usa un enlace tal como:

http://www.example.com/noticias.php?votar=51

Podríamos crear una página con un iframe invisible apuntando a esa dirección, y cuando el usuario entre a nuestra web, sin saberlo, votará la noticia 51. Eso es un típico ejemplo de CSRF. Sin embargo, cuando ese tipo de ataques empezó a popularizarse, muchos sitios web, como meneame, fresqui, etc empezaron a agregar números de control a las peticiones, es decir, para realizar acciones en la web, las peticiones deben incluir un número aleatorio que te dan cuando cargas la página, de esta forma, sin ese número, no puedes hacer una petición como la anterior y votar una noticia, además, el número de control cambia por cada petición que haces.

Con esta técnica, parecía que los CSRF habían muerto, y ahí es donde aparece el clickjacking, podemos crear una web, y utilizar lo explicado arriba, para inducir a un usuario a hacer click en un botón, que realmente tiene encima, de forma invisible, un botón de otra web. De esta forma, los números de control son enviados por el javascript de la página original, y todo sucede de forma normal. Cabe decir, después de toda esta explicación, que existen alguna páginas que no son vulnerables a este ataque, como por ejemplo meneame, ya que no permite que cargues la web dentro de un iframe, lo mismo pasa con gmail, entre otras. Aunque a mi me gusta hacer los experimentos con meneame, contactar con Ricardo antes de publicar nada, para que lo arregle, y entonces hacer el artículo, esta vez no puedo, por que meneame no es vulnerable a clickjacking, así que voy a hacer el experimento con fresqui.

He creado una página que utilizando las técnicas de clickjacking, crea un botón, que de pulsarlo, estarías votando esta noticia de fresqui:

http://tec.fresqui.com/cientificos-descubren-que-el-sol-no-es-una-esfera-perfecta

El ejemplo, lo podéis ver aquí, y solo funciona en firefox (paso de internet explorer :):

http://eyeideas.es/clickjacking.html

Como se puede ver en el código, hay una función javascript:

function initBoton() {
var obj = document.getElementById(”boton”);
var myWidth = 0, myHeight = 0;
if( typeof( window.innerWidth ) == ‘number’ ) {
//Non-IE
myWidth = window.innerWidth;
myHeight = window.innerHeight;
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
//IE 6+ in ’standards compliant mode’
myWidth = document.documentElement.clientWidth;
myHeight = document.documentElement.clientHeight;
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
//IE 4 compatible
myWidth = document.body.clientWidth;
myHeight = document.body.clientHeight;
}
var finalW = myWidth-910;
finalW = finalW/2;
//910-722 = 188 (mas tamaño…238)
finalW = finalW + 248;
obj.style.position=’absolute’;
obj.style.right=finalW+’px’;
obj.style.top=’244px’;
obj.style.display=’block’;
}

Que de forma un poco sucia, posiciona el botón rojo justo debajo del botón para votar la noticia en fresqui.

El iframe es algo así:

<iframe src=”http://tec.fresqui.com/cientificos-descubren-que-el-sol-no-es-una-esfera-perfecta” style=”opacity:0;position:absolute;top:0px;left:0px;width:99%;height:95%;margin:0px;padding:0px;z-index:100;”></iframe>

Como conclusión, decir que el ataque no es tan peligroso como lo pintan, aunque tiene su potencial impacto en la seguridad del usuario. Por cierto, el ejemplo no se lo bien que irá en otras resoluciones y tal, he intentado hacerlo bastante portable, pero no lo he probado en otro sistema mas que el mio, es una simple prueba de concepto.

El presente artículo NO ha sido modificado en su contenido pero si se le han agregado enlaces para complementar la información. Eventualmente también se han agregado imágenes o modificado las existentes. Para ver el artículo original por favor hacer uso del apartado Fuentes que se incluye al final de este post.

____________________________
Artículo Fuente : Clickjacking a fondo y con ejemplos
Autor / Publicado por :
Web Site / Blog : Desvaríos informáticos

No hay comentarios:

Publicar un comentario

AVISO:
Muchas gracias por considerar dejar un comentario. Te pido por favor que tengas en cuenta las siguientes pautas:
1. Evita usar lenguaje prosaico u ofensivo, y mantener siempre el respeto por todos.
2. Respeta las opiniones de los demás y no cometas el error de atacarlos de manera insultante o prosaica.
3. Si no estas de acuerdo con el tema publicado, ambos sabemos que hay forma de realizar una crítica sin ofender ni agredir.
4. También queda prohibida los enlaces de promoción o publicidad descarada.
5. Finalmente te pido que no utilices abreviaturas en tus respuestas para poder mantener una armonía en la lectura de los mensajes y una mejor comprensión de la lectura.

Y como muestra de mi gratitud por tu visita y comentario, si tienes sitio web o blog y has ingresado ese dato u OpenID, agregaré tu web o blog en mi sección Blogs de amistades y/o que me gusta visitar seguido.

En caso contrario tu comentario podría ser eliminado. Aprecio mucho que consideres esta petición de mi parte. Muchas gracias por tu comprensión.

Nota: solo los miembros de este blog pueden publicar comentarios.

El pianista que tocó y alguien escuchó

Una marmota en el barrio de Lima

Historias de una cocina

El cine que compartí