La seguridad en una aplicación WEB


En la época actual, hablar de aspectos relacionados con la seguridad es un tema de alta prioridad, sobre todo desde que el manejo de información personal ha sido tan intenso mediante diversos dispositivos electrónicos. Por lo que es primordial el tomar todas las medidas posibles para garantizar que entre los primeros objetivos y características de cualquier sistema de información se encuentren presentes los conceptos fundamentales de integridad, confidencialidad y disponibilidad de la información. Por ello en esta ocasión comentaremos sobre un esquema de seguridad que ha sido utilizado por algunas empresas dedicadas al desarrollo de productos de software genéricos, los cuales atienden a diversas necesidades de clientes de distintos ámbitos y con necesidades operativas distintas, pero para los cuales el manejo seguro de la información es siempre igual de trascendente.

Considerando que los productos en los que nos centraremos para este artículo, tienen un enfoque web, pues son la principal línea de soluciones hoy en día, es pertinente establecer como punto de inicio que para la arquitectura de los mismos es recomendable desarrollar un esquema de tres capas, para realizar la operación completa: La Aplicación de Administración, el Sitio o Aplicación Pública y el Núcleo.

La Aplicación de Administración: Debe ser un sitio construido en la misma plataforma y cuyo propósito es proporcionar una interfaz que da acceso a las herramientas de configuración y publicación a los usuarios administradores para poder llevar a cabo la configuración operativa de los productos, mediante la creación y configuración de distintas instancias tanto de sitios como de los recursos y funcionalidades que formarán parte de un nuevo portal. En esta capa se integrará un repositorio de usuarios muy particular que permita realizar las actividades generales de creación, administración y funcionalidad de los sitios de uso específico que se construirán con la plataforma, así como la de sus recursos, contenidos y por supuesto la administración de usuarios y sus permisos, al mismo tiempo que permita el acceso a bitácoras de acción, errores y monitoreo del estado de la memoria, accesos a bases de datos, etc.

El sitio o Aplicación Pública: Como resultado de la operación de los productos, se construye un sitio web que se muestra a los usuarios finales y en el cual se encuentra la información, contenidos, recursos, que son el propósito central del sitio de operación específica que se construyó mediante la Aplicación de Administración. Por supuesto esta es la capa Front-End de toda la plataforma y las reglas de seguridad y presentación de componentes aplican igual en esta capa. Por supuesto estos sitios, instancias y recursos están ligados a repositorios de usuarios a fin de poder otorgarles permisos y atributos adecuados para hacer uso de todos ellos, pues aun cuando los usuarios sean “anónimos”, siempre existe un perfil asociado que le concede determinados permisos de operación y así controlar que se muestra o se oculta a cada usuario dependiendo de las reglas de presentación, calendarización o atributos de usuario.

