Академический Документы
Профессиональный Документы
Культура Документы
Caso:
Lenguaje de Programacin II
Objetivos
Presentar los criterios a considerar para asegurar aplicaciones web en general y aplicaciones web JEE en particular.
Lenguaje de Programacin II
Introduccin
Una de las razones principales por la que existen problemas de seguridad en las aplicaciones es por la falta de conocimiento de los desarrolladores respecto al funcionamiento del protocolo HTTP.
Lenguaje de Programacin II
Introduccin
Otro error comn es no hacer la validacin de toda la informacin que se recibe y que se muestra en las paginas web. Nos referimos a la validacin en el servidor y no en el cliente exclusivamente. Ambas validaciones podra ser la mejor opcin.
Lenguaje de Programacin II
Necesidad de Seguridad
Acceso no autorizado a recursos, corrupcin de datos o software, robo de informacin o acciones no auditables. Abuso de privilegios, incluyendo suplantacin de identidad, fraude, etc. Cdigo malicioso: gusanos, caballos de troya y bombas lgicas. Denegacin de Servicio, incluyendo destruccin de recursos.
Lenguaje de Programacin II
Nivel de Aplicacin
Autenticacin: quin puede acceder al recurso ? Implica validar la credenciales ( usuario y contrasea ) Autorizacin: Quin puede ejecutar acciones y sobre qu recursos ?
Lenguaje de Programacin II
Un rol es un ttulo que define un nivel de autorizacin. Un rol puede tener mltiples usuarios y mltiples permisos: un usuario asume un rol para tener acceso a los recursos. Se basa en JAAS (Java Authentication and Authorization Service) y permite eliminar el problema de asignar permisos a usuarios individuales.
10
Lenguaje de Programacin II
11
Lenguaje de Programacin II
Autenticacin SSL
Secure Socket Layer es un protocolo que proporciona confidencialidad, encriptacin e integridad entre 2 puntos. HTTPs : significa HTTP corriendo sobre SSL
12
Lenguaje de Programacin II
No SSL: EL cliente y el servidor no pueden asegurar la identidad del otro. One-Way: Uno de los dos enva sus credenciales Two-Way: Autenticacin de cliente y Servidor. El servidor enva sus credenciales y requiere que el cliente tambien lo haga.
13
Lenguaje de Programacin II
En SSL, el servidor tiene una llave privada (mantenida en secreto) y una llave pblica (conocida por el resto) encriptamiento asimtrico. Certificate chains: es la cada de firmantes de un certificado. Root Certificate: es el ms alto certificado en la certificate chain KeyStore: es el lugar donde se almacenan los certificados. En Java se usa la herramienta keytool.
14
Lenguaje de Programacin II
Certificados X.509
Cada certificado es firmado por una entidad de confianza conocida como CA ( Certificate Authority)
16
Lenguaje de Programacin II
como se obtiene ?
En la siguiente aplicacin web tenemos problemas de seguridad donde un usuario puede sacar ventaja de estas vulnerabilidades. Encontrar los problemas y proponer una solucin.
20 Lenguaje de Programacin II
Injection Flaws
Inyeccin dinmica y particularmente la inyeccin dinmica de SQL, son comunes en las aplicaciones web. Existen muchos tipos de inyeccin dinmica (SQL, LDAP, XPath, XSLT, HTML, XML, OS command). En la inyeccin dinmica de SQL el problema se debe a una mala programacin de la capa de acceso a datos.
21
Lenguaje de Programacin II
Ejemplo
Tenemos una pagina web que requiere autenticacin. El usuario deber ingresar su usuario y password. La informacin es enviada al servidor para validar si es correcta.
22
Lenguaje de Programacin II
10
Solucin
24
Lenguaje de Programacin II
25
Lenguaje de Programacin II
11
Solucin
No enviar la informacin del formulario de login usando el mtodo GET. Cambiar el GET por POST en la pagina login.jsp.
26
Lenguaje de Programacin II
Permitir a un usuario no logeado poder ingresar directamente el men del Usuario o del Administrador.
27
Lenguaje de Programacin II
12
Solucin
<% String a = (String) session.getAttribute("logueado"); if (a == null || a.compareTo("true") != 0) { RequestDispatcher rd = request .getRequestDispatcher("logueo.jsp"); rd.forward(request, response); } %>
28 Lenguaje de Programacin II
La aplicacin permite a un usuario que tiene un perfil definido acceder al men de otro perfil del sistema y realizar funciones no autorizadas.
29
Lenguaje de Programacin II
13
Solucin
30
Lenguaje de Programacin II
Esta basado en el acceso no autorizado de URLs. Por ejemplo ingresar a la zona de administracin de una aplicacin web. La solucin es no confiar a que el atacante no conoce los paths de las URLs y adems implementar un sistema de control de acceso.
31
Lenguaje de Programacin II
14
Solucin
Colocar las paginas JSP en una carpeta no accesible desde la URL. Desde el ServletLogin que realiza el forward usar la nueva ruta de la pagina JSP.
menuAdministrador.jsp
ServletLogin
url = "WEB-INF/menuAdministrador.jsp";
32
Lenguaje de Programacin II
Esta tcnica de ataque se basa en la inyeccin de cdigo (javascript o html) en las paginas web de un servidor de aplicaciones. La raz del problema esta relacionada con los caracteres especiales que no son filtrados cuando se renderiza la pagina.
33
Lenguaje de Programacin II
15
Ejemplo
1.
Supongamos que un forum de una aplicacin web no se valida el ingreso y la lectura de un campo de la base de datos.
34
Lenguaje de Programacin II
Ejemplo
2.
3.
Entonces todos los usuarios del fourm veran este mensaje cuando acceden a la pagina.
35
Lenguaje de Programacin II
16
Ejemplo
Este tipo de ataque se considera almacenado debido a que el ataque se almacena en la base de datos. Aun cuando este ataque puede ser inonfesivo, se utilizan otras tcnicas adicionales para sacar provecho de esta vulnerabilidad
36
Lenguaje de Programacin II
Robo de Identidades mediante el robo de las cookies de sesin. Redireccionamiento a una web falsa, que tiene la misma apariencia que la original. Esta vulnerabilidad esta mas asociada con un ataque de tipo reflectivo el cual es mas peligroso que el almacenado
37
Lenguaje de Programacin II
17
El usuario ejecuta el script involuntariamente. Supongamos que detectamos una pagina de un banco con esta vulnerabilidad donde es posible ejecutar el cdigo cuando el usuario ingresa a dicha pagina.
38
Lenguaje de Programacin II
El siguiente paso es disear un ataque para forzar al usuario a que ejecute dicho request. El ataque mas conocido es realizar un Envo de Correos masivos atachando la URL confiable donde el usuario dar click y lo redireccionara a otro website falso con la misma apariencia que la del original.
39
Lenguaje de Programacin II
18
<% String message = request.getParameter("message"); message = message.replace ('<','_'); message = message.replace ('>','_'); message = message.replace ('"','_'); message = message.replace ('\'','_'); message = message.replace ('%','_'); message = message.replace (';','_'); message = message.replace ('(','_'); message = message.replace (')','_'); message = message.replace ('&','_'); message = message.replace ('+','_'); %> <p> The message is: <hr/> <tt><%= message %></tt> <hr/> </p> 40 Lenguaje de Programacin II
Hacer un filtrado de caracteres aceptables tanto al momento de recibir los caracteres desde el request o cuando se van a mostrar los datos al browser del usuario. [A-Za-z0-9]
41
Lenguaje de Programacin II
19
Tampering
La modificacin de los datos en el cliente puede ser realizadas usando herramientas que son accesible por cualquier persona. Existen plugins para los navegadores mas usados como IE, Firefox, etc.
https://addons.mozilla.org/es/firefox/addon/tamper-data/ http://www.softpedia.com/get/Tweak/Browser-Tweak/TamperIEWeb-Security-Tool.shtml
46
Lenguaje de Programacin II
Firefox Tampering
47
Lenguaje de Programacin II
20
IE Tampering
48
Lenguaje de Programacin II
Modelo de Seguridad JEE Modelo de Seguridad Java 2 Java Authentication and Authorization Service ( JAAS)
49
Lenguaje de Programacin II
21
50
Lenguaje de Programacin II
51
Lenguaje de Programacin II
22
If no <http-method> element is present, then the constraint applies to all of the HTTP methods.
NONE (Sin garanta de integridad o confiabilidad ) INTEGRAL ( integridad ) HTTPS CONFIDENTIAL (Confidencialidad )
52
Lenguaje de Programacin II
AUTORIZACIN - Programtica
53
Lenguaje de Programacin II
23
Resumen
Para mitigar las vulnerabilidades descritas es necesario tomar las medidas adecuadas al momento de desarrollar una aplicacin:
Validar en el servidor todo los caracteres que se reciben y se muestran en la aplicacin web. Usar SSL para no permitir que informacin sensible se pueda manipular por el cliente.
54
Lenguaje de Programacin II
Recursos adicionales
55
Lenguaje de Programacin II
24