Client-Side attacks in Web applications<br />Alejandro Martín<br />amartin@informatica64.com<br />
Agenda<br />Introducción<br />Ataques<br />XSS (Cross Site Scripting)<br />CSRF (Cross SiteRequestForgey)<br />SessiónHija...
OWASP Top 10 2010<br />
Definición<br />Vulnerabilidad presente en una gran cantidad de páginas, hasta convertirse en la número 1 del TOP 10 del 2...
Tipos de XSS<br />XSS Permanente<br />Datos enviados desde el cliente para su almacenamiento en el Servidor<br />Datos que...
Tipos de XSS<br />XSS no permanente<br />El atacante monta un enlace aprovechando un parámetro vulnerable a XSS donde real...
Riesgos<br />Ejecución de código en contexto el usuario que visualiza los datos<br />Navegación dirigida<br />Phising<br /...
Robo de Sesiones (XSS)<br />Mediante esta técnica se puede robar sesiones de una manera bastante sencilla<br />Bastaría co...
Robo de Sesiones (XSS)<br />Por supuesto esta cookie es válida para robar la sesión solo mientras el usuario no cierre la ...
Robo de sesiones (SessionFixation)<br />Consiste en proporcionar un enlace (GET/POST), junto con el identificador de sesió...
Robo de sesiones (SessionFixation)<br />Si el servidor no admite identificadores de Sesión por GET/POST sería posible util...
Impedir acceso a la cookie mediante javascript<br />Para evitar el robo de la sesión, mediante ataques XSS se utiliza el f...
Robo de sesión (Sessionsidejacking)<br />Otra técnica para robar sesiones consiste en esnifar la red a la espera de cookie...
Robo de sesión (Sessionsidejacking)<br />
Cross SiteRequestForgey (CSRF)<br /><ul><li>Consiste en crear sitios maliciosos (o manipulados mediante XSS) que realicen ...
Si el usuario navega por el sitio malicioso habiéndose autenticado previamente en el sitio victima se realizará la acción ...
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</li></li></ul><li>Robo de Sesiones<br />La cookie de sesión debe transmitirse únicamente a través del c...
HTTP Response Splitting<br />Conseguir introducir en la respuesta del servidor el retorno de carro (CR 0x0D) y cambio de l...
HTTP Response Splitting<br />Ejemplo:<br />http://192.168.2.100:8080/UEM/registro.jsp?page=registro.html<br />Resultado<br...
HTTP Response Splitting<br />Ejemplo:<br />http://192.168.2.100:8080/UEM/registro.jsp?page=registro.html%0D%0ALocation: ja...
Clickjacking<br /><ul><li>Evolución del Cross SiteRequestForgey (CSRF).
Iframe donde se carga una página que requiere de autenticación (el usuario debe haberse validado antes) y se autorizan las...
A lo largo del año 2009, sitios como Twitter o Facebook han adolecido de estas vulnerabilidades.
Mitigar comprobando referer y requiriendovalidación  GET y POST, no solo cookies</li></li></ul><li>Clickjacking<br />Para ...
Cross Domain Request<br />Inconveniente para los programadores: No es posible realizar peticiones AJAX a recursos que se e...
Upcoming SlideShare
Loading in …5
×

Client side attacks in web applications

1,802 views
1,665 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

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

No notes for slide

