Seguridad en el desarrollo de aplicaciones web

7,422 views

Published on

Como desarrolladores web, una de las principales preocupaciones es cuán vulnerables son nuestros sitios o aplicaciones web. Esta charla explica algunos riesgos de seguridad y, más importante, cómo evitarlos. Basado en los riesgos de seguridad más críticos en el desarrollo web según OWASP Top Ten 2010, y con algunos ejemplos en PHP (aunque es fácilmente aplicable en otros entornos).

Published in: Technology
3 Comments
7 Likes
Statistics
Notes
No Downloads
Views
Total views
7,422
On SlideShare
0
From Embeds
0
Number of Embeds
33
Actions
Shares
0
Downloads
409
Comments
3
Likes
7
Embeds 0
No embeds

No notes for slide

Seguridad en el desarrollo de aplicaciones web

  1. 1. Seguridad en el desarrollo deaplicaciones web Juan Eladio Sánchez Rosas Mozilla Perú
  2. 2. ¿Seguridad en el desarrollo deaplicaciones web?
  3. 3. Tres principios, tres 1 Defensa en profundidad 2 Menos privilegios 3 Lo menos complicado
  4. 4. Dos prácticas generales Filtrar entradas Asegurarse que los datos de entrada son válidos Escapar salidas Asegurar que los datos salientes no se malinterpreten
  5. 5. ¿Por dónde empezar? https://secure.flickr.com/photos/cdharrison/359763327/
  6. 6. OWASP● Proyecto Abierto de Seguridad en Aplicaciones Web● Comunidad abierta dedicada a habilitar a las organizaciones para desarrollar, comprar y mantener aplicaciones confiables.
  7. 7. OWASP Top 10 2010● Diez Riesgos Más Críticos sobre Seguridad en Aplicaciones
  8. 8. Inyección 1
  9. 9. 1Inyección - Ejemplo● Efectuar una consulta a partir de un dato enviado como parámetro ● http://caralibro.com/usuario.php?id=8262 ● $sql = SELECT * FROM USERS where id = . $_GET[id];● ¿Qué pasa si ingreso sentencias SQL?
  10. 10. 1Inyección - Riesgos Explotación FÁCIL Prevalencia COMÚN Detección MEDIA Impacto SEVERO
  11. 11. 1Inyección - Nota● Inyección no es sólo SQL ● LDAP ● Envío de e-mail ● Comandos de SO ● ...
  12. 12. 1Inyección - Defensa● Usar una API segura que evite el uso del intérprete o provea una interface parametrizada ● $stmt = $dbh->prepare("SELECT * FROM USERS where id = ?"); ● if ($stmt->execute(array($_GET[id]))) {
  13. 13. 1Inyección - Defensa● Si no hay una API segura validar entradas ● if (is_int($_GET[id])) { ● if (filter_var($_GET[id],FILTER_VALIDATE_IN T))
  14. 14. Secuencia de Comandos en SitiosCruzados (XSS) 2
  15. 15. Secuencia de Comandos en Sitios 2Cruzados (XSS) - Ejemplo● El contenido de una página se carga imprimiendo un dato ingresado previamente ● http://caralibro.com/buscar.php? cadena=Equipos ● echo $cadena;● ¿Qué pasa si ingreso etiquetas HTML en la variable cadena?
  16. 16. Secuencia de Comandos en Sitios 2Cruzados (XSS) - Ejemplo● ¿Y si comparto el enlace modificado?● ¿Y si vuelvo persistente el dato en la base de datos?
  17. 17. Secuencia de Comandos en Sitios 2Cruzados (XSS) - Ejemplo
  18. 18. Secuencia de Comandos en Sitios 2Cruzados (XSS) - Riesgos Explotación MEDIA Prevalencia MUY DIFUNDIDA Detección FÁCIL Impacto MODERADO
  19. 19. Secuencia de Comandos en Sitios 2Cruzados (XSS) - Defensa● Escapar todos los datos no confiables ● htmlentities($_GET[cadena]); ● filter_var($_GET[cadena], FILTER_SANITIZE_FULL_SPECIAL_CHAR S);
  20. 20. Secuencia de Comandos en Sitios 2Cruzados (XSS) - Defensa● Validación de entradas positivas (permitir ciertas etiquetas) ● Funciones más complicadas
  21. 21. Pérdida de Autenticación y Gestiónde Sesiones 3
  22. 22. Pérdida de Autenticación y Gestión 3de Sesiones - Ejemplo● Un usuario mantiene su sesión activa siguiendo enlaces que incluyen su identificador de sesión ● http://caralibro.com/preferencias.php? sessionid=52e83279678a● ¿Si copio el enlace en otra PC, ingreso a la misma página?
  23. 23. Pérdida de Autenticación y Gestión 3de Sesiones - Ejemplo● Un usuario inicia sesión desde una cabina de Internet y luego cierra el navegador sin cerrar sesión● ¿Qué sucede si luego otro usuario entra a la misma web?
  24. 24. Pérdida de Autenticación y Gestión 3de Sesiones - Ejemplo● Un atacante accede a la base de datos de contraseñas SIN CIFRAR
  25. 25. Pérdida de Autenticación y Gestión 3de Sesiones - Riesgos Explotación MEDIA Prevalencia COMÚN Detección MEDIA Impacto SEVERO
  26. 26. Pérdida de Autenticación y Gestión 3de Sesiones - Defensa● Un fuerte control de gestión de sesiones● Tiempos límites de vigencia● ¡¡¡Cifrar las claves de tus usuarios!!!● session_regenerate_id(TRUE)
  27. 27. Referencia Directa Inseguraa Objetos 4
  28. 28. Referencia Directa Insegura 4a Objetos - Ejemplo● El usuario accede a información personal con una dirección que incluye su identificador ● http://caralibro.com/cuenta.php?id=87392● ¿Qué pasa si cambio el valor de id?
  29. 29. Referencia Directa Insegura 4a Objetos - Riesgo Explotación FÁCIL Prevalencia COMÚN Detección FÁCIL Impacto MODERADO
  30. 30. Referencia Directa Insegura 4a Objetos - Defensa● Comprobar que el usuario tiene los privilegios para acceder al recurso ● if ($_GET[id]==$_SESSION[id])
  31. 31. Falsificación de Peticiones en SitiosCruzados (CSRF) 5
  32. 32. Falsificación de Peticiones en Sitios 5Cruzados (CSRF) - Ejemplo● Una aplicación de correo electrónico permite configurar una cuenta adicional para reenviar los mensajes ● http://caralibro.com/reenviar.php? mail=root@local.com● Qué pasa si creo una página con una etiqueta HTML que hace una llamada a la URL con otra dirección e-mail
  33. 33. Falsificación de Peticiones en Sitios 5Cruzados (CSRF) - Riesgos Explotación MEDIA Prevalencia MUY COMÚN Detección FÁCIL Impacto MODERADO
  34. 34. Falsificación de Peticiones en Sitios 5Cruzados (CSRF) - Defensa● Incluir token (testigo) en la petición, de preferencia de manera oculta: ● <input type="hidden" name="token" value="856c2f50ddc49fd710f14a406ec1fef6 52d3c9f">
  35. 35. Defectuosa Configuración deSeguridad (NUEVO) 6
  36. 36. Defectuosa Configuración de 6Seguridad (NUEVO) - Ejemplo● Se descubre una vulnerabilidad importante en el framework empleado en la aplicación ● Una actualización corrige el problema● ¿Qué pasa si nadie actualiza la versión en la aplicación?
  37. 37. Defectuosa Configuración de 6Seguridad (NUEVO) - Ejemplo
  38. 38. Defectuosa Configuración de 6Seguridad (NUEVO) - Ejemplo● Una herramienta administrativa es instalada en el servidor web y se deja accesible sin clave ● http://caralibro.com/phpmyadmin● ¿Qué sucede si comienzan a adivinar URLs?
  39. 39. Defectuosa Configuración de 6Seguridad (NUEVO) - Ejemplo● Se suben por error carpetas .SVN en el servidor de producción● ¿Qué sucede si la configuración del servidor web permite ver archivos ocultos?
  40. 40. Defectuosa Configuración de 6 Seguridad (NUEVO) - Ejemplo ● La aplicación muestra el detalle completo de los errores ● ¿Y si el detalle completo muestra información relevante del funcionamiento de la aplicación?ERROR [credit-card-db] (MySqlSystem.java:1331) - Invalid column namejava.sql.SQLException: Invalid column name ‘social_security_numbre’: selectusername, password, ssn from users where id = ?sun.jdbc.rowset.CachedRowSet.getColIdxByName(CachedRowSet.java:1383) at com.mysql.Driver.MySQLDriver.a(MySQLDriver.java:2531) at sun.jdbc.rowset.CachedRowSet.getString(CachedRowSet.java:2167) at com.ppe.db.MySqlSystem.getReciPaying(MySqlSystem.java:1318) at control.action.FindUserAction.perform(FindKeyUserAction.java:81) at org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1586) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:492) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
  41. 41. Defectuosa Configuración de 6Seguridad (NUEVO) - Ejemplo
  42. 42. Defectuosa Configuración de 6Seguridad (NUEVO) - Riesgos Explotación FÁCIL Prevalencia COMÚN Detección FÁCIL Impacto MODERADO
  43. 43. Defectuosa Configuración de 6Seguridad (NUEVO) - Defensa● Definir procesos para actualizar versiones de herramientas empleadas● Verificar que herramientas administrativas no se encuentren accesibles● Proteger la configuración de los componentes que usa la aplicación● Deshabilitar mensajes de errores, advertencias o información
  44. 44. Almacenamiento CriptográficoInseguro 7
  45. 45. Almacenamiento Criptográfico 7Inseguro - Ejemplo● Una aplicación almacena archivos cifrados pero la clave de cifrado es accesible.
  46. 46. Almacenamiento Criptográfico 7Inseguro - Ejemplo● La base de datos de claves usa algún algoritmo hash pero sin “sal” (un dato adicional que se suma al valor original) ● md5($_POST[clave]);● Un ataque de fuerza bruta demora menos en encontrar la clave si ésta no está sumada a una “sal”
  47. 47. Almacenamiento Criptográfico 7Inseguro - Riesgos Explotación DIFÍCIL Prevalencia POCO COMÚN Detección DIFÍCIL Impacto SEVERO
  48. 48. Almacenamiento Criptográfico 7Inseguro - Defensa● Asegúrese de que los datos cifrados y la clave que los descrifra se encuentran en lugares distintos
  49. 49. Almacenamiento Criptográfico 7Inseguro - Defensa● Utilice una “sal” al usar un algoritmo hash ● md5($sal.$_POST[clave]);
  50. 50. Almacenamiento Criptográfico 7Inseguro - Defensa● Dejar de usar algoritmos MD5, SHA1, DES.
  51. 51. Almacenamiento Criptográfico 7Inseguro - Nota● Usa SHA-256, AES, RSA. ● hash(sha256,$sal.$_POST[clave]);
  52. 52. Falla de Restricción de Acceso aURL 8
  53. 53. Falla de Restricción de Acceso a 8URL - Ejemplo● Generalmente una aplicación web tiene una sección administrativa ● http://caralibro.com/admin● ¿La sección administrativa requiere clave?
  54. 54. Falla de Restricción de Acceso a 8URL - Riesgos Explotación FÁCIL Prevalencia POCO COMÚN Detección MEDIA Impacto MODERADO
  55. 55. Falla de Restricción de Acceso a 8URL - Defensa● Verificar por cada página que se requiera que el usuario tenga los privilegios suficientes para acceder a ella. ● if (is_capable($_SESSION[userid],$page))
  56. 56. Protección Insuficiente en la Capade Transporte 9
  57. 57. Protección Insuficiente en la Capa 9de Transporte - Ejemplo● Una aplicación no utiliza certificados de seguridad en la transmisión de datos sensibles● ¿Qué sucede si un atacante lee las transmisiones del usuario?
  58. 58. Protección Insuficiente en la Capa 9de Transporte - Ejemplo● Una aplicación utiliza certificados de seguridad pero han sido mal configurados y muestran errores frecuentemente a los usuarios● ¿Qué sucede si un atacante crea una página falsa y que muestra errores similares?
  59. 59. Protección Insuficiente en la Capa 9de Transporte - Riesgos Explotación DIFÍCIL Prevalencia COMÚN Detección FÁCIL Impacto MODERADO
  60. 60. Protección Insuficiente en la Capa 9de Transporte - Defensa● Usar SSL para todas las páginas que utilizan datos sensibles
  61. 61. Protección Insuficiente en la Capa 9de Transporte - Defensa● Verificar que el certificado sea válido, no se haya vencido y esté configurado para todos los dominios usados por la aplicación.
  62. 62. Redirecciones y reenvíos novalidados (NUEVO) 10
  63. 63. Redirecciones y reenvíos no 10validados (NUEVO) - Ejemplo● Una aplicación tiene páginas del tipo redirect, con un parámetro URL ● http://caralibro.com/ir.php?url=curso.php● ¿Qué sucede si coloco una dirección externa en url?
  64. 64. Redirecciones y reenvíos no 10validados (NUEVO) - Ejemplo● Una petición envía, además de los datos normales, la url que mostrará al confirmarse la transacción ● http://caralibro.com/transaccion.php? dato1=cualquiera&exito=inicio.php● ¿Qué sucede si cambio el valor de exito?
  65. 65. Redirecciones y reenvíos no 10validados (NUEVO) - Riesgos Explotación MEDIA Prevalencia POCO COMÚN Detección FÁCIL Impacto MODERADO
  66. 66. Redirecciones y reenvíos no 10validados (NUEVO) - Defensa● Evitar usar redirecciones.● Si se utiliza, evitar que el usuario pueda manipular el destino.● También se debe asegurar que el destino será válido y autorizado.
  67. 67. Y esto es sólo el comienzo(para ustedes :D) Clickjacking ● ● Plugins (Flash, Acrobat, Java) ● XSS con CSS ● JSON con datos sensibles ● Remote Code Injection ● XSS + Ajax + CSRF https://secure.flickr.com/photos/anonymous9000/3644243073/
  68. 68. Referencias bibliográficas● OWASP Top Ten Project [Spanish Translation] https://www.owasp.org/index.php/Top_10● 2010: A Web Hacking Odyssey - Top Ten Hacks of the Year http://www.slideshare.net/jeremiahgrossman/2010-a-web-hacking-odyssey- top-ten-hacks-of-the-year● RIA And AJAX Security Workshop, Part 1 http://www.slideshare.net/astamos/ria-and-ajax-security-workshop-part-1- presentation● Evolution Of Web Security http://www.slideshare.net/shiflett/evolution-of-web- security● Rails Security Best Practices http://www.slideshare.net/ihower/rails-security- 3299368● Web Application Security Tutorial http://www.slideshare.net/xplodersuv/EducauseAnnualWebAppSecTutorialV3● Web Security Horror Stories http://www.slideshare.net/simon/web-security- horror-stories-presentation● PHP Security Consortium http://phpsec.org/● PHP Filtros de saneamiento http://php.net/manual/es/filter.filters.sanitize.php
  69. 69. https://secure.flickr.com/photos/nickstone333/3390456806/Todo esto … ¿tiene quever con Firefox?
  70. 70. Futuras publicaciones de FirefoxFirefox (Estable), Aurora y Mobilefirefox.com/channelFirefox Portable (ejecutable desde USB)mozilla.pe/firefox-portable
  71. 71. Complementos en Firefox● Hackbar
  72. 72. Complementos en Firefox● User Agent RG
  73. 73. Complementos en Firefox● PassiveRecon
  74. 74. Complementos en Firefox● FoxyProxy Standard
  75. 75. Complementos en Firefox● Tamper Data
  76. 76. Advertencia final La piratería en redes sin la previa autorización se considera un delito
  77. 77. Y una cosa más ... https://secure.flickr.com/photos/takomabibelot/2455018965/
  78. 78. Mozilla Perú /mozillaperu
  79. 79. Seguridad en el desarrollo deaplicaciones web Juan Eladio Sánchez Rosas slideshare.net/juaneladio

×