Seguridad web mediante Spring MVC y HDIV

  • Published on
    29-Jul-2015

  • View
    1.452

  • Download
    4

Embed Size (px)

Transcript

<ul><li><p>Seguridad web mediante Spring MVC y HDIVRoberto Velasco Sarasola</p></li><li><p>Experiencia:Seguridad informtica: s21sec (2001-2003)Desarrollo web en entornos Java: EuroHelp (2004-2012)</p><p>Fundador del proyecto open-source HDIV junto con Gorka Vicente (2005)</p><p>Actualmente responsable de Arquitectura de EuroHelp</p><p>Sobre el autor</p></li><li><p>ContenidosRiesgos web (OWASP top ten)Soluciones de seguridad tradicionalesArquitecturas segurasHDIV Integracin HDIV &amp; Spring MVC Aplicacin de ejemploFuturas versiones de HDIV</p></li><li><p> Las principales referencias en el mundo de la seguridad (securityfocus, CVE, ) indican que el principal riesgo proviene de la capa de aplicacin</p><p>Habitualmente relacionamos el concepto de seguridad a nivel aplicacin con:Autenticacin (usuario/password, certificado)Control de acceso:Controlar si un usuario puede acceder a una pantallaControlar si un usuario puede acceder o modificar un dato</p><p>Riesgos web</p></li><li><p>Es suficiente con preocuparnos de la autenticacin y el control de acceso?</p><p>No podemos olvidarnos de los riesgos inherentes a las aplicaciones webSon el principal foco de problemas de seguridad</p><p>Los principales riesgos web estn documentadosIncluidos en el Top Ten de OWASP 2010Riesgos web</p></li><li><p>OWASP (Open Web Application Security Project) top ten</p><p>A1 - InjectionA2 - Cross site scriptingA3 - Broken Authentication and Session ManagementA4 - Insecure Direct Object Reference A5 - Cross site Request ForgeryA6 - Security MisconfigurationA7 - Failure to restrict URL accessA8 - Insecure Cryptographic StorageA9 - Insufficient transport LayerA10- Unvalidated Redirects and forwards</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Inyection Flaws (A1)</p><p>El ms importante: SQL injection</p><p>Permite la modificacin de las SQL-s ejecutadas en el servidor</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Inyection Flaws (A1) - Ejemplo</p><p>String data =request.getParameter(data);String sql= select campo1 from tabla1 where id= + data + select campo1 from tabla1 where id=12 http://host?data=12Riesgos web (OWASP top ten)</p></li><li><p>Inyection Flaws (A1) - Ejemplo</p><p>String data=request.getParameter(data);String sql= select campo1 from tabla1 where id= + data + select campo1 from tabla1 where id=12 or 1=1http://host?data=12 or 1=1Riesgos web (OWASP top ten)</p></li><li><p>Inyection Flaws (A1) - Consecuencias</p><p>Modificacin de la BBDD</p><p>Consulta de datos ajenos</p><p>Riesgos web (OWASP top ten)</p></li><li><p>SQL Injection (A1) - Recomendaciones </p><p>Utilizar PreparedStatement en las consultasSoluciona el problema de raz no permitiendo esta vulnerabilidad</p><p> Validacin de entrada (whitelist en lo posible)</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Cross site scripting o XSS (A2)</p><p>Permite la ejecucin de scripts (Javascript,HTML,..) en el navegador de los clientes</p><p>Existen diferentes tipos de XSS:</p><p>Reflected: cuando una pgina visualiza directamente el dato (script) enviado por el atacante</p><p>Stored: cuando el script se consigue almacenarlo en el servidor (BBDD, fichero). Este es especialmente grave puesto que puede afectar a muchos usuarios, ejemplos: foros, CRM,Riesgos web (OWASP top ten)</p></li><li><p>Cross site scripting o XSS (A2) - EjemploRiesgos web (OWASP top ten)</p></li><li><p>Cross site scripting o XSS (A2) - Ejemplo</p><p> XSS Vulnerability Sample </p><p>XSS Vulnerability SampleEnter string here: Output from last command: </p><p>Riesgos web (OWASP top ten)</p></li><li><p>Cross site scripting o XSS (A2) Ejemplo</p><p>Si introducimos el siguiente texto en la caja de texto:</p><p> alert(If you see that you have a potential XSS Vulnerability);</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Cross site scripting o XSS (A2) - EjemploRiesgos web (OWASP top ten)</p></li><li><p>Cross site scripting o XSS (A2) ConsecuenciasRobo de sesiones Modificacin de pginasEs una de las bases para el phising</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Cross Site Scripting (A2) Recomendaciones</p><p>Utilizar los tags de los frameworks webEscapan la salida de los datos evitando el XSSValidacin de entrada (whitelist en lo posible)</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Broken Authentication and session management (A3) </p><p>Se trata de romper el sistema de autenticacin o el mantenimiento de la sesinPor ejemplo haciendo uso del referer en caso de que se incluya el jsessionid en la url</p><p>Los sistemas proporcionados por los servidores son seguros</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Insecure Direct Object Reference (A4) </p><p>Habitualmente una pgina HTML est llena de referencias de datos del servidor (identificadores BBDD, paths de ficheros,)</p><p>El cliente puede modificar dichos datos y acceder a datos que no le corresponden</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Insecure Direct Object Reference (A4)- Ejemplo En este caso el cliente puede seleccionar una cuenta que no le corresponde</p><p> cuenta1 cuenta2</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Cross Site Request Forgery (A5) </p><p>Se basa en provocar que un usuario autenticado realice una peticin que favorezca al atacante</p><p>La base del ataque habitualmente es una vulnerabilidad de XSS</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Cross Site Request Forgery (A5) - Ejemplo </p><p>El atacante ha puesto un mensaje en un foro vulnerable a XSS con el siguiente cdigo:</p><p>La base del ataque habitualmente es una vulnerabilidad de XSS</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Security Misconfiguration (A6)</p><p>Insecure Cryptographic storage (A7) </p><p>Failure to Restrict Url Access (A8) </p><p>Insufficient Transport Layer Protection (A9)</p><p>Unvalidated Redirects and Forwards (A10)</p><p>Riesgos web (OWASP top ten)</p></li><li><p>Habitualmente las aplicaciones web son desarrolladas sobre entornos de desarrollo o frameworks web (libreras)</p><p>Entornos de desarrollo ms utilizados:Java (Struts 1, JSF, Spring MVC, Struts 2, )Groovy/Grails.NET (Web Forms, MVC)PHPRuby</p><p>Soluciones de seguridad tradicionales</p></li><li><p>La mayora de entornos de desarrollo ofrecen soluciones para la seguridad tradicional:Autenticacin Control de accesoUrl (a nivel pantalla)Mtodo de negocioComponente grficoInstancia (registro BD)</p><p>Soluciones de seguridad tradicionales</p></li><li><p>Los usuarios (posibles atacantes) disponen de una gran libertadLos entornos de desarrollo o el propio protocolo HTTP permiten una gran libertad</p><p>Gracias a esta libertad se alimenta todo tipo de riesgos que fomentan la proliferacin de vulnerabilidades </p><p>Soluciones de seguridad tradicionales</p></li><li><p>Las soluciones ofrecidas por los entornos de desarrollo actuales obligan a la creacin de soluciones manuales</p><p>Una aplicacin es insegura por defectoDebe ser securizada de forma manual</p><p>Soluciones de seguridad tradicionales</p></li><li><p>Gran parte de las arquitecturas o soluciones actuales delegan mucha responsabilidad a las personas</p><p>La solucin es manual y muy costosa (las implicaciones econmicas son importantes)Especialmente la seguridad a nivel instancia</p><p>Posible solucin Disear entornos de desarrollo o arquitecturas segurasSecure by DesignSecure by Default</p><p>Arquitecturas seguras</p></li><li><p>No es posible realizar ningn ataque siempre y cuando el usuario se limite a un uso esperado de la aplicacinEn caso contrario estaramos ante un caso de un funcionamiento inadecuado</p><p>Es ms sencillo eliminar el riesgo que dar solucin a todas las consecuencias</p><p>Arquitecturas seguras</p></li><li><p>Solucin open-source (Apache 2.0) creada en 2005Impulsado por la empresa EuroHelp</p><p>Es una implementacin de los principios de Secure by Design o Secure by DefaultEs un complemento a la seguridad tradicional </p><p>Limita el radio de accin de los usuarios de las aplicaciones web a un uso lcito</p><p>HDIV</p></li><li><p>La implementacin actual de HDIV es para entornos JavaEs posible aplicar la misma idea a otras plataformas</p><p>Extiende gran parte de los frameworks Java web ms utilizados:Struts 1Struts 2Spring MVCJSF 1 &amp; JSF 2JSTL</p><p>HDIV</p></li><li><p>HDIV no altera el modelo de programacin de los frameworks extendidos</p><p>Se aplica de forma declarativa (va configuracin) y no es necesario modificar el cdigo fuente</p><p>HDIV</p></li><li><p>Integridad de los datos no editables (urls, parmetros,)SolucionaA1 (SQL Injection) A2 (XSS)A4 (Indirect Object Reference)A7 (Failure to Restrict URL Access)A10 (Unvalidated Redirects and Forwards)</p><p>Validacin genrica de editables (textarea, textbox)Reduce el riesgoA1 (SQL Injection)A2 (XSS)</p><p>HDIV - Funcionalidades</p></li><li><p>Token aleatorios en urls y formulariosSolucionaA5 (Cross-Site Request Forgery)</p><p>ConfidencialidadReduce el riesgoA2 (SQL Injection)</p><p>Logs de los ataques (incluyendo la identidad del usuario) y actividad anmala detectadaRealiza funcin de IDS (Intrusion Detection System)</p><p>HDIV - Funcionalidades</p></li><li><p>HDIV - Arquitectura</p></li><li><p>@RequestMapping(value = "/usuarios", method =RequestMethod.GET, produces ="application/json")</p><p>public @ResponseBodyList getUsuarios() { List usuarios = usuarioFacade.getUsuarios(); hdivComposer.addList(usuarios,parametro,propiedad); return usuarios;}</p><p>HDIV Arquitectura JSON</p></li><li><p>Depende del modo de ejecucin utilizadoMemoria (por defecto)HashCifrado</p><p>Haciendo uso del modo memoria (opcin recomendada)Tiempo de respuesta: 1-3 ms por requestMemoria: + 4-8%Depende mucho del tamao de cache definido CPU: + 1-2% </p><p>HDIV Rendimiento y consumos</p></li><li><p>Configuracin ptima:</p><p>Utilizar el modo de funcionamiento de memoria</p><p>Desactivar la validacin de las URLs sin parmetros (delegar esta responsabilidad a Spring Security)Mejora mucho los tiempos de respuesta y los consumos dado que no creamos un estado de HDIV para estos links</p><p>HDIV Rendimiento y consumos</p></li><li><p>Administracin pblicaBancaLogstica &amp; Transportes TelecomunicacionesAutomocin</p><p>HDIV - Usuarios de HDIV</p></li><li><p>Desde la versin 3.1 de Spring MVC se ha incorporado la integracin oficial con HDIVhttps://jira.springsource.org/browse/SPR-7943</p><p>Implementado mediante un nuevo interface de Spring MVC: RequestDataValueProcessor </p><p>Integracin HDIV &amp; Spring MVC</p></li><li><p>Gracias a esta nueva integracin se evita la necesidad de un tld diferente</p><p>Se hace uso de los tags de Spring MVC que hacen uso del nuevo interface RequestDataValueProcessor</p><p>Integracin HDIV &amp; Spring MVC</p></li><li><p>Instalacin de HDIV desde la versin Spring MVC 3.1:Aadir las libreras de HDIV web.xmlAadir el filtro de HDIVAadir el listener de HDIVhdiv-config.xml (configuracin basada en Spring)Haciendo uso del custom schema de HDIV</p><p>Integracin HDIV &amp; Spring MVC</p></li><li><p>HDIV custom schema configuracin mnima </p><p> /</p><p>Integracin HDIV &amp; Spring MVC</p></li><li><p>HDIV custom schema Validacin editables </p></li><li><p>Ejemplo (hdiv-spring-mvc-showcase)</p></li><li><p>Versin actual (2.1.1) :Mejora del soporte AJAX : actualizacin parcial de un formulario</p><p>Modo debug: activacin de HDIV sin parar las peticiones, nicamente generando logs Interesante para implantaciones en aplicaciones previamente desarrolladas</p><p>Versin 2.1.2 :Almacenamiento de estados de HDIV en ServletContextCon el objeto de no afectar a la replicacin de sesin</p><p>Futuras versiones de HDIV</p></li><li><p>Versin 2.2 (Junio 2012):Soporte Grails: actualmente en fase de anlisisEn principio basado en el mismo interface que en Spring MVC: RequestValueDataProcessorPrimeras pruebas accesibles enhttps://github.com/hdiv/grails-core</p><p>Versin 2.3 (Noviembre 2012):Integracin oficial con Struts 2:https://issues.apache.org/jira/browse/WW-3718</p><p>Futuras versiones de HDIV</p></li><li><p>Q&amp;A</p></li></ul>