Control de Accesos II

Control de Accesos II

Introducción

Una vez que los usuarios han sido identificados y autenticados, el siguiente paso es que sean autorizados, este paso es necesario para que puedan acceder a los recursos requeridos para realizar sus funciones en el sistema, dichos accesos deben otorgarse considerando el principio de mínimo privilegio, asegurando que los usuarios tengan acceso solo a los recursos mínimos necesarios de acuerdo a su puesto o función.

Existen diferentes modelos de control de accesos que se pueden utilizar dependiendo de las necesidades de la organización, el uso de determinado modelo depende de los requerimientos de seguridad que tiene la organización, madurez del control de identidades actual, número de usuarios, entre otros.

Algunos de los modelos de control de accesos son: RBAC (Role-Based Access Control), DAC (Discretionary Access Control), MAC (Mandatory Access Control).

Desarrollo

Role-Based Access Control (RBAC)

Este modelo controla el acceso a recursos, basado en las funciones que tiene dicho usuario dentro de la organización, el modelo permite al administrador asignar a uno o más roles a un determinado usuario, cada rol permite acceso a determinados recursos.

Los permisos están asociados a roles y los usuarios son miembros de determinados roles, a diferencia de un modelo basado en grupos donde estos están conformados solo de usuarios y no de permisos. Por otro lado un rol se puede considerar como ambos, es decir un grupo de permisos y un grupo de usuarios, y este modelo sirve para relacionar ambos grupos.

Desde el punto de vista de negocio, los roles son creados para las distintas funciones que se llevan a cabo en la organización, y los usuarios se asignan a determinados roles en base a sus funciones y responsabilidades, de esta manera los usuarios pueden ser fácilmente reasignados o revocados de los distintos roles en base a las necesidades de la organización.

Actualmente muchos sistemas soportan este modelo de control de accesos (en el siguiente artículo veremos su implementación en el framework de desarrollo python web2py).

Las políticas de control de accesos RBAC se pueden definir en las relaciones: rol-permiso (role-permission), usuario-rol (user-role), y rol-rol (role-role). En base a estas relaciones se puede determinar si un usuario puede acceder a un determinado recurso del sistema. Uno de los beneficios del modelo RBAC es que es un modelo flexible que se puede ir ajustando a los requerimientos de la organización.

El modelo RBAC soporta los principios de seguridad de mínimo privilegio, segregación de funciones y abstracción de los datos, por lo que es un modelo que facilita la administración de accesos.

Discretionary Access Control (DAC)

En este modelo el dueño del recurso otorga el acceso a determinados usuarios.

Mandatory Access Control (MAC)

Este modelo permite agrupar o clasificar los recursos del sistema de acuerdo a su criticidad. Ejemplos de clasificación son: recursos públicos, restringidos, confidenciales, secretos y ultrasecretos. Los privilegios que se otorgan a un usuario para ver ciertos recursos dependen del nivel de autorización de dicho usuario.

Mapeo de Ejecución de Rutas (Map Execution Paths Through Application)

Mapeo de Ejecución de Rutas (Map Execution Paths Through Application)

Introducción

Cuando se ejecutan pruebas de seguridad en una aplicación Web, una de las fases iniciales es entender el contexto de la aplicación, considerando al menos: los tipos datos que se almacenan/procesan/transmiten, uso de la aplicación, procesos de negocio que soporta, usuarios que utilizan la aplicación, transacciones que se ejecutan desde la aplicación.

Dentro de este análisis inicial se debe identificar los recursos que se acceden para la ejecución de cada flujo que sigue cada proceso soportado por la aplicación, esto nos ayudará a entender el funcionamiento de la aplicación, definir un alcance y posteriormente ejecutar pruebas más específicas.

Desarrollo

En la guía de pruebas de seguridad de OWASP para aplicaciones Web (WSTG-INFO-07 Map Execution Paths Through Application) se recomienda que antes de realizar pruebas de seguridad, se realice un levantamiento de información para entender la estructura de la aplicación, esto es importante ya que sin este entendimiento resulta complicado definir un alcance para la ejecución de pruebas, así como asegurar que se están incluyendo los recursos críticos del sistema en el alcance de la revisión.

Para analizar este caso supongamos que estamos validando una aplicación de venta de artículos online.

La aplicación tiene al menos los siguientes procesos:

Registro de usuario Consulta de artículos Compra de artículos

Análisis del flujo

Inicialmente desde la perspectiva de proceso, estos flujos pueden ser documentados, con la siguiente descripción o diagrama de flujo.

enter image description here

Figura 1. Diagrama de Flujo del Registro de Usuarios en la aplicación Web

