Client side attacks in web applications

27
Client-Side attacks in Web applications Alejandro Martín [email protected]

description

Charla impartida por Alejandro Martín en el IV Curso de Verano de Seguridad Informática de la Universidad Europea de Madrid.

Transcript of Client side attacks in web applications

Page 1: Client side attacks in web applications

Client-Side attacks in Web applications

Alejandro Martí[email protected]

Page 2: Client side attacks in web applications

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

OWASP Top 10 2010

Page 4: Client side attacks in web applications

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

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

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

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

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

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

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

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

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

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

Robo de sesión (Session sidejacking)

Page 15: Client side attacks in web applications

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

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

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

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

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

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

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

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

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

¿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

►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

¿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

¿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