Proteger las aplicaciones con autenticación y controles de acceso
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Describir la importancia de realizar la autenticación y el control de acceso.
- Explicar los métodos de ataque que aprovechan la autenticación fallida.
- Enumerar los métodos de ataque que aprovechan el control de acceso fallido.
Autenticación y acceso a aplicaciones
Imagine la seguridad en un aeropuerto. Antes de embarcar, los pasajeros deben mostrar una prueba de su identidad al agente de billetes, que comprueba la identificación con el manifiesto de pasajeros y la escanea con una base de datos de malos agentes. Estos pasos de autenticación física son muy parecidos a los pasos de autenticación lógica que los usuarios deben completar antes de poder acceder a los recursos tecnológicos, incluidas las aplicaciones.
Los ingenieros de seguridad de las aplicaciones restringen el acceso a los datos a los usuarios identificados, autenticados y autorizados. La autenticación verifica la identidad de alguien mediante credenciales, normalmente nombre de usuario y contraseña, para iniciar sesión en una aplicación. Esto permite a la aplicación conceder a los usuarios los privilegios necesarios, que restringen al usuario el acceso a algunas cosas y le permiten acceder a otras. Este concepto de conceder y restringir el acceso a los recursos se denomina autorización. Todo el proceso de identificación, autenticación y autorización de usuarios se conoce como control de acceso.
Los ingenieros de seguridad de aplicaciones desempeñan un papel clave en la gestión de la autorización de aplicaciones, el inicio de sesión y los permisos de usuario. Al hacerlo, se protegen de los atacantes que ponen en peligro contraseñas, claves o tokens. Al hacerlo, los ingenieros de aplicaciones controlan, gestionan y auditan el acceso a las aplicaciones, especialmente el acceso privilegiado (administrativo).
Los ingenieros ejecutan las aplicaciones mediante el menor número de privilegios posible (un concepto conocido como mínimo privilegio). También comprueban si la aplicación presenta problemas de control de acceso verticales y horizontales. Un problema horizontal se produce si un usuario puede ver/modificar la información de otro usuario. Un problema vertical se produce si el usuario puede obtener acceso administrativo de forma inapropiada.
Por ejemplo, los ingenieros de seguridad de aplicaciones protegen contra las referencias directas inseguras a objetos, que permiten a los atacantes saltarse la autorización y acceder directamente a los recursos del sistema. Esto ocurre cuando la aplicación toma una entrada proporcionada por el usuario y la utiliza para recuperar un objeto (como un registro de base de datos o un archivo) sin realizar suficientes comprobaciones de autorización.
Protección contra la autenticación fallida
Uno de los riesgos contra los que se protegen los ingenieros de seguridad de aplicaciones es la autenticación fallida. Esto ocurre cuando un atacante obtiene acceso no autorizado a cuentas y compromete un sistema. El impacto de este riesgo puede ser grave, por ejemplo, si permite a un atacante blanquear dinero, robar las prestaciones de la seguridad social de alguien o incluso su identidad. El riesgo de que los atacantes exploten la autenticación fallida es alto.
Los atacantes pueden acceder fácilmente a nombres de usuario y contraseñas válidos si adivinan la información a través de la presencia de alguien en las redes sociales o mediante credenciales válidas disponibles a la venta en la dark web (una técnica conocida como relleno de credenciales). Los atacantes comprueban si las aplicaciones y el software asociado utilizan cuentas administrativas predeterminadas. Si todo lo demás falla, el atacante utiliza un ataque de fuerza bruta para adivinar la contraseña del usuario o utiliza un programa automatizado que introduce sistemáticamente cada palabra de un diccionario como contraseña (lo que se conoce como ataque de diccionario) para obtener acceso ilícito.
Todo esto suena bastante aterrador. ¿Cómo pueden ayudar los ingenieros de seguridad de aplicaciones? Tienen una función clave a la hora de evaluar una aplicación para asegurarse de que no es vulnerable a una autenticación fallida. Al hacerlo, los ingenieros de seguridad de aplicaciones comprueban las siguientes vulnerabilidades.
Contraseñas predeterminadas, débiles o conocidas
Los ingenieros comprueban que la aplicación no utilice credenciales predeterminadas (como admin/admin para cuentas administrativas). Comprueban que la aplicación no utilice contraseñas débiles, que exija a los usuarios crear contraseñas con una determinada cantidad de caracteres, caracteres especiales y que no permita contraseñas comunes. El Instituto Nacional de Estándares y Tecnología (NIST) tiene directrices sobre longitud, complejidad y rotación de contraseñas.
Autenticación basada en el conocimiento (KBA)
A menudo, los sitios web permiten a los usuarios restablecer una contraseña mediante preguntas KBA, como el nombre de la calle donde crecieron o el nombre de su perro. El problema con este enfoque es que gran parte de esta información personal se puede obtener a través de las redes sociales de una persona o a través de la información disponible en la dark web de violaciones anteriores.
Los ingenieros de seguridad de aplicaciones implementan mecanismos de recuperación de cuentas más potentes que la KBA, como exigir el envío de un código a un email registrado o a un número de teléfono al que el usuario tenga acceso. También limitan y retrasan los intentos fallidos de inicio de sesión para evitar que los atacantes utilicen la fuerza bruta y los ataques de diccionario para adivinar las contraseñas, y se aseguran de que la aplicación avisa a los administradores de los intentos fallidos de inicio de sesión.
Contraseñas en texto sin formato o con hash débil
Almacenar y permitir que los usuarios introduzcan contraseñas en texto sin formato significa que los actores maliciosos pueden leerlas fácilmente. Los ingenieros de seguridad de aplicaciones se aseguran de que todas las contraseñas de los recursos de la aplicación estén cifradas de manera aleatoria. Esto puede parecer una receta de libro de cocina, pero lo que significa es que se añaden datos adicionales a la contraseña y se codifican de forma que no se puedan invertir.
De este modo, aunque alguien robe la contraseña, no podrá utilizarla. Algunos de los algoritmos informáticos (como MD5) que se utilizan para cifrar contraseñas son débiles, ya que pueden descifrarse rápidamente mediante ingeniería inversa. Los ingenieros de seguridad de las aplicaciones deben evitar el uso de estos algoritmos e implementar algoritmos hash potentes en su lugar.
Autenticación de factor único
Utilizar solo el nombre de usuario y la contraseña (algo que el usuario conoce) se denomina autenticación de factor único (SFA). Dado que un atacante puede adivinar o robar contraseñas, los ingenieros de seguridad de aplicaciones implementan la autenticación de múltiples factores (MFA) siempre que sea posible para proteger la autenticación de aplicaciones.
La MFA utiliza tanto algo que el usuario conoce (como una contraseña) como algo que tiene (como un teléfono) o algo único (como su cara o huella dactilar). Por ejemplo, un usuario introduce su nombre de usuario y contraseña en una aplicación. Se envía una solicitud de autenticación independiente a su teléfono móvil, que también debe aprobar. Esta capa adicional de seguridad hace más difícil que los atacantes pongan en peligro las cuentas.
Gestión inadecuada de identificadores y tokens de sesión
Una gestión inadecuada del identificador de sesión y del token puede permitir a un atacante apropiarse de una sesión y hacerse pasar por la víctima. Para evitar que se apropien del identificador de sesión, los ingenieros hacen varias cosas. Se aseguran de que el nombre de la Id. no sea descriptivo para que los atacantes no puedan obtener información sobre las tecnologías y los lenguajes de programación utilizados por la aplicación.
Al igual que las contraseñas, los identificadores de sesión deben ser lo suficientemente largos para evitar ataques de fuerza bruta. Y deben ser impredecibles para evitar que el atacante pueda adivinarlos. Los ingenieros de seguridad de aplicaciones también almacenan el significado o la lógica de negocio de los identificadores de sesión en el lado del servidor (no en el lado del cliente disponible para el usuario).
Por último, los ingenieros de seguridad de aplicaciones implementan herramientas de gestión de sesiones integradas en lugar de crear otras nuevas desde cero y son conscientes de las vulnerabilidades del marco que deciden utilizar. Para obtener más información sobre la gestión de sesiones, consulte la hoja de referencia de OWASP asociada.
Protección frente a un control de acceso fallido
Mientras que la autenticación registra a un usuario en una cuenta, el control de acceso aplica las políticas de permisos de usuario. Cuando se rompe, los atacantes encuentran maneras de ver o editar las cuentas de otra persona o actuar como administradores, mediante funciones privilegiadas para acceder, cambiar o eliminar registros. Se trata de una vulnerabilidad de seguridad común y el impacto puede ser grave en función del tipo de datos a los que pueda acceder el atacante.
Los ingenieros de seguridad de las aplicaciones las protegen contra este riesgo mediante varias estrategias.
- Denegar por defecto: Si una solicitud no está específicamente permitida, se deniega. Por ejemplo, si un administrador crea una nueva cuenta de usuario, la cuenta debería tener un acceso mínimo o nulo por defecto hasta que se configure.
- Mínimo privilegio: Todos los usuarios tienen el menor acceso posible.
- Imponer la propiedad de los registros: Solo determinados usuarios crean, leen, actualizan o eliminan cualquier registro.
- Registrar los errores de control de acceso: Cree un registro y avise a los administradores cuando se introduzca una contraseña incorrecta.
- Gestión de tokens: Establezca tiempos de caducidad para los tokens y elimine los tokens almacenados al cerrar la sesión. Esto evita que los tokens se utilicen indefinidamente y evita que un atacante manipule los tokens para elevar los privilegios.
- Pruebas tempranas y frecuentes: Por último, el ingeniero de seguridad de aplicaciones comprueba estas protecciones de control de acceso durante el proceso de control de calidad y a lo largo del SDLC.
Resumen
Se han presentado las estrategias que los ingenieros de seguridad de aplicaciones utilizan para proteger las funciones de autenticación y control de acceso de una aplicación para garantizar que solo los usuarios legítimos puedan acceder a los recursos y funcionalidades asignados. Ahora es el momento de profundizar en una última consideración en torno a la protección de las aplicaciones: garantizar que los datos confidenciales no queden expuestos.