Asignatura Seguridad en Aplicaciones Online y Bases de Datos
Datos del alumno
Fecha
Apellidos: Gustavo Javier 29/03/2017 Nombre: Barreiro Martillo
Actividades Trabajo: Seguridad en AJAX Descripción de la actividad Realización de un trabajo para recopilar los problemas de seguridad que presenta la tecnología WEB 2.0 AJAX y las posibles soluciones a los mismos. Pautas de elaboración Esta actividad sobre seguridad en aplicaciones Ajax abarca los problemas de seguridad que tienen este tipo de aplicaciones, que caen en la categoría denominada rich internet applications y en las posibles soluciones a los mismos. Hay que consultar cuantas fuentes relativas al tema se considere y sintetizar la información relevante sin limitarse a copiar el contenido de alguna de ellas. Criterios de valoración Se valorará (para todas las actividades): Contenidos. Para la realización de los trabajos se deben consultar varias fuentes para después contrastarlas, sintetizarlas y generar un trabajo y opinión personalizados aportando ejemplos gráficos. Estructura del documento. Debe ser planificada previamente y tener un apartado de conclusiones y de referencias al final. Presentación acorde con la categoría del curso. Referencias. Se deben especificar en un apartado al final todas las fuentes consultadas, URL’s de internet, papers, artículos o libros especificando todos los datos de la publicación disponibles. Recalcar la obligatoriedad de la especificación de las referencias consultadas. Extensión máxima: 10-15 páginas (fuente Georgia 11 e interlineado 1,5).
TEMA 1 – Actividades
© Universidad Internacional de La Rioja (UNIR)
Asignatura Seguridad en Aplicaciones Online y Bases de Datos
Datos del alumno
Fecha
Apellidos: Gustavo Javier 29/03/2017 Nombre: Barreiro Martillo
Como cualquier otra técnica o tecnología que se emplee en un entorno Web, el uso de AJAX está sujeto a inconvenientes. Con el tiempo uno puede aprender que estos inconvenientes se suplen cuando el mercado apoya una tecnología y ésta se estandariza lo suficiente como para que los distintos navegadores no den problemas con ella, ya sean estos de compatibilidad o de seguridad. AJAX permite realizar ahora cosas que antes no se podían o necesitaban algún plugins externo, además de aumentar la interactividad al poder mantener la conexión con el servidor de forma sencilla. Por este motivo la industria se ha volcado mucho últimamente en desarrollar software con AJAX. En este trabajo se mencionará los principales problemas de los entornos Web que utilicen AJAX así como los problemas de desarrollo que supone junto con las alternativas de soluciones para dichos problemas. 1.
PROBLEMAS DE DESARROLLO 1.1. Internet Oscura Como las páginas generadas por AJAX generan información dinámicamente los robots de Google no encuentran muchas veces nada en la página, obteniendo un ranking deficiente, para evitarlo, deben crearse páginas especiales de recorrido completo. 1.2. Complejidad Aumentada Los desarrolladores de la parte cliente de la aplicación deben entender la parte lógica del programa suficientemente como para que se combine satisfactoriamente con la parte servidor. Por tanto, es fácil mezclar lógica de presentación y lógica de negocio. Los desarrolladores de páginas Web deben tener habilidad para trabajar con Javascript.
1.3. Aplicaciones Difíciles de Mantener •
Javascript es difícil de testear.
•
No hay unos patrones de diseño con Javascript claros ya que no se ha utilizado apenas.
•
La modularidad de Javascript es muy limitada.
TEMA 1 – Actividades
© Universidad Internacional de La Rioja (UNIR)
Asignatura Seguridad en Aplicaciones Online y Bases de Datos
Datos del alumno
Fecha
Apellidos: Gustavo Javier 29/03/2017 Nombre: Barreiro Martillo
1.4. Las Herramientas de Desarrollo que Usan AJAX son Inmaduras Como es ahora cuando se está empezando a emplear el objeto XMLHttpRequest las herramientas de desarrollo todavía están en fase beta. 1.5. El Objeto XMLHttpRequest No Está Estandarizado Una futura versión de Internet Explorer podría solucionar esto. 1.6. El Objeto XMLHttpRequest No Está en Navegadores Antiguos Obliga a las personas que quieran utilizar aplicaciones AJAX a actualizarse, cosa que no es demasiado grave para cualquier usuario medio. 1.7. Dependencia de la Tecnología Javascript Javascript debe estar activado para que las aplicaciones funcionen. Hay pequeñas incompatibilidades entre navegadores lo que obliga a testear el código para asegurar su correcto funcionamiento. Cualquier persona con algo de experiencia en el uso de AJAX se da cuenta de todo lo que esto supone, el uso de AJAX para poder crear una aplicación exitosa obliga a tener conocimientos de Javascript y del DOM y, durante su desarrollo y una vez terminada, a testarla en los diferentes navegadores donde se quiera utilizar y a corregir los problemas. 2. PROBLEMAS DE SEGURIDAD Cuando se quiere analizar la seguridad de un programa en red se deben tener dos partes claramente diferenciadas: servidor y cliente/s. El análisis de seguridad se debe hacer pensando que el atacante conoce perfectamente todo el funcionamiento del sistema ya que no se puede confiar en que ayude mantenerlo en secreto; sus mismos desarrolladores pueden atacarlo. 2.1. Parte del Cliente En principio todas las aplicaciones Web están sujetas a los mismos problemas de seguridad ya que todas se suelen correr sobre el mismo software del servidor al que le llegan las peticiones de los usuarios “no identificados” ya que nunca se puede asegurar realmente de quien hay al otro lado de la línea, si la aplicación necesita de seguridad deberá ser el servidor el que la proporcione.
TEMA 1 – Actividades
© Universidad Internacional de La Rioja (UNIR)
Asignatura Seguridad en Aplicaciones Online y Bases de Datos
Datos del alumno
Fecha
Apellidos: Gustavo Javier 29/03/2017 Nombre: Barreiro Martillo
2.2. Problemas Antiguos AJAX El código Javascript es visible al usuario, que perfectamente puede ser un potencial Hacker, puede buscar la forma de utilizar el código, como está o con las modificaciones oportunas para explotar las debilidades de la aplicación. • Solución errónea: Encriptarlo, si se ejecuta es porque nuestra máquina es capaz de desencriptarlo con lo cual seguro que es posible la ingeniería inversa. • Solución correcta: No existe, el código debe ser visible para que se ejecute. El código Javascript puede ser bajado y evaluado (eval) en el cliente, si fuera código con malas intenciones el cliente podría hacer poco ante ello. • Solución 1: Utilizar algún tipo de área de pruebas para el código antes de lanzarlo directamente que lo analice, existen ya algunos filtros que evitan la ejecución de ciertas funciones o envío de ciertas etiquetas. • Solución 2: El código Javascript podría estar Firmado digitalmente, sería una buena solución futura, pero hoy es solo una idea. Si se desea que la información de las peticiones no sea visible es necesario utilizar un canal HTTPS. 2.3.Parte del Servidor Formas de proporcionar seguridad en el lado servidor: • Solo dejar utilizar la aplicación a los clientes que puedan validarse realmente con su firma digital. • Utilizar los mecanismos de identificación de sesión que pueda proporcionarnos el servidor de forma que podamos validar y autorizar al usuario comprobando sus privilegios. 2.4. Problemas Agravados Por el Uso de AJAX El principal problema del uso de AJAX respecto al de una aplicación Web normal es que, debido a su naturaleza (hacer peticiones para luego refrescar partes de una página), el desarrollador puede perfectamente desglosar las diferentes partes de la página JSP, incluidas las que necesitan autenticación y autorización, o incluir otros servicios que necesiten por ejemplo de una base de datos. Al terminar la aplicación a un desarrollador no demasiado experto puede quedarle el esquema de la figura 1, que si bien puede funcionar correctamente es fácilmente atacable ya que tiene una
TEMA 1 – Actividades
© Universidad Internacional de La Rioja (UNIR)
Asignatura Seguridad en Aplicaciones Online y Bases de Datos
Datos del alumno
Fecha
Apellidos: Gustavo Javier 29/03/2017 Nombre: Barreiro Martillo
“GRAN SUPERFICIE DE IMPACTO” (este problema surge al dividir un programa en módulos accesibles individualmente ya que también se pueden intentar atacar individualmente buscando un comportamiento incorrecto que genere algún agujero de seguridad), este es el gran problema de AJAX, pero puede solventarse. En la figura 1 el cliente tiene acceso directo a todas las partes de la aplicación, lo que resulta abominable ya que la validación no sirve de nada si no se hace antes de cualquier servicio que lo necesite lo que requiere mucha repetición de código, además al equipo de desarrollo se le puede escapar alguna validación y como los servicios se pueden acceder individualmente (en este caso) puede haber algún agujero de seguridad en alguno. Lo ideal para proporcionar seguridad sería el caso de la figura 2. Como se puede observar en la figura, el hecho de que el lado servidor de la aplicación esté diseñado de forma segura es la verdadera clave de la seguridad en las aplicaciones Web ya que todo el código de la parte cliente es visible a ataques y modificaciones en la memoria del cliente para atacar a la parte servidor.
Figura1: Aplicación desarrollada con una Seguridad Ineficiente.
TEMA 1 – Actividades
© Universidad Internacional de La Rioja (UNIR)
Asignatura Seguridad en Aplicaciones Online y Bases de Datos
Datos del alumno
Fecha
Apellidos: Gustavo Javier 29/03/2017 Nombre: Barreiro Martillo
Figura2: Aplicación Desarrollada con una Seguridad Correcta. 3. Desarrollo de una Aplicación Web Segura •
Conexión cifrada: La conexión debería estar cifrada desde la página principal para que cuando el usuario mande sus datos personales éstos estén codificados, aunque esto haga gastar más recursos. Hay que configurarlo en el servidor, por ejemplo Tomcat.
•
Sin cookies: Entre otras cosas, gracias a AJAX, al no necesitar cambiar de Web e ir modificando dinámicamente la actual, se puede dar al usuario un identificador al comenzar la sesión, apuntarlo en la base de datos y no necesitar usar ningún cookie sino una variable que contenga el identificador y que se borrará al cerrar el navegador, de esta manera enviando ese identificador con cada petición se identificaría al usuario.
•
Verificación completa del usuario: Al desarrollar un sitio Web se lo debe dividir en dos partes claramente diferenciadas: una a la que se puede entrar sin verificación y otra en la que será obligada. Por ejemplo en una aplicación de negocio, se puede tener una parte de noticias pública, donde el usuario además pueda ver los productos pero en caso de que quiera realizar una compra el usuario tenga que introducir su nombre y contraseña que ha dado anteriormente cuando se registró, dando sus datos de cuenta y demás, aunque estos se podrían especificar más tarde por si quiere cambiar el domicilio de envío o cualquier otra información personal.
•
Evitar la inserción de código: El usuario no debería poder introducir información en ningún momento, la página debe estar hecha completamente
TEMA 1 – Actividades
© Universidad Internacional de La Rioja (UNIR)
Asignatura Seguridad en Aplicaciones Online y Bases de Datos
Datos del alumno
Fecha
Apellidos: Gustavo Javier 29/03/2017 Nombre: Barreiro Martillo
para su cometido, que es realizar las compras a golpe de clic, en caso de dudas que se hagan por correo-e. •
Verificación completa de datos: Cuando el usuario decida pagar por su carrito de la compra, se deberá comparar toda la información enviada de nombre del artículo, su identificador único y su precio de manera que se sepa que la petición es correcta ya que el usuario podría cambiar los precios de los artículos usando alguna herramienta de depuración, como Firebug.
•
Base de datos no accesible exteriormente: Solamente debe de poder trabajar con ella la parte del servidor Web y debe tener un usuario que solo debe poder acceder a su base de datos para evitar que se cambien los precios aquí, si es que se tiene una tienda. Además, en una aplicación Web el usuario no necesita acceder directamente al servidor por SQL a no ser que sea precisamente para esto como el ISQLPlus de Oracle, en cuyo caso está diseñado expresamente para esto.
•
Minimizar la superficie de impacto: El cliente solo debe poder acceder a una página que luego delegará dependiendo la petición realizada por el usuario el trabajo en otras contenidas en el servidor no accesibles desde fuera.
Webgrafia: •
http://www.infosecwriters.com/text_resources/pdf/SShah_Web20.pdf
•
http://librosweb.es/libro/ajax/capitulo_7/seguridad.html
•
http://www.flu-project.com/2014/04/seguridad-en-ajax-parte-i.html
•
http://sedici.unlp.edu.ar/bitstream/handle/10915/20590/Documento_com pleto.pdf?sequence=1
TEMA 1 – Actividades
© Universidad Internacional de La Rioja (UNIR)