Category:OWASP AntiSamy Project/es

From OWASP
Revision as of 19:21, 3 September 2008 by Jcmax (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Contents

OWASP AntiSamy

¿Qué es?

El proyecto OWASP AntiSamy es unas cuantas cosas. Técnicamente, es una API para asegurarse que las entradas HTML/CSS del usuario estén en cumplimiento con las reglas de la aplicación. Otra forma de decirlo podría ser: es una API que le ayuda a asegurarse que los clientes no provean código malicioso en el HTML que proveen para su perfil, comentarios, etc. Que se quedan almacenados en el servidor. El termino código malicioso en términos de aplicaciones Web es generalmente relacionado solo con JavaScript. Hojas de estilo en cascada (CSS) son solo consideradas maliciosas cuando invocan a JavaScript. Sin embargo, hay muchas situaciones donde HTML y CSS “normales” pueden ser usados de una forma maliciosa.

Filosóficamente, AntiSamy es una desviación de todos los mecanismos contemporáneos de seguridad. Generalmente, los mecanismos de seguridad y los usuarios tienen una comunicación que es virtualmente de una vía, por una buena razón. Dejar al atacante potencial saber detalles acerca de la validación no se considera prudente, ya que permite que al atacante “aprenda” y “reconstruya” el mecanismo para debilidad. Estos tipos de fuga de información pueden también dañar en formas que usted no espera. Un mecanismo de ingreso que le dice al usuario, “Usuario invalido” revela el hecho de que un usuario con ese nombre no existe. Un usuario podría usar un diccionario o directorio telefónico o ambos para obtener remotamente una lista de usuarios validos. Usando esta información, un atacante podría lanzar un ataque de fuerza bruta o negación de servicio masivo de bloqueo de cuentas.

Desafortunadamente, eso no es muy usable en esta situación. Los usuarios típicos de Internet son poco efectivos cuando se trata de escribir HTML/CSS, entonces ¿Dónde obtienen su forma HTML? Usualmente la copian de alguna parte en la Web. Simplemente rechazando su entrada sin ninguna pista de por que es frenante y molesto. Los usuarios molestos se van a alguna otra parte a hacer sus redes sociales.

Socioeconómicamente, AntiSamy es un facilitador para los que no tienen. Las compañías privadas como Google, MySpace, eBay, etc. han llegado soluciones propietarias para este problema. Esto presenta dos problemas. Uno es que las soluciones propietarias no son usualmente tan buenas, e incluso si lo fueran, pues – naturalmente se niegan a compartirlas gratis. Afortunadamente, no nos importa. No vemos ninguna razón por la que solo estas compañías privadas deban tener esta funcionalidad, así que estoy liberando esto gratis bajo la licencia BSD.

¿Quiénes son?

AntiSamy fue originalmente escrito por Arshan Dabirsiaghi (arshan.dabirsiaghi [at the] gmail.com) con la ayuda de Jason Li (li.jason.c [at the] gmail.com), ambos de Aspect Security(http://www.aspectsecurity.com/). El problema que AntiSamy resuelve ha sido comúnmente descrito como “imposible” o “imposible de hacer correctamente”. Las personas con el proyecto AntiSamy esperan poder quitar esa idea de una forma rápida. Hasta el momento, solo hay una implementación en Java de AntiSamy, aunque el Framework es implementable en cualquier lenguaje. El equipo de AntiSamy espera liberar versiones en .NET y PHP en la primavera de 2008. No ha habido mucho interés en este proyecto por parte de la comunidad Rails, así que no ha sido planeada una implementación para Rails.

¿Cómo empiezo?

Hay 4 pasos en el proceso de integración de AntiSamy. Cada paso esta detallado en la siguiente sección, pero la visión general a alto nivel es la siguiente:

  1. Descargar AntiSamy desde su casa en Google Code
  2. Escoger uno de los archivos de políticas estándar que se acerque a la funcionalidad que necesite:
    • antisamy-slashdot.xml
    • antisamy-ebay.xml
    • antisamy-myspace.xml
    • antisamy-anythinggoes.xml
  3. Adaptar el archivo de politicas de acuerdo a las reglas de su sitio
  4. Llamar la API desde el código

Etapa 1 – Descargando AntiSamy

El paquete que descargue depende en gran parte de lo que quiera hacer con AntiSamy. Si le gustaría ampliar o revisar el código, descargue el paquete fuente. Si esta buscando una integración rápida, simplemente descargue el JAR y agréguelo a su classpath. Tiene una huella relativamente muy pequeña (2.2mb), y la mayoría de eso podría sacarse con ProGuard si alguien es un asistente ProGuard.

Etapa 2 – Escogiendo un archivo de política base

Es muy probable que el uso de AntiSamy para su sitio es al menos comparable a alguno de los archivos predefinidos de política. Cada uno representa un escenario “típico” para permitir a los usuarios proporcionar información de formato HTML (y posiblemente CSS). Veamos los diferentes archivos de política:


1) antisamy-slashdot.xml

Slashdot (http://www.slashdot.org/) es un sitio de noticias de tecnología que permite a los usuarios responder anónimamente a las noticias publicadas con muy militado HTML. Ahora, Slashdot no es solamente uno de los mejores sitios que hay, sino que también es un sitio que ha sido objeto a muchos diferentes ataques satisfactorios. Aun mas desafortunado es el hecho de que la mayoría de los ataques condujeron a la infame imagen goatse.cx (por favor no buscarla). Las reglas para Slashdot son bastante estrictas: los usuarios solo pueden mandar las siguientes etiquetas HTML y no CSS: <b>, <u>, <i>, <a>, <blockquote>.

En consecuencia, hemos construido un archivo de política que permite casi la misma funcionalidad. Todas las etiquetas para formateo de texto que actúan directamente en la fuente, color o énfasis han sido permitidas.


2) antisamy-ebay.xml

eBay (http://www.ebay.com/) es el sitio mas popular de subastas en línea en el universo, hasta donde puedo decir. Es un sitio publico así que cualquiera esta permitido a publicar anuncios con rico contenido HTML. No es de sorprender que dado el atractivo de eBay como objetivo que ha sido objeto a algunos ataques complejos de XSS. Esta permitido que las publicaciones contengan mucho mas contenido que digamos, Slashdot, así que su superficie de ataque es considerablemente mayor. Las siguientes etiquetas parecen ser aceptadas por eBay (no publican reglas): <a>


3) antisamy-myspace.xml

MySpace (http://www.myspace.com/) es posiblemente el sitio mas popular de redes sociales hoy en día. Los usuarios están permitidos a enviar casi todo el HTML y CSS que quieran, mientras no contenga JavaScript. MySpace esta utilizando una lista negra de palabras para validar el HTML de los usuarios, que es el motivo por el que fueron objeto del infame gusano Samy (http://namb.la/). El gusano Samy, que usaba ataques de fragmentación combinados con una palabra que debería haber estado en la lista negra (eval), fue la inspiración para el proyecto.


4) antisamy-anythinggoes.xml

No conozco un posible uso para este archivo de política. Si quisiera permitir todos y cada uno de los elementos validos de HTML y CSS (sin JavaScript o ataques de phishing relacionados con CSS), puede usar este archivo de política. Ni siquiera MySpace esta así de loco. Sin embargo, sirve como una buena referencia porque contiene las reglas base para cada elemento, así que puede usarlo como una base de conocimientos cuando se use para adaptar los otros archivos de política.


Etapa 3 – Adaptando el archivo de política

Organizaciones mas pequeñas tal vez quieran desplegar AntiSamy en una configuración por defecto, pero es igualmente posible que un sitio quiera tener estrictas reglas de negocio para lo que se les pueda permitir a los usuarios. La discusión que decide la adaptación debe también considerar la superficie de ataque, que aumenta en una proporción relativa al archivo de política.


Etapa 4 – Llamando la API de AntiSamy

Usar AntiSamy es demasiado fácil. Aquí esta un ejemplo de una llamada a AntiSamy con un archivo de política:

import org.owasp.validator.html.*;

Policy policy = Policy.getInstance(UBICACION_ARCHIVO_POLITICA);

AntiSamy as = new AntiSamy();
CleanResults cr = as.scan(dirtyInput, policy);

MyUserDAO.storeUserProfile(cr.getCleanHTML()); // función personalizada

Los archivos de política también pueden ser referenciados por un nombre de archivo, pasando un segundo argumento al método AntiSamy:scan() como muestra el siguiente ejemplo:

AntiSamy as = new AntiSamy();
CleanResults cr = as.scan(dirtyInput, policyFilePath);

Finalmente, los archivos de política pueden ser referenciados usando objetos tipo File directamente en el segundo parámetro:

AntiSamy as = new AntiSamy();
CleanResults cr = as.scan(dirtyInput, new File(policyFilePath));

Fase 4 - Analizando CleanResults

El objeto CleanResults proporciona muchas cosas útiles.

getErrorMessages() - una lista de String mensajes de error

getCleanHTML() - la limpia, segura salida HTML

getCleanXMLDocumentFragment() - el limpio, seguro XMLDocumentFragment que es reflejado en getCleanHTML()

getScanTime() - regresa el tiempo de escaneo en segundos

Plan de trabajo (Project Roadmap)

Tenemos varias metas que nos gustaría llevar a cabo con la ayuda de la comunidad. Esperemos que podamos asignar algunos fondos para esto en el OWASP Spring of Code 2008, pero es demasiado pronto para decir. Por el momento, esta es una labor de amor.


Versión .NET (principios de la primavera 2008, rc1 Otoño 2008)

Tenemos como meta tener una versión beta para .NET de AntiSamy disponible para inicios de la primavera de 2008. Los mayores obstáculos son encontrar un adecuado “limpiador de HTML” como nekohtml en .NET. Necesita ser capaz de producir fragmentos de documentos, no solamente documentos HTML completos. Por ejemplo si paso<i><b>This is a test</i></b> al limpiador de HTML, no podemos enviar de regreso <html><head></head><body><i><b>This is a test</i></b></body></html>.

La versión para .NET ha sido financiado por Summer of Code 2008 y será desarrollado por el autor principal de AntiSamy, Arshan Dabirsiaghi.

Versión PHP (beta inicios de la primavera 2008, rc1 Otoño 2008)

Tenemos como meta tener una versión beta para PHP de AntiSamy disponible para inicios de la primavera de 2008. Los mayores obstáculos son encontrar un adecuado “limpiador de HTML” como nekohtml en PHP. Necesita ser capaz de producir fragmentos de documentos, no solamente documentos HTML completos. Por ejemplo si paso <i><b>This is a test</i></b> al limpiador de HTML, no podemos enviar de regreso <html><head></head><body><i><b>This is a test</i></b></body></html>.

Muchos miembros de la comunidad han estado en contacto con nosotros para trabajar juntos, incluyendo la gente inteligente de Zend.com

Contáctenos

Hay dos formas de obtener información sobre AntiSamy. La lista de correo, y contactando al líder del proyecto directamente.

Lista de correo OWASP AntiSamy

La primera es la lista de correo, que esta ubicada en https://lists.owasp.org/mailman/listinfo/owasp-antisamy. La lista era anteriormente privada y los archivos han sido limpiados con la liberación de la versión 1.0. Animamos a todos los posibles y actuales usuarios y atacantes aburridos a unirse a la conversación. Estamos encantados de tener de lluvia de ideas de escenarios de ataque, discutir expresiones regulares y ayudar con la integración.

Escribir al líder del proyecto

Para contenido que no es apropiado para la lista de correo publica, alternativamente puede contactar al líder del proyecto, Arshan Dabirsiaghi, en [arshan.dabirsiaghi] en la [aspectsecurity.com] (s/ at the /@/).

Seguimiento de problemas

Visite el Google Code issue tracker

This category currently contains no pages or media.