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.