data:newerPageTitle data:olderPageTitle data:homeMsg

miércoles, 8 de octubre de 2008
10:32:00

Por cada comentario que haces, Dios salva un gatito

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


*****

0 comentarios:

Haznos saber tu opinión

Todo comentario es bien recibido. Pero debes de tener en consideración los siguientes puntos:
1. No se permitirán insultos.
2. No se permitirá comentarios únicamente con publicidad. En todo caso te sugiero enviar un mensaje privado para ver el tema.
3. No se permitirá ningún tipo de ataque, agresión ni apologías de ningún tipo que inciten a la violencia o reacciones violentas. Se puede criticar y entablar debate sin necesidad de agredir a nadie.
4. No se permitirá ningún tipo de discriminación, segregación ni racismo.

Todos los comentarios serán sujetos a moderación, así que por favor les pido un poco de paciencia. Muchas gracias por comentar en este blog.



Coméntalo en Facebook

data:newerPageTitle data:olderPageTitle data:homeMsg

Publicados en esta categoría...

Suscribete a De Copy and Paste