Client side attacks in web applications

  1. 1. Client-Side attacks in Web applications<br />Alejandro Martín<br />amartin@informatica64.com<br />
  2. 2. Agenda<br />Introducción<br />Ataques<br />XSS (Cross Site Scripting)<br />CSRF (Cross SiteRequestForgey)<br />SessiónHijacking<br />SessionFixation<br />SessionSidejacking<br />Cookie Hijacking<br />Clicjacking<br />HTTP Response Splitting<br />
  3. 3. OWASP Top 10 2010<br />
  4. 4. Definición<br />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<br />Muy peligrosa pese a que, por desgracia, se le suele dar poca importancia<br />
  5. 5. Tipos de XSS<br />XSS Permanente<br />Datos enviados desde el cliente para su almacenamiento en el Servidor<br />Datos que van a ser visualizados por otros clientes/usuarios<br />Al devolver los datos el Servidor al navegador cliente se produce la manipulación de la página en el navegador cliente<br />
  6. 6. Tipos de XSS<br />XSS no permanente<br />El atacante monta un enlace aprovechando un parámetro vulnerable a XSS donde realiza la manipulación<br />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”<br />
  7. 7. Riesgos<br />Ejecución de código en contexto el usuario que visualiza los datos<br />Navegación dirigida<br />Phising<br />Spyware<br />Robo de credenciales<br />Ejecución de acciones automáticas<br />Defacement<br />
  8. 8. Robo de Sesiones (XSS)<br />Mediante esta técnica se puede robar sesiones de una manera bastante sencilla<br />Bastaría con realizar un script que llamase a una página alojada en nuestro servidor pasándole la cookie<br />Este Script se colaría en el servidor de la victima aprovechando un punto vulnerable a XSS<br />Cuando un usuario este logueado en el servidor y ejecute el script se enviara a nuestro servidor el contenido de la cookie<br />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<br />
  9. 9. Robo de Sesiones (XSS)<br />Por supuesto esta cookie es válida para robar la sesión solo mientras el usuario no cierre la sesión<br />
  10. 10. Robo de sesiones (SessionFixation)<br />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<br />
  11. 11. Robo de sesiones (SessionFixation)<br />Si el servidor no admite identificadores de Sesión por GET/POST sería posible utilizar XSS para sobrescribir el valor del identificador<br />
  12. 12. Impedir acceso a la cookie mediante javascript<br />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.<br />Test HTTPOnly: http://greebo.net/owasp/httponly.php<br />
  13. 13. Robo de sesión (Sessionsidejacking)<br />Otra técnica para robar sesiones consiste en esnifar la red a la espera de cookies conocidas, utilizadas par mantener la sesión.<br />Valido para aquellos sitio web que realizan inicio de sesión bajo SSL, pero acto seguido trabajan bajo HTTP.<br />Firesheep<br />Facebook<br />Twitter<br />Tuenti<br />…<br />
  14. 14. Robo de sesión (Sessionsidejacking)<br />
  15. 15. Cross SiteRequestForgey (CSRF)<br /><ul><li>Consiste en crear sitios maliciosos (o manipulados mediante XSS) que realicen peticiones “conocidas” a otros sitios victima.
  16. 16. 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.</li></li></ul><li>Robo de sesión (Cookie hijacking)<br /><ul><li>Es necesario poder esnifar la red de la victima:
  17. 17. Red cableada, wifi, Dan Kaminsky's DNS hijack attack, ...
  18. 18. Haremos que la victima haga peticiones GET a imagenes de los portales a los que la victima accede
  19. 19. Injeccion TCP/CSRF</li></li></ul><li>Robo de Sesiones<br />La cookie de sesión debe transmitirse únicamente a través del canal SSL<br />Marca la cookie de sesión con el flag “Secure”<br />
  20. 20. HTTP Response Splitting<br />Conseguir introducir en la respuesta del servidor el retorno de carro (CR 0x0D) y cambio de línea (LF 0x0Q) para:<br />Establecer encabezados<br />Modificar el cuerpo de la respuesta<br />Dividir la respuesta en partes<br />Todo ello con el objetivo de realizar:<br />Ataques XSS<br />Defacement<br />Cache poisoning<br />…<br />
  21. 21. HTTP Response Splitting<br />Ejemplo:<br />http://192.168.2.100:8080/UEM/registro.jsp?page=registro.html<br />Resultado<br /><% response.sendRedirect(request.getParameter("page")); %><br />
  22. 22. HTTP Response Splitting<br />Ejemplo:<br />http://192.168.2.100:8080/UEM/registro.jsp?page=registro.html%0D%0ALocation: javascript:%0D%0A%0D%0A<script>alert(document.cookie)</script><br />Resultado<br />HTTP/1.1 302 Moved Temporarily<br />Server: Apache-Coyote/1.1<br />X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1<br />Location=http://192.168.2.100:8080/UEM/registro.html <br />Location: javascript:<br /><script>alert(document.cookie)</script><br />Content-Type=text/html;charset=ISO-8859-1 <br />..<br />
  23. 23. Clickjacking<br /><ul><li>Evolución del Cross SiteRequestForgey (CSRF).
  24. 24. 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).
  25. 25. A lo largo del año 2009, sitios como Twitter o Facebook han adolecido de estas vulnerabilidades.
  26. 26. Mitigar comprobando referer y requiriendovalidación GET y POST, no solo cookies</li></li></ul><li>Clickjacking<br />Para mitigar esta vulnerabilidad Microsoft propuso una solución, el uso de la cabecera HTTP X-FRAME-OPTIONS:<br />DENY : Bloquea la carga de la página en cualquier IFRAME<br />SAMEORIGN: Bloque la carga de la página en dominios externos<br />Página para chequear Clickjacking<br />http://blogs.msdn.com/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx<br />Resultados por navegadores<br />
  27. 27. Cross Domain Request<br />Inconveniente para los programadores: No es posible realizar peticiones AJAX a recursos que se encuentren en otros dominios.<br />Soluciones<br />W3C: Extiendo el objeto XMLHttpRequest<br />Microsoft: XDomainRequest en IE8<br />Seguridad:<br />Access-Control-Allow-Origin: Permite definir los dominios que pueden llamar a la página mediante AJAX (se permite el comodín *)<br />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<br />
  28. 28. ¿Qué hago como desarrollador?<br />ASP.NET<br />XSS habilitado por defecto en todas las páginas<br />Para deshabilitarlo: <br /><%@ Page… validateRequest=“false” … %><br />Microsoft Anti-Cross Site Scripting Library 1.5<br />Aglutina una serie de métodos para codificar la salida: <br />HtmlEncode, HtmlAttributeEncode, JavaScriptEncode, UrlEncode, VisualBasicScriptEncode, XmlEncode, XmlAttributeEncode<br />http://www.microsoft.com/downloads/details.aspx?FamilyId=EFB9C819-53FF-4F82-BFAF-E11625130C25&displaylang=en<br />
  29. 29. Filtrar la entrada<br />Listas negras vs listas blancas<br />Palabras/Caracteres prohibidos<br />Script, <, >, ‘, ‘’, …<br />Caracteres/Construcciones permitidas<br />Uso intensivo de expresiones regulares<br />[A-Za-z0-9.,_]{0,10}<br />[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}<br />¿Qué hago como desarrollador?<br />¿Qué técnica uso?<br />
  30. 30. ¿Qué hago como desarrollador?<br />Java<br />Trabajando con Struts utilizar para salida mecanismos como: <br /><bean: write …><br />Trabajando con JSLT (JavaServerPages Standard Tag Library) utilizar por defecto la opción:<br />escapeXML = “true”<br />No usar nunca:<br /><%= …%><br /><jsp:getProperty property=“…" name=“…"/><br />${bean.property}<br />
  31. 31. ¿Qué hago como desarrollador?<br />PHP<br />Utilizar htmlentities() o htmlspecialchars()<br />OWASP PHP AntiXSS Library<br />SafeHTML v.1.3.7<br />Anti-XSS HTML Parser<br />http://pixel-apes.com/safehtml/?page=safehtml<br />

×