Análisis HTTP con Proxy

La idea en este punto es ejecutar el proceso identificado dentro del sistema para que el proxy HTTP registre las URLs/módulos utilizados.

En este ejemplo el proceso (Registro de Usuarios) conlleva el acceso a distintos módulos y recursos de la aplicación, los cuales se pueden identificar/documentar a través de un proxy HTTP, con esta herramienta podemos mapear el flujo que sigue el proceso de registro de usuarios en la aplicación.

enter image description here

Figura 2. Resultados del Análisis proxy HTTP

Considerando el diagrama de flujo y con los resultados de la ejecución del proxy HTTP, podemos identificar los recursos (URLs, módulos) que utiliza la aplicación para la ejecución del proceso de registro de usuarios.

En este ejemplo vemos que al menos involucra el acceso a 3 recursos de la aplicación, 2 son accesados por medio del método HTTP GET y 1 por medio del método POST HTTP.

De esta manera podemos diseñar pruebas de seguridad definiendo un alcance de acuerdo a los módulos de la aplicación utilizados, partiendo de los procesos que le interesan al negocio.

En este enlace podrá encontrar un HTTP proxy desarrollado en python/web2py y mitmproxy, registra los resultados (URLs/módulos) utilizados en la ejecución de un proceso en el sistema, los resultados son enviados a una base de datos para su análisis, adicionalmente descarga el código público de los recursos/módulos registrados, lo que permite hacer una análisis de código estático para validar que no se exponga información sensible.

Control de Accesos I

Introducción

El control de accesos en uno de los procesos escenciales cuando se implementan controles de seguridad.

Este control básicamente establece las reglas de cómo un sujeto puede interactuar con un objeto y como este último puede transferir información al sujeto.

Desarrollo

Se puede considerar al sujeto como entidades activas (usuarios, aplicaciones, procesos, programa, computadora), que a través de un acceso tratan de obtener datos de una entidad pasiva (objeto).

Un objeto puede ser un archivo, base de datos, carpeta o recurso, y el control de accesos nos ayuda a controlar el uso de los recursos (objeto) y limitar su acceso.

enter image description here

Sin un control adecuado se pueden propiciar accesos no autorizados a datos o recursos sensibles.

Se deben considerar al menos los siguientes “pasos” para asegurar un adecuado control de accesos:

  • Identificación
  • Autenticación
  • Autorización
  • Auditoría
  • No repudio

Identificación

El proceso de identificación consiste en asignar una identidad a los usuarios (sujeto) que acceden a un sistema de información, de esta manera dichos usuarios pueden ser identificados de manera única, por lo que las acciones que realicen dichos usuarios en el sistema son correctamente asociadas, comúnmente la asignación de esta identidad se da por una cuenta de usuario o en alguno de los atributos de la cuenta en el sistema.

Para el tipo de usuarios genéricos, se recomienda establecer un control compensatorio administrativo para que puedan ser identificados adecuadamente, dicho control puede ser la documentación de las cuentas donde se identifique adecuadamente al dueño de la cuenta, el cual será responsable de las acciones realizadas por el usuario en el sistema.

Autenticación

El proceso de autenticación consiste en que dichos usuarios demuestran su identidad. Un usuario puede demostrar su identidad al menos de tres formas: algo que es usuario es (ejemplo: accesos biométricos), algo que el usuario tiene (ejemplo: tokens de acceso, tarjetas de identidad) o algo que el usuario conoce (ejemplo: password de acceso).

La forma más común de demostrar la identidad de un usuario es por medio de passwords de acceso (algo que el usuario conoce).

Se pueden combinar varias formas para demostrar la identidad de un usuario, lo cual se conoce como doble factor de autenticación.

Actualmente existen distintos protocolos de autenticación en aplicaciones y servicios Web para cubrir las diferentes necesidades de las arquitecturas actuales (ej. JWT, Auth, OpenID, LDAP, entre otros).

Autorización

Este paso asegura que el usuario tiene los privilegios y derechos requeridos para acceder a algún objeto dentro del sistema.

Dependiendo de las capacidades del sistema, esta validación se puede realizar de varias formas como por ejemplo con matrices de control de accesos, control de accesos basado en roles (RBAC), control de accesos basado en atributos (ABAC), así como basado en el tipo de requerimiento, tiempo, ubicación, o grupo.

El proceso de autorización, básicamente define las acciones que puede hacer un usuario en el sistema.

Para la implementación de un adecuado control de accesos, se debe considerar al menos el principio de mínimo privilegio y procesos de segregación de funciones, ya que de esta forma aseguramos una correcta configuración e implementación.