El mecanismo de una aplicación para manejar el acceso de los usuarios es tan fuerte como el más débil de estos componentes.
¿Alguna vez se ha preguntado acerca de la declaración anterior y por qué el acceso de los usuarios se considera el componente más débil? Bueno, si no se ha preguntado acerca de esto, entonces no hay problema, pero debe tener en cuenta algunos conceptos importantes del acceso de los usuarios.
El mecanismo de defensa empleado por las aplicaciones web consta de los siguientes puntos:
- Manejar el acceso de los usuarios a los datos y la funcionalidad de la Aplicación y evitar que obtengan acceso no autorizado.
- Manejar la entrada de los usuarios de tal manera que no cause ningún daño.
- Manejar a los atacantes para garantizar que las aplicaciones se comporten adecuadamente cuando son atacadas, tomando las medidas defensivas y ofensivas adecuadas para frustrar al atacante.
- Reportar cualquier tipo de actividad maliciosa a los administradores.
Aquí, el más importante es el primero, Manejo del acceso de los usuarios, porque una aplicación tiene que lidiar con varias categorías de usuarios, como usuarios anónimos, usuarios autenticados y usuarios administrativos, y estos usuarios se clasifican aún más según sus roles en una aplicación en particular. Además, en muchas situaciones, a diferentes usuarios se les permite acceder a un conjunto diferente de datos, por ejemplo, un usuario de correo web solo puede leer su propio correo, pero no el de los demás.
La mayoría de las aplicaciones web manejan el acceso de los usuarios con un trío de mecanismos de seguridad interrelacionados:
- Autenticación
- Gestión de sesiones
- Control de acceso
Autenticación
La autenticación es una forma a través de la cual probamos quiénes decimos ser. Es lógicamente la dependencia más básica en el manejo de una aplicación por parte del usuario. La importancia de la autenticación puede quedar clara desde el punto de que, sin autenticación, todos son tratados como anónimos, que es el nivel de confianza más bajo posible. También se denomina autenticación.La mayoría de las aplicaciones web actuales emplean el sistema de autenticación convencional en el que tenemos que enviar un nombre de usuario o nuestra identificación de correo y contraseña, cuya validez verifica la aplicación, pero hoy en día algunas aplicaciones utilizan desafíos adicionales para iniciar sesión, como OTP o tarjetas inteligentes. y varios otros factores. Además de esta función de inicio de sesión, la autenticación también emplea una variedad de características como registro, recuperación de cuenta y funcionalidad de cambio de contraseña.
Vulnerabilidades comunes:
- Credenciales débiles: un atacante puede adivinarlas fácilmente y conduce a la toma de control de la cuenta.
- Inicio de sesión por fuerza bruta: debido a que no hay límite de velocidad, es posible usar el nombre de usuario y la contraseña por fuerza bruta.
- Mensaje de error detallado: a veces, el mensaje de error muestra información adicional que favorece indirectamente al atacante.
Ejemplo:
Es obvio ver que las cuentas con muchos privilegios se crean utilizando los nombres de usuario y contraseñas predecibles como admin y admin respectivamente, lo cual no es una gran tarea para que un hacker experto ingrese y acceda.
Asegurar la autenticación:
- Utilice credenciales sólidas.
- Manejar las credenciales en secreto.
- Validar las credenciales correctamente.
- Usa captchas.
Gestión de sesiones
La gestión de sesiones es el mecanismo a través del cual una aplicación identifica de forma única a un usuario determinado a través de una serie de requests HTTP diferentes y maneja los datos que contiene sobre el estado de la interacción del usuario con la aplicación. En palabras simples, podemos decir que cuando un usuario inicia sesión con éxito en una aplicación, accede a varias páginas y funciones realizando una serie de requests desde su navegador. Al mismo tiempo, la aplicación recibe otras innumerables requests de diferentes usuarios, algunas de las cuales están autenticadas y otras son anónimas. Aquí entra el papel de la sesión que identifica y procesa la serie de requests que se originan en usuarios individuales.
La sesión en sí es un conjunto de estructuras de datos alojadas en el servidor que rastrea cada interacción única del usuario con la aplicación. El token es una string única que la aplicación asigna a la sesión.
Vulnerabilidades comunes:
- Debilidad en la generación de tokens de sesión: los tokens son predecibles debido a la debilidad en la generación de tokens de sesión.
- Debilidad en el manejo de tokens de sesión: a veces, los tokens se exponen en la URL o en los registros a los que puede acceder el atacante.
Ejemplo:
A veces, el token de sesión generado es tan obvio que el atacante puede predecir los tokens de sesión de otros usuarios.
Protección de la gestión de sesiones:
- Genera tokens fuertes
- Proteja los tokens a lo largo de su ciclo de vida
Control de acceso
El control de acceso es el paso final en el manejo de usuarios y también el paso importante, ya que tiene que tomar y hacer cumplir decisiones sobre si se debe permitir o denegar cada solicitud individual. Este mecanismo depende totalmente de los mecanismos anteriores porque si las aplicaciones conocen la identidad correcta de el usuario que emitió la solicitud entonces una aplicación puede simplemente decidir si es una solicitud de acceso genuina o falsa. Una aplicación puede admitir numerosos roles de usuario, cada uno de los cuales implica diferentes privilegios. Es posible que se permita a los usuarios individuales acceder a un subconjunto de los datos totales contenidos en la aplicación. Es por eso que siempre se sugiere otorgar el menor privilegio a un usuario para que haga su trabajo.
Vulnerabilidades comunes:
- Escalada vertical de privilegios: cuando los usuarios con privilegios más bajos pueden acceder a los recursos de los usuarios con privilegios más altos.
- Escalada de privilegios horizontal: cuando un usuario accede a los recursos de otro usuario que tiene los mismos privilegios que el atacante.
- Explotación de lógica de negocios: Cuando debido a alguna falla en la aplicación un atacante puede acceder a recursos clave de la aplicación.
Ejemplo:
Supongamos que hay un parámetro UID en la solicitud que, debido a un control de acceso débil, si un atacante intenta completar una identificación anónima, obtiene acceso como un usuario diferente, como ingresar 124 en lugar de 123.
https://insecure-website.com/customer_account?uid=123
Control de acceso seguro:
- Denegar el acceso a la funcionalidad de forma predeterminada.
- No se limite a ocultar funciones.
- Implemente un modelo de privilegios de varias capas.
¿Cómo son interdependientes?
Ahora, como sabemos, este trío es altamente interdependiente y una debilidad en cualquiera de ellos socavará la efectividad del mecanismo completo de manejo de acceso.
Por ejemplo, un mecanismo de autenticación defectuoso puede permitir que un atacante inicie sesión como cualquier usuario y obtenga acceso no autorizado. Si se pueden predecir los tokens de sesión, un atacante puede hacerse pasar por cualquier usuario que haya iniciado sesión y obtener acceso a sus datos. Si se rompen los controles de acceso, cualquier usuario puede usar directamente la funcionalidad que se supone que está protegida.
El principal problema es que es difícil diferenciar entre un usuario legítimo y un atacante durante el control de acceso, ya que ambos envían las mismas requests, pero la diferencia es que el atacante siempre intenta brindar información al usuario víctima para obtener acceso debido a todos. el acceso de los usuarios de estos aspectos es más propenso a sufrir ataques.
Publicación traducida automáticamente
Artículo escrito por puneetsaraswat29 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA