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

Client side attacks in web applications

Embed Size (px)

DESCRIPTION

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

Citation preview

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