Racciatti Html Scripting Attacks

2,249 views

Published on

Formas de ataques a aplicaciones web mediantes inyección de código HTML.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,249
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
132
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Racciatti Html Scripting Attacks

    1. 1. Protegiendo mi Identidad Si no soy yo, ¿sos vos? Hernán M. Racciatti SICLabs (at SICinformática) http://www.sicinformatica.com.ar [email_address] HTML Scripting Attack
    2. 2. <ul><li>http://creativecommons.org/licenses/by-nc-sa/2.5/ar/ </li></ul><ul><ul><li>Ud. puede: </li></ul></ul><ul><ul><li>Copiar, distribuir, exhibir, y ejecutar la obra </li></ul></ul><ul><ul><li>Hacer obras derivadas </li></ul></ul><ul><ul><li>Bajo las siguientes condiciones: </li></ul></ul><ul><ul><li>Atribución. Debe atribuir la obra en la forma especificada por el autor </li></ul></ul><ul><ul><li>No Comercial. No puede usar esta obra con fines comerciales. </li></ul></ul><ul><ul><li>Compartir Obras Derivadas Igual. Si altera, transforma, o crea sobre esta obra, sólo podrá distribuir la obra derivada resultante bajo una licencia idéntica a ésta. </li></ul></ul>Licencia de uso: Creative Commons 2.5 Argentina
    3. 3. Temario <ul><li>Antes de Comenzar… </li></ul><ul><li>HTML Scripting Attacks </li></ul><ul><li>Por qué Hablar de HTML Scripting Attacks? </li></ul><ul><li>Cross-Site Scripting </li></ul><ul><li>Reflected Cross Site Scripting (XSS) </li></ul><ul><li>Los POST también son explotables? </li></ul><ul><li>Persistent Cross Site Scripting (XSS) </li></ul><ul><li>Reflected Cross Site Scripting (Local Files) </li></ul><ul><li>Cien por ciento seguro? </li></ul><ul><li>Cómo identificar vulnerabilidades de XSS? </li></ul><ul><li>Contramedidas </li></ul><ul><li>Referencias y Lectura Complementaria </li></ul>
    4. 4. Antes de comenzar… Web Server Cliente/Browser El Browser conecta con el servidor y requiere una página El Server responde el requerimiento enviando la página (archivo) solicitada
    5. 5. Antes de comenzar… Cliente/Browser
    6. 6. Antes de comenzar… Cliente/Browser
    7. 7. Antes de comenzar… Cliente/Browser
    8. 8. HTML Scripting Attacks En palabras sencillas, los ataques de HTML Scripting, tienen por propósito inyectar código (Visual Basic Script, ActiveX, Flash, etc.) con el objeto que el mismo sea retornado como parte del output de una aplicación, modificando de este modo su normal comportamiento.
    9. 9. <ul><li>HTML no solamente es utilizado en la web </li></ul><ul><ul><li>Mails - Help Files - GUIs </li></ul></ul><ul><li>HTML rendering engines ricas en funcionalidades: </li></ul><ul><ul><li>Running Scripts - Plug-ins – Applets </li></ul></ul><ul><li>Ventajas para el desarrollador a la hora de crear aplicaciones más atractivas -> Nuevas posibilidades de explotación para el atacante. </li></ul>Por qué hablar de HTML Scripting Attacks?
    10. 10. Por qué hablar de HTML Scripting Attacks? Del mismo modo en que HTML no se encuentra restringido a la web, los ataques de HTML Scripting tampoco. A pesar de que este tipo de ataques son extremadamente comunes en aplicaciones web, aplicaciones cliente que no realicen rendering HTML de tipo server-side , pueden también ser vulnerables.
    11. 11. HTML Scripting Attacks Cross-site scripting (XSS) Reflected Cross-Site Scripting (Non-persistent) Persisted Cross-Site Scripting (Script Injection)
    12. 12. Cross-Site Scripting <ul><li>El script HTML que suele devolverse a un navegador web desde un servidor, normalmente fue colocado allí por alguien que tiene la capacidad de autoría de páginas HTML en dicho servidor (Ej. Webmaster) </li></ul><ul><li>Un ataque de Cross-Site Scripting (XSS), se produce cuando un atacante logra hacer que el servidor web devuelva un Script HTML, sin contar con el nivel de permisos en el servidor para realizar dicha acción. De hecho, el atacante NO modifica nada en el servidor. </li></ul><ul><li>El ataque ocurre cuando el código del servidor (server side-code) toma el input suplido por el usuario y repite el mismo de modo tal que los datos sean ejecutados como Script HMTL en la máquina cliente. </li></ul><ul><li>En otras palabras, mediante este tipo de ataques se busca forzar a un sitio web a repetir el código ejecutable suministrado por un atacante, de modo tal que el mismo sea cargado en el navegador del usuario y por ende ejecutado en dicho contexto. </li></ul>
    13. 13. <ul><li>En pocas plabras </li></ul><ul><li>Ataque del lado del cliente </li></ul><ul><li>T écnica por medio de la cual se fuerza a un sitio web a repetir el código ejecutable suministrado por un atacante, el cual se carga en el navegador del usuario. </li></ul><ul><ul><li>El código normalmente está escrito en HTML o JavaScript, pero también puede extenderse a VBScript, ActiveX, Java, Flash, o cualquier otra tecnología soportada por el navegador. </li></ul></ul><ul><li>Objetivos probablemente Vulnerables a XSS </li></ul><ul><ul><li>Web bulletin boards, Weblogs, Chat rooms, Libros de Visita, Clientes de Web Mail, Formularios de Confirmación en diferentes aplicaciones. </li></ul></ul><ul><ul><li>“ Cualquier aplicación que refleje el input del usuario sin validar su contenido (Input/Output).” </li></ul></ul>Cross-Site Scripting (Cont.)
    14. 14. Reflected Cross-Site Scripting <ul><li>Se produce cuando datos provistos por un cliente web, son usados inmediatamente por el server-side script a efectos de generar una página de resultados para el usuario. </li></ul><ul><li>Si los datos suplidos por el usuario, terminan formando parte de la página de resultado mostrada al cliente, sin que los mismos hayan sido correctamente validados/encodeados, podría resultar que dicho código sea inyectado dentro de la pagina generada dinámicamente. </li></ul><ul><li>Ejemplos básicos: </li></ul><ul><ul><li><script> document.documentElement.innerHTML=&quot;Owned by My&quot;; </script> </li></ul></ul><ul><ul><li><script>alert(document.cookie)</script> </li></ul></ul><ul><ul><li><script>while(1)alert(“DoS Exploit&quot;);</script> </li></ul></ul><ul><ul><li><EMBED SRC=http://www.pedofilia.com/movies/video.mov> </li></ul></ul><ul><ul><li><iframe src=http://mipagina.com/pagina.htm> </li></ul></ul>
    15. 15. <ul><li>Reflected Cross-Site Scripting </li></ul>Demo #1
    16. 16. Reflected Cross-Site Scripting (Cont.) <ul><li>Que tan serio es el problema? </li></ul><ul><li>El verdadero problema, es que el browser termina viendo un script que le es enviado a través del propio webserver, originado en el website al cual el propio browser envió su requerimiento!!! </li></ul><ul><li>Los navegadores web y otros clientes web, a menudo se basan en un modelo de seguridad el cual permite que sólo el sitio web que emitió ciertos datos al cliente obtenga datos del mismo. </li></ul><ul><ul><li>Por ejemplo, si www.greatsecure.com emite una cookie a un navegador, greatsecure.com puede leer esta cookie, pero microsoft.com no. </li></ul></ul><ul><ul><li>Ahora.. Suponiendo que www.greatsecure.com se encuentra hosteando una página de búsqueda que presenta un bug de XSS. Si el script es presentado a través de http://www.greatsecure.com/search.aspx y el mismo intenta acceder a la cookie generada por www.greatsecure.com ,podrá hacerlo. Esto se debe a que el navegador del cliente interpreta que el script fue originado por www.greatsecure.com . </li></ul></ul>
    17. 17. Reflected Cross-Site Scripting (Cont.) <ul><li>Que tan serio es el problema? (Cont.) </li></ul><ul><li>Básicamente XSS habilita acciones que son normalmente prohibidas. </li></ul><ul><ul><li>Cookie Access </li></ul></ul><ul><ul><li>Object Model Access </li></ul></ul><ul><ul><li>User Data Access </li></ul></ul><ul><ul><li>Bypassing SiteLock restrictions </li></ul></ul><ul><ul><li>Zone Elevation </li></ul></ul><ul><ul><li>Etc. </li></ul></ul>
    18. 18. Website Vulnerable Servidor que el Atacante Controla Atacante Víctima Click me!! Reflected Cross-Site Scripting (Cont.) Script SendCookieToAttacker{} /Script
    19. 19. Los POST también son explotables?
    20. 20. Los POST también son explotables? (Cont.)
    21. 21. Persistent Cross-Site Scripting <ul><li>Variante a menudo referida como script injection , html injection , stored o second-order injection . </li></ul><ul><li>Casi idéntico en cuanto a su funcionalidad a los ataques de tipo Reflected Cross-Site Scripting, excepto que en este caso, los datos suplidos por el atacante son almacenados por el servidor (Ej: Database, File System, etc.) </li></ul><ul><li>En este caso, en lugar de obligar a la víctima a realizar una petición que contiene la carga de datos maliciosa (script), el atacante almacena dicho script , para luego simplemente esperar que la víctima visite la URL en donde finalmente se mostrará el script almacenado en el servidor. </li></ul><ul><li>Si los datos suplidos por el usuario, son almacenados por la aplicación sin que los mismos hayan sido correctamente validados/encodeados y terminan formando parte de una página ha ser mostrada cada vez que sea requerida, sin validar/encodear correctamente el output, podría resultar que dicho código sea ejecutado con cada nueva visualización. </li></ul>
    22. 22. <ul><li>Persistent Cross-Site Scripting </li></ul>Demo #2
    23. 23. Reflected Cross-Site Scripting (Local Files) <ul><li>Con frecuencia, tanto aplicaciones como sistemas operativos, instalan varios archivos HTML , adicionalmente a otros tantos archivos temporales usados por el propio navegador web. </li></ul><ul><li>Archivos de Ayuda, templates usados para generar interfaces de usuario en forma dinámica dentro de una aplicación, etc. </li></ul><ul><li>Estos archivos no se limitan a aquellos con extensión .htm o .html, de hecho archivos HTML también pueden ser encontrados “dentro” de otros archivos como por ejemplo: </li></ul><ul><ul><li>Archivo Binario de Windows (“HTML Resources”) </li></ul></ul><ul><ul><ul><li>res://D:/HTMLResExample.dll/102#<SCRIPT>alert(&quot;Hi!&quot;)</SCRIPT> . </li></ul></ul></ul><ul><ul><li>Archivos CHM (Compiled Help Module) </li></ul></ul><ul><ul><ul><li>ms-its:c:xssCHMDemo.chm::/searchResults.htm#<SCRIPT>alert('Hi!');</SCRIPT> </li></ul></ul></ul><ul><li>Estos tres tipos de archivos pueden contener bugs de XSS. </li></ul>
    24. 24. Reflected Cross-Site Scripting (Local Files) <ul><li>Pero… los archivos locales, no son ejecutados a través de un interprete del lado del servidor tal como sucede con lenguajes tales como Perl, ASP o PHP. Como puede entonces un archivo HTML local contener un bug de tipo reflected XSS?? </li></ul><ul><li>Los archivos HTML pueden contener scripts que “re-escriban” su propio contenido y reproduzcan los datos suplidos por el usuario. </li></ul><ul><li>El envío de datos a un archivo HTML local, usualmente es llevado a la práctica agregando un signo numeral (#) al nombre del archivo, seguido por los datos que este se encuentra preparado para recibir como parámetro. </li></ul>
    25. 25. <ul><li>Reflected Cross-Site Scripting (Local Files) </li></ul>Demo #3
    26. 26. Reflected Cross-Site Scripting (Local Files) El nombre ingresado no se observa en el HTML resultante… La variable conteniendo el nombre, ha sido seteada con el valor hash del browser (location.hash) El nuevo contenido es escrito en el HTML mostrado en pantalla (A través de DOM) usando el método document.write El bwowser muestra el contenido HTML modificado permitiéndonos visualizar el nombre ingresado (Hernan) Datos No confiables están siendo mostrados sin ser filtrados y/o encodeados
    27. 27. Ciento por ciento seguro? <ul><li>Cuando de prevenir ataques XSS se trata, a menudo suele ser aplicado un enfoque del tipo “encodear y filtrar”, lo cual toma lugar sobre el servidor, antes de que este retorne los datos ingresados al browser del cliente. </li></ul><ul><li>Uno de los desafíos respecto de construir un filtro efectivo del lado del servidor, radica en habilitar al servidor para que reconozca los datos de la misma forma que el cliente (browser) lo haría. </li></ul><ul><li>Una manera de bypasear algunos filtros del lado del servidor, es enviar datos al mismo, usando un tipo de “ encoding/character set ” diferente al utilizado por el servidor. </li></ul>
    28. 28. Ciento por ciento seguro? (Cont.) Unicode Transformation Format 7 (UTF-7)
    29. 29. Ciento por ciento seguro? (Cont.)
    30. 30. Cómo Identificar vulnerabilidades de XSS? <ul><li>Identifique todos los lugares donde datos provistos por el usuario, pueden ser enviados a la aplicación. </li></ul><ul><li>Envíe datos validos a la aplicación y observe su comportamiento. </li></ul><ul><li>Identifique cualquier punto donde los datos enviados sean retornados al navegador o almacenados para ser mostrados en otra instancia. </li></ul><ul><li>Lleve adelante una auditoría de código fuente. </li></ul>
    31. 31. Contramedidas Asuma que todo INPUT es malicioso Valide todo INPUT (Todo es TODO…) Establezca Validaciones Efectivas (Tipo, Largo, Formato y Rango) Codifique ( Encode ) el OUTPUT
    32. 32. Referencias y Lectura Complementaria <ul><li>Hunting Security Bugs – Microsoft Press - by Tom Gallagher, Bryan Jeffries and Lawrence Landauer - ISBN:073562187X </li></ul><ul><li>http://ha.ckers.org/xss.html </li></ul><ul><li>http://www.webappsec.org/projects/articles/071105.shtml </li></ul><ul><li>http://www.microsoft.com/downloads/details.aspx?FamilyId=EFB9C819-53FF-4F82-BFAF-E11625130C25&displaylang=en </li></ul><ul><li>http://msdn2.microsoft.com/en-us/library/ms998274.aspx </li></ul><ul><li>http://www.bindshell.net/tools/beef/ </li></ul><ul><li>http://www.gnucitizen.org/backframe </li></ul><ul><li>http://xssworm.com/ </li></ul><ul><li>http://blogged-on.de/xss/ </li></ul><ul><li>http://ferruh.mavituna.com/xss-tunnelling-paper-and-xss-tunnel-tool-oku/ </li></ul><ul><li>http://xss-proxy.sourceforge.net/ </li></ul><ul><li>http://www.hernanracciatti.com.ar - http://www.sicinformatica.com.ar </li></ul><ul><li>http://www.cert.org/tech_tips/malicious_code_mitigation </li></ul>
    33. 33. ¡Gracias por su Atención! Hernán M. Racciatti mailto:hracciatti@sicinformatica.com.ar http://www.sicinformatica.com.ar http://www.hernanracciatti.com.ar

    ×