2 sept 2008

XSS

Bien, pues ahora que estoy haciendo el servicio social como tramite para la titulación de mi carrera eh tenido que hacer algunas investigaciones, que planeo publicar aquí y en Wikipedia, ya que algunos temas no son tan comunes, y otros son muy comunes, pero casi todo esta en ingles, y lo que hay en español esta algo confuso.
Así que empecemos con la mas extensa XSS

Los sitios Web de la actualidad son más complejos que nunca, contienen una gran cantidad de contenido dinámico, haciendo que la experiencia del usuario sea más agradable. El contenido dinámico se logra a través del uso de aplicaciones Web que pueden enviar diferentes salidas a sus usuarios dependiendo de su configuración y necesidades. Los sitios dinámicos sufren de una amenaza que no afecta a los sitios estáticos, llamada Cross Site Scripting (XSS)

Este tipo de ataques se hacen cada vez más populares entre los hackers ya que es relativamente sencillo encontrar agujeros que permiten explotar esta vulnerabilidad Cada mes se descubren entre 10 y 25 agujeros XSS en productos comerciales.

Los sitios Web que utilizan SSL (para https) NO tienen mayor protección que aquellos sitios que carecen de esta protección, ya que las aplicaciones Web trabajan de la misma manera que antes, excepto que el ataque se realiza en una conexión cifrada.

Es una vulnerabilidad que muchos desarrolladores dejan pasar por alto, quizás por falta de un planeamiento de análisis de riesgos en el proceso de diseño, desarrollo e implementación de sus aplicativos, o simplemente no lo vean como una falla que les va a presentar problemas en su aplicación, incluso por desconocimiento de esta vulnerabilidad.

Sea cual sea el motivo por el cual no se ejecuten medidas de prevención con respecto a esta vulnerabilidad, es necesario saber, que es un tipo de ataque que se extiende cada día mas, hoy en día es muy común encontrar sitios y usuarios afectados por este tipo de agresión. Sitios como FBU.gov, CNN.com, Time.com, Ebay.com, Yahoo, entre otros han tenido una forma u otra de vulnerabilidades XSS. En los últimos meses, en México, se detecto esta vulnerabilidad en los routers del mayor proveedor de Internet de México, Telmex, que permitió redireccionar a los usuarios de cierto portal bancario.

Para ejecutar este tipo de ataque no es necesario ser un guru en el campo de la programación, ni desarrollar o utilizar herramientas complejas, basta con manejar un poco de las etiquetas de HTML y algún lenguaje de Scripting.

La clave primordial en el campo de la seguridad es no confiar en la entrada de datos de ningún usuario, ya que en algún momento estas entradas se puede convertir en una inserción de código malicioso, es por ello que la aplicación debe de validar cada uno de los campos en donde el usuario pueda o le sea requerido el ingreso de datos y dejar de lado la política de confianza al usuario.

Definición de Cross-Site-Scripting

El Cross-Site-Scripting es una vulnerabilidad que aprovecha la falta de mecanismos de filtrado en los campos de entrada y permiten el ingreso y envió de datos sin validación alguna, aceptando el envió de scripts completos, pudiendo generar secuencias de comandos maliciosas que impacten directamente en el sitio o en el equipo de un usuario. El Cross-Site-Scripting es una vulnerabilidad que puede causar un impacto tanto a una aplicación web como a usuarios que de manera inconsciente activen dicha secuencia de comandos.

Ocurre cuando la aplicación web acepta datos maliciosos de un usuario. Estos datos son por lo general enviados a través de un hipervínculo que contiene el código maligno. El usuario puede hacer clic en un enlace desde otro sitio Web, un mensajero instantáneo o simplemente al leer un tablero de mensajes o un e-mail. Usualmente el atacante cifrara la porción dañina del link en código HEX (o con algún otro método de cifrado) así que la petición se ve menos sospechosa para los usuarios. Después de que la información fue recabada por la aplicación Web, se crea una página de salida para el usuario que envió el código, pero de manera que parece la página válida del sitio. Muchos foros y libros de visitas permiten a los usuarios publicar entradas con html y javascript en él.