El Núcleo. Esta es la capa de la arquitectura que provee los servicios necesarios para manejar los recursos y funcionalidades diversas, además de “atrapar” y controlar los errores, y por supuesto controlar los accesos a las bases de datos. Además se utiliza la especificación JAAS (Java Authentication and Authorization Service) para la autenticación de usuarios. El Núcleo realiza además las validaciones necesarias para mostrar solo aquellos recursos a los que el usuario tiene acceso y registra los accesos y errores a bitácoras. En esta capa se encuentran también los elementos para controlar y asegurar la Disponibilidad, Confidencialidad, Integridad, etc. Analicemos cada aspecto.
  • Disponibilidad: La importancia de contar con un sistema de caché para cada recurso ayuda a reducir los tiempos de IO (Input-output) para los recursos de mayor operación y que cambian poco o que son estáticos. Con lo que el tiempo de respuesta de cada página se acelera y el desempeño es más rápido. Además de que es posible realizar configuraciones particulares para agregar equipos que soporten la demanda de tráfico, mediante esquemas de Cluster o balanceo de cargas, a fin de asegurar que el sitio se mantenga en operación. Una acción importante también es almacenar en memoria la mayor cantidad de información posible, pues esto no sólo acelerará la respuesta del sitio sino que además limita la posibilidad de modificación de información de forma importante, pues no se realizan grandes escrituras a disco, sino actualizaciones en memoria que pudieran ser descartados. Además de considerar algoritmos que soporten la compresión en línea, a fin de reducir el consumo de ancho de banda.
  • Confidencialidad: Un punto importante es tener un único punto de entrada y salida de información, o distribuidor. El punto es que este componente tenga la función de procesar todos los requerimientos que se realicen por parte de los usuarios a los distintos sitios, ya sean los públicos o el de Administración. Pues con esto se asegura que solo se entregarán los recursos correspondientes a los usuarios con los permisos adecuados. Lo importante es asegurar que todos los recursos, páginas, etc. forzosamente hagan uso de este distribuidor, de forma que no sea posible hacer uso directo de los URL de cada página o componente como una alternativa para evadir la seguridad. Ahora para el caso de los repositorios de usuario y sus contraseñas, se recomienda que estas sean almacenadas una vez han pasado por un SHA ("Secure Hash Algorithm" por sus siglas en inglés, un conjunto de funciones diseñado por la Agencia de Seguridad Nacional de los Estados Unidos) a fin de que no sea posible obtenerlas desde consultas directas a la Base de Datos.
  • Integridad: Regresando al Distribuidor, podemos indicar que un aspecto crucial para garantizar la integridad de la información que entra y sale del sistema se basa en el uso adecuado del distribuidor, para que sea este quien de manera dinámica construya cada página cuando esta le es solicitada, pues así, se integrarán solo los recursos con las características de seguridad correspondientes, lo que por supuesto reduce las posibilidades de suplantar la información, en caso de que algún servidor quedará comprometido por algún motivo.
También es importante resaltar que deben tomarse medidas adicionales para evitar el riesgo por ataques de Estilo de Inyección, Evasión de autenticación y URL mal formados, Perfilados de aplicación, por mencionar solo algunos.

Para el primer caso, se recomienda verificar que los algoritmos que realizan los llamados a Base de Datos lo hagan mediante esquemas de PreparedStatement, pues así la información de pre compila y las sentencias no se forman de datos provenientes de Internet. Con lo que se evita que se realice una inyección SQL. Para el segundo tipo de ataque mencionado, la evasión de autenticación, tenemos que como toda la estructura de los sitios se forma de manera dinámica en memoria y no desde directorios físicos en el disco, los URL que se generan siempre envían la solicitud al distribuidor, quien se encarga como ya dijimos de evaluar las reglas de cada recurso y así se verifica que el usuario tenga permisos para acceder a los recursos solicitados. Y en el último ejemplo, el perfilado de aplicación, se realiza una captura de errores que se muestran solo en la Aplicación de Administración, y al usuario siempre se le envía una pantalla de error genérica a fin de no mostrarle la información interna del sistema y comprometer así, algún tipo de integridad de la misma.

Por supuesto esto significa que la Aplicación de Administración debe tener también niveles de seguridad adicional en su operación, y para ello adicional a los mecanismos ya mencionados, se cuenta con un esquema de roles y perfiles para cada usuario, que permitan controlar qué funcionalidades o información puede ver un usuario, pues no se puede permitir que todos vean todo. Los mayores ataques y fugas de información, y sucesos de sistemas comprometidos, vienen acompañados de elementos internos normalmente humanos.

Espero que esta revisión rápida de los esquemas de seguridad que han sido usados en diversos productos de uso público, permitan tener un panorama más amplio de algunas de las características técnicas que pueden ser consideradas en los esquemas y arquitecturas de aplicaciones para mejorar el nivel de seguridad del activo más importante de la época actual… NUESTRA INFORMACIÓN.


Comentarios

Entradas más populares de este blog

¿Qué tan inteligente es realmente una Inteligencia Artificial?

Entre el Desarrollo y el Negocio. Un Producto tecnológico como negocio

Más allá de la programación… Un cuento de Desarrollo de Servicios

Web Semántica, Una línea de negocios

Humanos mejorados