Curso basicoseguridadweb slideshare3

854 views

Published on

Curso básico seguridad web 3:
Vulnerabilidades web

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

  • Be the first to like this

No Downloads
Views
Total views
854
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
49
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Curso basicoseguridadweb slideshare3

  1. 1. SEGURIDAD Y APLICACIONES WEB Licencia Creative Commons Esta obra esta distribuida bajo una licencia de: <ul><li>Reconocimiento (Attribution): En cualquier explotación de la obra autorizada por la licencia hará falta reconocer la autoría.
  2. 2. No Comercial (Non commercial): La explotación de la obra queda limitada a usos no comerciales.
  3. 3. Compartir Igual (Share alike): La explotación autorizada incluye la creación de obras derivadas siempre que mantengan la misma licencia al ser divulgadas. </li></ul>
  4. 4. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Vulnerabilidades WEB
  5. 5. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web
  6. 6. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web SQL Injection
  7. 7. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Vamos a explicar un poco más en profundidad algunas de las vulnerabilidades web más comunes y como prevenirlas <ul><li>Sql Injection
  8. 8. XSS </li></ul><ul><ul><li>XSRF </li></ul></ul><ul><li>Abuso de funcionalidad
  9. 9. Fuerza bruta </li></ul>
  10. 10. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web SQL INJECTION Es un método de infiltración de código que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para ejecutar querys contra la base de datos de la aplicación.
  11. 11. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Ejemplo código vulnerable (Username y password se recogen de un formulario en pantalla) </li></ul>conn = pool.getConnection( ); String sql = &quot;select * from user where username='&quot; + username +&quot;' and password='&quot; + password + &quot;'&quot;; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); if (rs.next()) { loggedIn = true; out.println(&quot;Successfully logged in&quot;); } else { out.println(&quot;Username and/or password not recognized&quot;); }
  12. 12. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Ataque: </li></ul>Username == ' OR '1'='1 Password vacio La sentencia SQL que se ejecuta en la BD quedaría: select * from user where username='' OR '1'='1' and password=' ' Esta sentencia devolverá todos los datos de la tabla y la aplicación nos permitirá ingresar en el sistema.
  13. 13. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Nos podemos encontrar varios escenarios en los cuales explotar esta vulnerabilidad: <ul><li>La aplicación presenta mensajes de error de la BD
  14. 14. La aplicación presenta información en pantalla devuelta por la query
  15. 15. La aplicación presenta una pantalla de error genérica cuando la query falla </li></ul>
  16. 16. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>La aplicación presenta mensajes de error de la BD </li></ul>
  17. 17. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>La aplicación presenta información en pantalla devuelta por la query </li></ul>
  18. 18. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>La aplicación presenta una pantalla de error genérica cuando la query falla </li></ul>
  19. 19. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Porque son importantes estos tres escenarios? Nivel de información que nos dan y facilidad a la hora de extraerla <ul><li>Errores en pantalla: Versiones de Bd y en que estamos fallando al componer la query
  20. 20. Resultados de la query: Nos permiten obtener de vuelta los resultados de la query
  21. 21. Pantalla de error genérica: Nos fuerza a realizar Blind SQL Injection (Inyección SQL ciega) </li></ul>
  22. 22. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Que podemos conseguir al explotar una vulnerabilidad de SQLi en una aplicación? <ul><li>Mínimo: </li></ul><ul><ul><li>Consultar, modificar o insertar los datos en las tabla sobre la que se realiza la query </li></ul></ul><ul><li>Si añadimos permisos mal configurados </li></ul><ul><ul><li>Consulta, modificación e inserción en todas las tablas a las que pueda acceder el usuario de BD (usuarios del sistema incluidas)
  23. 23. Ejecución de exploits sobre la BD que nos permita realizar una escalada de privilegios </li></ul></ul>
  24. 24. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Como evitar los ataques de SQLi? <ul><li>Validar TODAS las entradas que provengan del usuario.
  25. 25. En java utilizar la clase PreparedStatement.
  26. 26. El usuario de BD configurado en el servidor debe tener los mínimos privilegios posibles.
  27. 27. Controlar todos los errores que se puedan devolver presentando en todos los casos una pantalla de error genérica que no de ninguna información sobre el sistema y/o error. </li></ul>
  28. 28. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Validar TODAS las entradas. </li></ul><ul><ul><li>La validación se debe realizar en el servidor
  29. 29. Javascript NO SIRVE para securizar la entrada
  30. 30. Da igual que los datos vayan por POST o por GET
  31. 31. Se pueden inyectar TODOS los datos que viajan del navegador al servidor. </li></ul></ul>
  32. 32. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web JavaScript NO APORTA NINGUNA PROTECCIÓN
  33. 33. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Los métodos recomendados para la prevención de sql injectión para cualquier lenguaje de programación son: </li></ul><ul><ul><li>Uso de queries parametrizadas o Use de procedimientos almacenados
  34. 34. Escapar la entrada del usuario
  35. 35. Usuario de BD de la aplicación con mínimos privilegios
  36. 36. Lista blanca de validación </li><ul><li>Los datos solo pueden ser del tipo esperado (string, date, ...) </li></ul></ul></ul>
  37. 37. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Se deben aplicar todos estos métodos Estas políticas se implementarán SIEMPRE del lado servidor
  38. 38. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>En general para todos los lenguajes existen recomendaciones sobre como protegernos frente a Sqli </li></ul><ul><ul><li>En java: </li><ul><li>Usar la clase PreparedStatement
  39. 39. Hibernate </li><ul><li>CreateQuery con bind parameters </li></ul></ul><li>En PHP </li><ul><li>db->prepare
  40. 40. sql->bind_param
  41. 41. mysql_real_escape_string para mysql </li></ul></ul></ul>
  42. 42. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Ejemplo query con java: </li></ul>String custname = request.getParameter(&quot;customerName&quot;); // This should REALLY be validated too // perform input validation to detect attacks String query = &quot;SELECT account_balance FROM user_data WHERE user_name = ? &quot;; PreparedStatement pstmt = connection.prepareStatement( query ); pstmt.setString( 1, custname); ResultSet results = pstmt.executeQuery( );
  43. 43. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Algunas referencias en la web: http://es.wikipedia.org/wiki/Inyección_SQL https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API
  44. 44. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¡No debemos olvidar que el simple hecho de seguir estas recomendaciones no aporta una seguridad absoluta! Se debe codificar el acceso a base de datos con la seguridad en mente.
  45. 45. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web XSS Cross Site Scripting
  46. 46. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Cross Site Scripting (XSS) Vulnerabilidad que permite inyectar scripts o contenido en páginas web. <ul><li>Tipos: </li></ul><ul><ul><li>No persistente
  47. 47. Persistente </li></ul></ul>
  48. 48. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Se da cuando se utiliza la entrada del usuario para componer la respuesta html que devolverá el servidor. </li></ul><ul><ul><li>Si la entrada del usuario se guarda en BD y se utiliza posteriormente para componer la salida html hacia el cliente a esta vulnerabilidad se le denomina XSS persistente
  49. 49. Si no es así la denominará XSS no persistente </li></ul></ul>
  50. 50. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>XSS No Persistente </li></ul><ul><ul><li>El ejemplo más popular actualmente el de la página web de la presidencia europea y mr. Bean
  51. 51. Http ://www.eu2010.es/en/resultadoBusqueda.html?query= %3Cscript%3Edocument.write%28%27%3Cimg%20src%3D%22http%3A%2F%2Fblog.tmcnet.com%2Fblog%2Ftom-keating%2Fimages%2Fmr-bean.jpg%22%20%2F%3E%27%29%3C%2Fscript%3E& index=buscadorGeneral_en
  52. 52. <script>document.write('<img src=”http /../mr-bean.jpg”/>')</script> </li></ul></ul>
  53. 53. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>XSS Persistente </li></ul><ul><ul><li>Más peligroso que el anterior, sobre todo porque es más difícilmente detectable (no se verá en la url) y es más probable que el número de afectados sea mayor.
  54. 54. Sucede cuando la inyección realizada por el atacante es guardada en el servidor y usada para componer la página atacada cada vez que es solicitada por algún usuario. </li></ul></ul>
  55. 55. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Que podemos conseguir al explotar una vulnerabilidad de XSS? <ul><li>Este tipo de vulnerabilidad afecta principalmente al usuario de la aplicación web
  56. 56. Se pueden robar credenciales de los servicios en los que este acreditado el usuario en el momento de ejecución del script (cookies de sesión , …)
  57. 57. También se pueden ejecutar exploits que aprovechen vulnerabilidades del navegador pudiendo llegar a tener el control sobre el equipo de la víctima. </li></ul>
  58. 58. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Como evitar los ataques de XSS? <ul><li>Validar TODAS las entradas que provengan del usuario.
  59. 59. Validar TODAS las salidas de datos de la aplicación que provengan de datos introducidos anteriormente por un usuario </li></ul>
  60. 60. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Validar TODAS las entradas. </li></ul><ul><ul><li>La validación se debe realizar en el servidor
  61. 61. Javascript NO SIRVE para securizar la entrada
  62. 62. Da igual que los datos vayan por POST o por GET
  63. 63. Se pueden inyectar TODOS los datos que viajan del navegador al servidor. </li></ul></ul>
  64. 64. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Algunas recomendaciones <ul><ul><li>Lista blanca </li><ul><li>Cada tipo de dato debe contener datos del tipo que deben: (Alfanumericos, Alfabeticos, Fecha, Numero de documento, nombre de archivo,...) </li></ul><li>Sanear tanto la entrada y como la salida de datos </li><ul><li>Remover etiquetas html </li><ul><li><script ...>, <img ...>, … </li></ul><li>Escapar la entrada antes de introducirla en BD
  65. 65. Escapar la salida antes de devolverla al cliente </li></ul></ul></ul>
  66. 66. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><ul><li>Lista negra. Ejemplo Java </li><ul><li>La idea es sustituir aquellas cadenas que pueden suponer un peligro por caracteres inocuos
  67. 67. String description = request.getParameter(&quot;description&quot;);
  68. 68. description = description.replaceAll(&quot;<&quot;, &quot;&lt;&quot;).replaceAll(&quot;>&quot;, &quot;&gt;&quot;);
  69. 69. description = description.replaceAll(&quot;eval((.*))&quot;, &quot;&quot;);
  70. 70. description = description.replaceAll(&quot;[&quot;'][s]*((?i)javascript):(.*)[&quot;']&quot;, &quot;&quot;&quot;&quot;);
  71. 71. description = description.replaceAll(&quot;((?i)script)&quot;, &quot;&quot;); </li></ul></ul></ul>
  72. 72. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Enlaces útiles: <ul><li>Recomendaciones: </li></ul><ul><ul><li>https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
  73. 73. http://en.wikipedia.org/wiki/Cross-site_scripting </li></ul></ul><ul><li>Librerías que aportan funcionalidad antiXSS </li></ul><ul><ul><li>https://www.owasp.org/index.php/ESAPI
  74. 74. http://wpl.codeplex.com/ </li></ul></ul>
  75. 75. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¡No debemos olvidar que el simple hecho de seguir estas recomendaciones no aporta una seguridad absoluta! Se debe codificar la entrada y salida de datos de la aplicación teniendo la seguridad en mente
  76. 76. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web XSRF Cross Site Request Forgery
  77. 77. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Cross Site Request Forgery (XSRF) Consiste en forzar al navegador web validado de una víctima a enviar una petición a una aplicación web vulnerable, la cual entonces realiza la acción elegida a través de la víctima. Se entiende que todo esto sin el consentimiento ni conocimiento de dicha víctima
  78. 78. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Ejemplo: Navegador con dos pestañas abiertas: </li></ul><ul><ul><li>En una de ella estamos autenticados en bank.example.com con nuestras credenciales
  79. 79. En la otra estamos navegando por un site que contiene el siguiente código: </li></ul></ul><img src=&quot;http ://bank.example.com/transfiere?cuentaDesde=paco&cantidad=1000000&cuentaHasta=jc&quot;> <ul><li>De esta forma se realiza la transferencia utilizando la sesión ya iniciada en la otra pestaña. </li></ul>
  80. 80. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Que se puede conseguir al explotar una vulnerabilidad XSRF? Realizar cualquier acción que no requiera validación del usuario en las aplicaciones web en que este autenticado en dicho momento.
  81. 81. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Como evitar los ataques de XSRF? <ul><li>Uso de tokens según el patrón Synchronizer Token Pattern (se genera un token aleatorio para cada formulario/sesión que se devuelve, este token tendrá que venir de vuelta con la solicitud.
  82. 82. Configurar tiempos de expiración del token razonablemente cortos.
  83. 83. Por parte del usuario: </li></ul><ul><ul><li>Abandonar la sesión realizando logout,
  84. 84. No tener varias pestañas abiertas en el navegador. </li></ul></ul>
  85. 85. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Abuso de funcionalidad
  86. 86. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Es una técnica que usa las funcionalidades de la aplicación web para atacarla aplicación, al usuario de la misma o atacar a otros.
  87. 87. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Ejemplo: </li></ul><ul><ul><li>Funcionalidad: Login </li><ul><li>La aplicación informa si es el usuario o la clave lo que esta mal </li></ul><li>Mediante fuerza bruta sobre el usuario se puede conseguir una lista de usuarios validos del sistema </li></ul></ul>
  88. 88. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Que se puede llegar a conseguir? <ul><li>Al ser un ataque aprovecha la funcionalidad de la aplicación no se puede describir la totalidad de posibilidades ya que dependerán de las funcionalidades de la aplicación.
  89. 89. Algo habitual es poder conseguir nombre de usuarios o direcciones de correo validas, una vez conseguidas las mismas se pueden lanzar ataques de fuerza bruta sobre las claves. </li></ul>
  90. 90. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Como evitar los ataques de abuso de funcionalidad? <ul><li>Al diseñar una aplicación se debe de tener en cuenta la seguridad de la misma y el mal uso que se podría realizar de sus funcionalidades para prevenirlas desde el mismo momento del diseño. </li></ul>
  91. 91. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Fuerza bruta
  92. 92. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Ataque realizado generalmente sobre las claves de un sistema. Consiste en probar todas las combinaciones posibles de clave. Usualmente se usa combinado con ataques de diccionario. Ataque de diccionario: <ul><li>Ataque de fuerza bruta donde se prueban todas las palabras contenidas en un diccionario o variaciones sobre las mismas. </li></ul>
  93. 93. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Que se puede conseguir con este sistema? Acceder a cualquier servicio cuya seguridad depende únicamente del conocimiento de la contraseña: <ul><li>Usuario de un sistema operativo.
  94. 94. Clave wifi (wpa y wep)
  95. 95. Usuario de una aplicación web
  96. 96. Contraseña de un archivo cifrado </li></ul>
  97. 97. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Es efectivo este sistema? Bastante: Las claves suelen ser muy cortas y predecibles
  98. 98. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Como evitar los ataques de fuerza bruta? Seguir una política robusta de generación, renovación y almacenamiento de contraseñas. <ul><ul><li>Más de ocho caracteres
  99. 99. Mayúsculas, minúsculas, números, caracteres especiales
  100. 100. No basada en diccionario ni en datos fácilmente predecibles
  101. 101. Cambiarlas periódicamente
  102. 102. Usar algún software que nos permita gestionarlas (keepass) </li></ul></ul>
  103. 103. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Como evitar los ataques de fuerza bruta? <ul><li>En el diseño de aplicaciones </li></ul><ul><ul><li>Obligar a seguir pautas de passwords seguras
  104. 104. Inhabilitar cuentas tras n intentos fallidos
  105. 105. Introducir un retardo variable tras cada fallo al intentar introducir la contraseña
  106. 106. Uso de Captchas para dificultar la tarea del software de fuerza bruta </li><ul><li>Digo dificultar y no impedir ya que ya existe software que se salta de manera bastante eficiente los captchas </li></ul></ul></ul>
  107. 107. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web DOS Denial Of Service Denegación de servicio
  108. 108. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Es un ataque contra la disponibilidad de la aplicación Consiste en explotar alguna vulnerabilidad de la aplicación o servidor para hacer que dicha aplicación no este disponible para los usuarios
  109. 109. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web <ul><li>Existen diversas técnicas DOS conocidas. Algunas de ellas son: </li></ul><ul><ul><li>SYN Flood </li><ul><li>Se realiza en el nivel TCP/IP enviando multitud de paquetes solicitando conexión pudiendo o no falsear la ip de origen.
  110. 110. La idea subyacente es conseguir ocupar todas las conexiones disponibles del servidor dejándolos a la espera de una comunicación que no será establecida </li></ul><li>Tear Drops attacks </li><ul><li>Consiste en enviar paquetes IP malformados. Este ataque explotaba una vulnerabilidad en el tratamiento de la pila IP en diversos so's </li></ul></ul></ul>
  111. 111. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web La idea subyacente es conseguir agotar con peticiones especiales alguno de los recursos de los cuales dispone el servidor (memoria, disco, procesador, …) de tal forma que dicho servidor no pueda atender al resto de usuarios. Dada la potencia de los servidores frente a la potencia disponible para un único atacante el ataque debe ser realizado aprovechando alguna vulnerabilidad del lado servidor.
  112. 112. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web En aplicaciones web: <ul><li>Cuando diseñamos aplicaciones web donde alguna de sus funcionalidades consume grandes cantidades de recursos de servidor se tienen que tener en cuenta este tipo de ataques ya que pueden ser utilizados como vector para un DOS
  113. 113. Ejemplo: </li></ul><ul><ul><li>Querys pesadas
  114. 114. Guardar ficheros que envía el usuario
  115. 115. …. </li></ul></ul>
  116. 116. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web DDOS Distributed Denial Of Service DOS distribuido
  117. 117. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web El ataque tiene la misma base técnica que el DOS. La única diferencia es que se ejecuta dicho ataque DOS desde un numero grande de equipos facilitando el éxito del ataque
  118. 118. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Cuando el número de atacantes distribuidos es muy grande, por ejemplo, 1 millón de equipos no tiene porque ser necesaria la explotación de una vulnerabilidad para que tenga éxito. El simple acto de solicitar una página de un servidor web de manera rápida y sostenida por un número elevado de atacantes dejará indisponible dicho servidor para el resto de usuarios legítimos y en determinados casos podría producir su caída alargando consecuentemente su indisponibilidad
  119. 119. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Algunas formas de mitigar este tipo de ataques pero la complejidad y el coste de los mismos suele ser alto. Por ejemplo: <ul><li>Contar en la red con equipos IPS (Intrude Prevention System) esto es sistemas que analicen el tráfico hacia el servidor y que en base a reglas (más de 10 peticiones/segundo desde una misma IP) bloqueen el tráfico desde dicha IP. </li></ul>
  120. 120. SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Como hemos visto es importante tener en cuenta la seguridad tanto en la creación aplicaciones web ya que se pueden crear involuntariamente agujeros que afecten a la seguridad de toda la organización. El mejor consejo: Tener la seguridad tan en cuenta como se puedan tener el rendimiento o la funcionalidad de una aplicación.

×