Вы находитесь на странице: 1из 24

Seguridad en Aplicaciones Web

Los profesores del Curso

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

Conceptos Bsicos de Seguridad

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 ?

Integridad hashCode o signature (firma) Confidencialidad ( privacidad )


Lenguaje de Programacin II

Conceptos Bsicos de Seguridad


Auditing y accountability Nivel de Transporte


SSL y HTTPs Autenticacin SSL Certificados X.509 Llaves pblicas y privadas

Lenguaje de Programacin II

Control de Acceso basado en Roles


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

Llaves pblicas y privadas

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

Un certificado digital contiene informacin necesaria para la autenticacin y autorizacin. Componentes:


Llave Pblica Informacin de Identidad Algunos privilegios asociados

Cada certificado es firmado por una entidad de confianza conocida como CA ( Certificate Authority)

16

Lenguaje de Programacin II

como se obtiene ?

como se puede observar ?

Aplicacin Web Insegura

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

Usar Prepared Statement en el mtodo de login de la clase Accesos.

Filtrar los caracteres especiales al momento de validar el password del usuario.

24

Lenguaje de Programacin II

Problema de Insecure Communications

Enviar informacin sensible utilizando el mtodo GET o no usando encriptacin.

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.

Activar el SSL del Tomcat. Modificar el archivo server.xml del Tomcat

26

Lenguaje de Programacin II

Problema de Failure to restrict URL access

Permitir a un usuario no logeado poder ingresar directamente el men del Usuario o del Administrador.

27

Lenguaje de Programacin II

12

Solucin

Crear la sesin en el ServletLogin y agregar una variable de validacin.


HttpSession sesion = req.getSession(); sesion.setAttribute("logueado", "true");

Validar la sesin en la pagina menuUsuario.jsp

<% 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

Problema de Failure to restrict URL access

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

Validar el perfil del usuario en la pagina menuUsuario.jsp

30

Lenguaje de Programacin II

Failure to restrict URL access


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

Cross-site Scripting (XSS)

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.

Si escribimos el siguiente mensaje en el forum y este se guarda en la base de datos.

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

Vulnerabilidades asociadas al Cross-site Scripting (XSS)


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

Cross-site Scripting (XSS) Reflectivo


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.

En este caso el script es proporcionado como un parmetro de entrada del request

38

Lenguaje de Programacin II

Cross-site Scripting (XSS) Reflectivo

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

Prevenir Cross-Site Scripting XSS

Validando el cdigo en el servidor y filtrando los caracteres extraos.

<% 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

Prevenir Cross-Site Scripting XSS

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

Seguridad en la Plataforma Java


Modelo de Seguridad JEE Modelo de Seguridad Java 2 Java Authentication and Authorization Service ( JAAS)

49

Lenguaje de Programacin II

21

Definir usuarios y roles en Tomcat

50

Lenguaje de Programacin II

Vincular Roles con la Aplicacin


opcional

Mapea roles con principales definidos en el security realm

51

Lenguaje de Programacin II

22

Establecer los Accesos


Recurso a restringirse Mtodos a restringirse

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

http://download.oracle.com/docs/cd/B32110_ 01/web.1013/b28957/intro.htm http://cool2k.wordpress.com/2008/09/04/how to-habilitar-un-puerto-seguro-en-un-servidorapache-tomcat/

55

Lenguaje de Programacin II

24

Вам также может понравиться