Client side attacks in web applications
-
Upload
eventos-creativos -
Category
Technology
-
view
1.542 -
download
9
description
Transcript of Client side attacks in web applications
Client-Side attacks in Web applications
Alejandro Martí[email protected]
Agenda
►Introducción►Ataques
XSS (Cross Site Scripting)CSRF (Cross Site Request Forgey)Sessión HijackingSession FixationSession SidejackingCookie HijackingClicjackingHTTP Response Splitting
OWASP Top 10 2010
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
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
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”
Riesgos
►Ejecución de código en contexto el usuario que visualiza los datos
Navegación dirigidaPhisingSpywareRobo de credencialesEjecución de acciones automáticasDefacement
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
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
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
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
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
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…
Robo de sesión (Session sidejacking)
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.
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
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”
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…
HTTP Response Splitting
►Ejemplo:http://192.168.2.100:8080/UEM/registro.jsp?page
=registro.html
►Resultado<% response.sendRedirect(request.getParameter("page")); %>
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 ..
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
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
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
¿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
►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?
¿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}
¿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