Un atacante puede usar XSS para enviar scripts maliciosos a un usuario ingenuo. El navegador del usuario no tiene forma de saber que no debe confiar en un determinado script y lo ejecutará. Ya que piensa que viene de una fuente confiable, pudiendo acceder a los cookies, tokens de sesión o cualquier información retenida por el navegador y que es usada por el sitio. Los scripts pueden incluso reescribir el contenido de la página.

Los ataques XSS son divididos por lo general en dos categorías: almacenados y reflejados. Los ataques almacenados son aquellos donde el código inyectado se almacena permanentemente en el servidor, como en una base de datos, en un foro de mensajes, libros de visita, etc. Los ataques reflejados se refiere a aquellos donde el código inyectado es reflejado por el servidor Web, como en un mensaje de error, o en los resultados de una búsqueda. Estos ataques son enviados a la victima usando otras vías como un e-mail, o algún otro servidor Web. Cuando un usuario cae en la trampa el código inyectado viaja al servidor Web vulnerable, que a su vez refleja el ataque hacia el navegador del usuario. El navegador ejecuta el script, ya que viene de un servidor “confiable”.

¿A quien Afecta?

El Cross-Site-Scripting es una vulnerabilidad que puede causar un impacto tanto a una aplicación web como a usuarios que de manera inconsciente activen dicha secuencia de comandos. Dicho código malicioso se compone de cadenas de datos cuyo contenido son scripts completos contenidos en enlaces o ejecutados desde formularios.

En caso de que sea ejecutado el script se ejecutara en el equipo del usuario con todos los privilegios permitidos por las políticas de seguridad configuradas en el navegador del usuario o del sitio visitado, pudiendo realizar acciones diversas como la captura de cookies de usuario o la activación de servicios y componentes del sistema operativo del usuario victima.

La mayor problemática es que estas cadenas de código se encuentran ocultas a la sombra de vínculos, de los cuales, el usuario normalmente no revisa el código y lo ejecuta con una política de confianza total, dicha ejecución se realiza de una manera indirecta, ya sea por una activación vía hipervínculo o por la ejecución al momento de la carga de un sitio afectado por este tipo de ataque, el atacante no realiza su acción pensando en un usuario en especifico si no que actúa de manera de que afectan a cualquier usuario que inocentemente caiga en dicha trampa, las formas mas comunes de realizar dicha agresión es por medio de correos electrónicos, vínculos falsos o ataques directos a sitios no preparados para este tipo de ataque.

Podemos encontrar una clasificación simple:

1. Ataque al usuario.

2. Ataque al Aplicativo.

Ataque al Usuario

Este es el ataque mas frecuente, debido al potencial de la información que se puede obtener mediante este tipo de agresión, ya que dependiendo del nivel de ingenio del atacante puede obtener información importante de un usuario victima extrayendo sus cookies y consiguiendo información almacenada en ellas o robando su sesión de usuario en un sitio web especifico.

Dentro de las diversas formas de ataque veremos dos de las más comunes.

Ataque vía correo electrónico:

Se basa en el envió de un correo electrónico a un usuario con un script oculto en un link a una dirección web, el atacante buscando motivar a su victima a seguir el enlace le ofrece un premio, regalo u oferta si visita dicho vinculo, al verse atraído por la información en el correo electrónico el usuario hace clic en el vinculo sin darse cuenta de que esta activando una secuencia de comandos que se ejecutaran en su equipo local, que podrían extraer sus cookies, eliminar archivos y en el caso mas fatal formatear su disco duro, mediante la invocación de programas con parámetros aleatorios.

Ataque vía publicación en Sitios Vulnerables:

Esta segunda forma se basa en la publicación de datos en blogs, foros, libros de visitas o sitios que permiten reflejar información enviada por un usuario y que no es validada por el servidor, donde podremos esconder secuencias de comandos detrás de un vinculo o imagen, este ataque tiene la misma finalidad que el anterior, pero con un mayor alcance de usuarios afectados.

Esta vulnerabilidad puede estar de forma directa (foros, mensajes de error, etc) o indirecta (redirecciones, frame sets, etc)



No hay comentarios: