1 2 3 4 5 6

Reduce la superficie de ataque en AJAX

Reg Developer 18-Feb-2008

Fundamentalmente, no hay nada nuevo sobre los problemas de seguridad conocidos en AJAX. Así que solo nos queda aplicar algunos buenos principos de seguridad para el uso de esta tecnología.

Los problemas ocurren debido a que desafortunadamente existen una gran cantidad de "diablillos" escondidos en los detalles. Uno de los retos principales para las aplicaciones de AJAX es que al trasladar el código al cliente se involucra una gran catidad de formatos de datos, protocolos, analizadores e intérpretes. Estos incluyen JavaScript, VBScript, Flash, JSON, XML, REST, XMLHttpRequest, XSLT, CSS y HTML además de las tecnologías de servidor involucradas. Además, como si esto no fuera suficiente, cada framework de AJAX tiene sus propios formatos.

El tamaño de la superficie de ataque que presente una aplicación proporciona a un atacante diferentes maneras para causar algún daño a las aplicaciones o a los usuarios. Mientras más tecnologías se utilicen, más grande será la superficie de ataque.

En consecuencia se mencionan tres recomendaciones para reducir la superficie de ataque en las aplicaciones que utilicen AJAX:

  • Sepa lo que se ejecuta
  • En AJAX cada vez es más difícil saber donde se ejecutará el código. Tome por ejemplo las herramientas Web de Google (Google Web Toolkit, GWT). Usted programa en Java y el entorno toma cierta parte del código y la compila en JavaScript que funciona en el cliente.

    Así que si usted comete un error e implementa autenticación, control de acceso, validación u otro mecanismo de seguridad del lado del cliente, un atacante simplemente podría pasar estos mecanismos con Firebug. Imagine que usted tiene cuidado en el código de modo que garantiza que funciones administrativas nunca serán mostradas a usuarios ordinarios. Esto suena bien, pero usted olvidó que el código de la interfaz de usuario corre del lado del cliente. Entonces el atacante utiliza Firebug para llamar a las funciones adminsitrativas. Si no se realizan las verificaciones necesarias del lado del servidor, un atacante podría obtener privilegios administrativos.

    La solución es ser cuidadoso en las actividades que se deben desempeñar del lado del cliente y del lado del Servidor.

  • Mantenga los datos separados del código
  • Los hackers frecuentemente utilizan una técnica llamada "inyección" para introducir comandos en ciertas secciones de datos de modo que logren ejecutarlos. Este truco es el corazón de muchos ataques como inyección de SQL, comandos, LDAP, XSS y desbordamientos de memoria.

    La clave para detener estos ataques está en nunca ejecutar datos que podrían ejecutar código. Pero con AJAX, muchos de los datos y código son combinados en DOM. Dado que actualmente no existe una estructura como HTML que mezcle código y datos.

    Así que, sea cuidadoso con los datos que podrían incluir una entrada del usuario. En este caso procure validar todos los datos antes de ejecutarlos, aún en aquellos datos que se ejecutan del lado del cliente.

  • Tenga cuidado de la codificación
  • Codificar dificulta las cosas ya que los atacantes pueden esconder sus ataques codificándolos y así lograr ejecutar sus ataques en las aplicaciones que son vulnerables. Actualmente se utilizan diferentes esquemas de codificación o una doble codificación para ocultar sus ataques. Existen docenas de esquemas y no existe una manera de saber que esquema se debería reconocer para prevenir el ataque. Esto hace que reconocer este tipo de ataques sea muy complejo si no es que imposible.

    Siempre que se envíe o reciban datos, ambas partes deben conocer el tipo de codificación que se utiliza. De modo que la aplicación no intente adivinar el esquema de codificación. No es posible prevenir que un atacante envíe datos con otro tipo de codificación pero la aplicación no tendrá que ejecutarlos. Por ejemplo:

    • Establezca el tipo de codificación en la cabecera de HTML:
    • < meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    • Establezca el tipo de codificación al inicio de documentos XML:
    • <-xml version="1.0" encoding="utf-8"->

    Recuerde, la superficie de ataque de AJAX esta bajo su control. Las decisiones que realice pueden incrementar drásticamente el tamaño de la superficie de ataque. Asegúrese de dónde se ejecuta el código, qué tipo de formato de datos y protocolos estan involucrados y también que analizadores e intérpretes se utilizan. Y lo más importante, asegure que los datos y el código se mantengan separados.

Fuente: Reg Developer  OOP/JJR

Universidad Nacional Autonoma de México Aviso legal |  Créditos |  Staff |  Administración
Copyright © Todos los derechos reservados
UNAM - CERT

r) {}