client side attacks in web applications
DESCRIPTION
Charla impartida por Alejandro Martín en el IV Curso de Verano de Seguridad Informática de la Universidad Europea de Madrid.TRANSCRIPT
![Page 2: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/2.jpg)
Agenda
►Introducción►Ataques
XSS (Cross Site Scripting)CSRF (Cross Site Request Forgey)Sessión HijackingSession FixationSession SidejackingCookie HijackingClicjackingHTTP Response Splitting
![Page 3: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/3.jpg)
OWASP Top 10 2010
![Page 4: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/4.jpg)
Definición
►Vulnerabilidad presente en una gran cantidad de páginas, hasta convertirse en la número 1 del TOP 10 del 2007 y número 2 en 2010
►Muy peligrosa pese a que, por desgracia, se le suele dar poca importancia
![Page 5: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/5.jpg)
Tipos de XSS
► XSS Permanente Datos enviados desde el cliente para su almacenamiento en el
Servidor Datos que van a ser visualizados por otros clientes/usuarios Al devolver los datos el Servidor al navegador cliente se
produce la manipulación de la página en el navegador cliente
![Page 6: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/6.jpg)
Tipos de XSS
► XSS no permanente El atacante monta un enlace aprovechando un parámetro
vulnerable a XSS donde realiza la manipulación Envía el enlace de alguna manera a la victima (e-mal, foros,
Twitter, etc.) que al hacer clic obtiene la página web “manipulada”
![Page 7: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/7.jpg)
Riesgos
►Ejecución de código en contexto el usuario que visualiza los datos
Navegación dirigidaPhisingSpywareRobo de credencialesEjecución de acciones automáticasDefacement
![Page 8: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/8.jpg)
Robo de Sesiones (XSS)
►Mediante esta técnica se puede robar sesiones de una manera bastante sencilla
►Bastaría con realizar un script que llamase a una página alojada en nuestro servidor pasándole la cookie
►Este Script se colaría en el servidor de la victima aprovechando un punto vulnerable a XSS
►Cuando un usuario este logueado en el servidor y ejecute el script se enviara a nuestro servidor el contenido de la cookie
►Una vez que la página obtiene la cookie (almacenándola por ejemplo en un fichero) mediante programas como Burpsuite se puede hacer una llamada al servidor pasándole la cookie original
![Page 9: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/9.jpg)
Robo de Sesiones (XSS)
►Por supuesto esta cookie es válida para robar la sesión solo mientras el usuario no cierre la sesión
![Page 10: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/10.jpg)
Robo de sesiones (Session Fixation)
►Consiste en proporcionar un enlace (GET/POST), junto con el identificador de sesión, a la victima. Si esta inicia sesión con ese identificador el atacante puede utilizarlo para suplantar su sesión
![Page 11: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/11.jpg)
Robo de sesiones (Session Fixation)
►Si el servidor no admite identificadores de Sesión por GET/POST sería posible utilizar XSS para sobrescribir el valor del identificador
![Page 12: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/12.jpg)
Impedir acceso a la cookie mediante javascript
►Para evitar el robo de la sesión, mediante ataques XSS se utiliza el flagHTTPOnly, que impide el acceso a la cookie desde el navegador, siempre y cuando este lo soporte.
►Test HTTPOnly: http://greebo.net/owasp/httponly.php
HttpOnly READ WRITE AJAX IE 8.0 FireFox 3.5 Opera 10.10 Chrome 3.0 Safari 4.0
![Page 13: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/13.jpg)
Robo de sesión (Session sidejacking)
►Otra técnica para robar sesiones consiste en esnifar la red a la espera de cookies conocidas, utilizadas par mantener la sesión.
►Valido para aquellos sitio web que realizan inicio de sesión bajo SSL, pero acto seguido trabajan bajo HTTP.
►Firesheep FacebookTwitterTuenti…
![Page 14: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/14.jpg)
Robo de sesión (Session sidejacking)
![Page 15: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/15.jpg)
Cross Site Request Forgey (CSRF)
►Consiste en crear sitios maliciosos (o manipulados mediante XSS) que realicen peticiones “conocidas” a otros sitios victima.
►Si el usuario navega por el sitio malicioso habiéndose autenticado previamente en el sitio victima se realizará la acción que ejecute la petición.
![Page 16: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/16.jpg)
Robo de sesión (Cookie hijacking)
► Es necesario poder esnifar la red de la victima:► Red cableada, wifi, Dan Kaminsky's DNS hijack attack, ...
► Haremos que la victima haga peticiones GET a imagenes de los portales a los que la victima accede
► Injeccion TCP/CSRF
![Page 17: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/17.jpg)
Robo de Sesiones
►La cookie de sesión debe transmitirse únicamente a través del canal SSL
►Marca la cookie de sesión con el flag “Secure”
![Page 18: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/18.jpg)
HTTP Response Splitting
►Conseguir introducir en la respuesta del servidor el retorno de carro (CR 0x0D) y cambio de línea (LF 0x0Q) para:
Establecer encabezadosModificar el cuerpo de la respuestaDividir la respuesta en partes
►Todo ello con el objetivo de realizar:Ataques XSSDefacementCache poisoning…
![Page 19: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/19.jpg)
HTTP Response Splitting
►Ejemplo:http://192.168.2.100:8080/UEM/registro.jsp?page
=registro.html
►Resultado<% response.sendRedirect(request.getParameter("page")); %>
![Page 20: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/20.jpg)
HTTP Response Splitting
► Ejemplo: http://192.168.2.100:8080/UEM/registro.jsp?page=registro.html
%0D%0ALocation: javascript:%0D%0A%0D%0A<script>alert(document.cookie)</script>
► Resultado
HTTP/1.1 302 Moved TemporarilyServer: Apache-Coyote/1.1X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1Location=http://192.168.2.100:8080/UEM/registro.html Location: javascript:
<script>alert(document.cookie)</script>Content-Type=text/html;charset=ISO-8859-1 ..
![Page 21: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/21.jpg)
Clickjacking
►Evolución del Cross Site Request Forgey (CSRF).►Iframe donde se carga una página que requiere de
autenticación (el usuario debe haberse validado antes) y se autorizan las acciones mediante clics (la diferencia con CSRF).
►A lo largo del año 2009, sitios como Twitter o Facebook han adolecido de estas vulnerabilidades.
►Mitigar comprobando referer y requiriendo validación GET y POST, no solo cookies
![Page 22: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/22.jpg)
Clickjacking
► Para mitigar esta vulnerabilidad Microsoft propuso una solución, el uso de la cabecera HTTP X-FRAME-OPTIONS:
DENY : Bloquea la carga de la página en cualquier IFRAME SAMEORIGN: Bloque la carga de la página en dominios
externos► Página para chequear Clickjacking
http://blogs.msdn.com/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx
► Resultados por navegadores
IE 8.0 FireFox 3.5 Opera 10 Chrome 3.0 Safari 4.0
Anti-clickjacking
X-FRAME-OPTION
![Page 23: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/23.jpg)
Cross Domain Request
► Inconveniente para los programadores: No es posible realizar peticiones AJAX a recursos que se encuentren en otros dominios.
► Soluciones W3C: Extiendo el objeto XMLHttpRequest Microsoft: XDomainRequest en IE8
► Seguridad: Access-Control-Allow-Origin: Permite definir los dominios que
pueden llamar a la página mediante AJAX (se permite el comodín *)
Access-Control-Allow-Credentials: Es necesario utilizar XDomainRequest con el atributo “withCredentials” de modo que se mantiene una sesión con cookies, pudiendo el servidor realizar validaciones
![Page 24: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/24.jpg)
¿Qué hago como desarrollador?
►ASP.NETXSS habilitado por defecto en todas las páginasPara deshabilitarlo:
<%@ Page… validateRequest=“false” … %>Microsoft Anti-Cross Site Scripting Library 1.5
Aglutina una serie de métodos para codificar la salida: HtmlEncode, HtmlAttributeEncode, JavaScriptEncode, UrlEncode, VisualBasicScriptEncode, XmlEncode, XmlAttributeEncodehttp://www.microsoft.com/downloads/details.aspx?FamilyId=EFB9C819-53FF-4F82-BFAF-E11625130C25&displaylang=en
![Page 25: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/25.jpg)
►Filtrar la entradaListas negras vs listas blancasPalabras/Caracteres prohibidos
Script, <, >, ‘, ‘’, …
Caracteres/Construcciones permitidasUso intensivo de expresiones regulares
o[A-Za-z0-9.,_]{0,10}o[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}
¿Qué hago como desarrollador?
¿Qué técnica uso?
![Page 26: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/26.jpg)
¿Qué hago como desarrollador?
►JavaTrabajando con Struts utilizar para salida
mecanismos como: <bean: write …>
Trabajando con JSLT (JavaServer Pages Standard Tag Library) utilizar por defecto la opción:
escapeXML = “true”No usar nunca:
<%= …%><jsp:getProperty property=“…" name=“…"/>${bean.property}
![Page 27: Client side attacks in web applications](https://reader036.vdocuments.net/reader036/viewer/2022062514/557b60e5d8b42a90078b5526/html5/thumbnails/27.jpg)
¿Qué hago como desarrollador?
►PHPUtilizar htmlentities() o htmlspecialchars()OWASP PHP AntiXSS Library
SafeHTML v.1.3.7Anti-XSS HTML Parserhttp://pixel-apes.com/safehtml/?page=safehtml