92 - Nuevos tipos de ataques - 31/01/2009


Autor: Lic. Cristian F. Borghello

http://www.segu-info.com.ar



Si bien muchos (¿la mayoría?) de los desarrolladores, webmaster y administradores no le prestan atención, los ataques de Cross Site Scripting (XSS) ya se han transformado en uno de los ataques más comunes y frecuentes contra los sitios web (y sus usuarios), estando desde hace tiempo en el primer puesto de la lista creada por OWASP.

Este tipo de ataque involucra la ejecución de cualquier tipo código (generalmente scripts) en una aplicación (generalmente el navegador web) y en un entorno o dominio distinto del que fue creado, permitiendo al atacante secuestrar sesiones de usuario (la víctima), modificar sitios web, infectarlo, obtener credenciales, realizar ataques de phishing, etc.

Pero, si XSS hace tiempo que se conoce y no se le presta la atención ni el respeto necesarios, ¿qué sucede con los nuevos tipos de ataques?

Los ataques XSS se ven propiciados por la incorrecta validación de los datos de entrada o, directamente por la completa ausencia de validación. Por eso este error es atribuido, con razón, a los desarrolladores, beta testers y departamento de QA (si existiera). Si no lo cree puede ver los 25 errores más comunes de programación en nuestro Boletín 128.

Este tipo de ataques se transforman en peligrosos cuando los datos "hostiles" son almacenados por el atacante en un archivo, cabecera, base de datos (SQL Injection), o cualquier otro sistema de back-end de la aplicación vulnerable y, posteriormente son volcados sin validar ni filtrar hacia el navegador (u otra aplicación) del usuario, ejecut y transformando al usuario en víctima del ataque.

Por otro lado, los "nuevos" tipos de ataques en realidad son variantes, perfeccionamientos o nuevas formas de explotación sobre los mismos ataques XSS ya existentes previamente y, la mayoría de ellos, se pueden prevenir con las mismas técnicas.

Cross-Site Request Forgery (CSRF)

CSRF [1] también conocido como Session Riding es un tipo de script malicioso en un sitio web en el que, comandos no autorizados, son transmitidos por un usuario en el cual el sitio web confía.

Se trata de una técnica prácticamente desconocida pero extremadamente peligrosa que permite aprovechar una sesión abierta en el navegador con un sitio fiable (un banco, correo, etc.) para que, desde el código HTML de una página (atacante) que se esté visitando, se cree una petición hacia la aplicación web del sitio fiable, realizando una operación sin que el usuario se percate.

Su funcionamiento es bastante sencillo, lo que lo hace aún más peligroso. Supongamos que un usuario se encuentra logueado (con sus credenciales) en una aplicación web que permite dar de alta usuarios con el siguiente formato de URL (para simplificar el escenario):

https://[sitio-empresa]/alta/?id=X&u=usuario&p=contraseña

Supongamos ahora que el usuario deja su sesión iniciada y procede a verificar su correo personal, en donde una imagen le llama la atención en un interesante anuncio. Al hacer clic sobre la imagen se visualiza la
misma de la siguiente manera:

<img src="http://[sitio-atacante]/imagen.gif" width="200" height="200">
<img src="https://[sitio-empresa]/alta/?id=999&u=MALO&p=CAISTEUHHH" width="0" height="0">

(Sí, este ataque también se puede basarse en las facilidades que brinda la Ingeniería Social)

La primera línea mostrará la imagen deseada pero la segunda "imagen" (de tamaño 0 por 0) en realidad ejecutará el script de alta de usuario en la aplicación, generando un usuario 999, "MALO" y con contraseña "CAISTEUHHH".

El usuario nunca se percatará del engaño, ya que la ejecución del script se realiza porque no se había realizado el log-out de la aplicación lo tanto no se solicitan credenciales de ingreso.

Conocidos los principios básicos, este tipo de ataque se puede perfeccionar tanto como se desee y podría dar lugar a otros más novedosos e ingeniosos, como Ataques de Phishing "In-session".

Otros tipos de ataques

Como estos ataques, sus semejanzas y sus potencialidades pueden resultar confusos, recientemente Petko D. Petkov [pdp], de GNUCITIZEN, publicó una nueva terminología, la cual fue también utilizada en su conferencia en Black Hat 2008 [7]. Ellos son:

Si bien bautizó técnicas que ya existían desde hace tiempo, estos "nuevos ataques" fueron los responsables de gusanos webs (del lado del cliente) que aprovechan la tecnología AJAX y que ya han afectado a Pownce, MySpace, Yahoo! y otras empresas, merced a vulnerabilidades en sus sitios web.

Para verificar que estos ataques no se lleve a cabo "el secreto" radica en verificar, validar la procedencia y codificar toda la información que es entregada al usuario (o a la aplicación) para que el mismo no termine ejecutando código dañino dentro de su entorno.

Como diría Giorgio Maone (autor de NoScript):
"Si hoy la mayoría de malware se ejecuta en Windows es porque es la plataforma ejecutable más común, mañana probablemente se ejecutarán en la Web por la misma razón. Guste o no, la web ya es una gran plataforma
ejecutable y, desde perspectiva una seguridad, deberíamos comenzar a pensar en ello de esa manera."

Ud. ¿ya verificó su aplicación web?


[1] Cross-Site Request Forgery (CSRF)
http://www.owasp.org/index.php/Cross-Site_Request_Forgery
http://blog.segu-info.com.ar/2009/01/ataque-que-es-cross-site-request.html

[2] Client-side Security
http://www.blackhat.com/html/bh-usa-08/bh-usa-08-speakers.html#Petkov
http://lab.gnucitizen.org/presentations/Client-side-Security-BH-Las-Vegas-2008.pdf



Buenos Aires, 31 de enero de 2008


Actualidad

Virus-Antivirus