Lista de Verificación para Implementar Identidad Digital
4.2.6 Lista de Verificación: Implementar Identidad Digital
La autenticación es el proceso de verificar que un individuo o entidad es quien dice ser. La gestión de sesiones es un proceso mediante el cual un servidor mantiene el estado de la autenticación de los usuarios para que el usuario pueda continuar utilizando el sistema sin tener que volver a autenticarse.
Consulte el control proactivo C7: Implementar Identidad Digital y sus hojas de referencia para obtener más contexto del proyecto OWASP Top 10 Controles Proactivos, y utilice la lista a continuación como sugerencias para una lista de verificación adaptada para el proyecto individual.
1. Autenticación
- Diseñar a fondo la autenticación del control de acceso desde el principio
- Forzar que todas las solicitudes pasen por controles de acceso a menos que sean públicas
- No codificar de forma fija (hard code) controles de acceso basados en roles
- Registrar todos los eventos de control de acceso
- Utilizar Autenticación Multi-Factor (MFA) para cuentas transaccionales sensibles o de alto valor
2. Contraseñas
- Requerir autenticación para todas las páginas y recursos, excepto aquellos específicamente destinados a ser públicos
- Todos los controles de autenticación deben aplicarse en un sistema confiable
- Establecer y utilizar servicios de autenticación estándar y probados siempre que sea posible
- Utilizar una implementación centralizada para todos los controles de autenticación
- Segregar la lógica de autenticación del recurso solicitado y utilizar redirección hacia y desde el control de autenticación centralizado
- Todos los controles de autenticación deben fallar de manera segura
- La administración y gestión de cuentas debe ser al menos tan segura como el mecanismo de autenticación principal
- Si su aplicación gestiona un almacén de credenciales, utilice hashes unidireccionales criptográficamente fuertes con un salt
- El hash de contraseñas debe implementarse en un sistema confiable
- Validar los datos de autenticación solo al completar toda la entrada de datos
- Las respuestas de fallo de autenticación no deben indicar qué parte de los datos de autenticación fue incorrecta
- Utilizar autenticación para conexiones a sistemas externos que involucren información o funciones confidenciales
- Las credenciales de autenticación para acceder a servicios externos a la aplicación deben almacenarse en un almacén seguro
- Utilizar solo solicitudes HTTP POST para transmitir credenciales de autenticación
- Enviar contraseñas no temporales solo a través de una conexión cifrada o como datos cifrados
- Aplicar requisitos de complejidad y longitud de contraseña establecidos por políticas o regulaciones
- Aplicar la desactivación de cuentas después de un número establecido de intentos de inicio de sesión no válidos
- Las operaciones de restablecimiento y cambio de contraseña requieren el mismo nivel de controles que la creación de cuentas y la autenticación
- Las preguntas de restablecimiento de contraseña están en desuso, consulte Hoja de Referencia sobre Elegir y Usar Preguntas de Seguridad para saber por qué
- Si utiliza restablecimientos basados en correo electrónico, envíe correo electrónico solo a una dirección preregistrada con un enlace/contraseña temporal
- Las contraseñas y enlaces temporales deben tener un tiempo de caducidad corto
- Aplicar el cambio de contraseñas temporales en el próximo uso
- Notificar a los usuarios cuando ocurre un restablecimiento de contraseña
- Prevenir la reutilización de contraseñas
- El último uso (exitoso o no exitoso) de una cuenta de usuario debe informarse al usuario en su próximo inicio de sesión exitoso
- Cambiar todas las contraseñas e ID de usuario predeterminados proporcionados por el proveedor o deshabilitar las cuentas asociadas
- Volver a autenticar a los usuarios antes de realizar operaciones críticas
- Si utiliza código de terceros para la autenticación, inspeccione el código cuidadosamente para asegurarse de que no esté afectado por ningún código malicioso
3. Autenticación basada en criptografía
- Utilizar los controles de gestión de sesiones del servidor o del framework
- La creación de identificadores de sesión siempre debe realizarse en un sistema confiable
- Los controles de gestión de sesiones deben utilizar algoritmos cuidadosamente probados que garanticen identificadores de sesión suficientemente aleatorios
- Establecer el dominio y la ruta para las cookies que contienen identificadores de sesión autenticados a un valor apropiadamente restringido para el sitio
- La funcionalidad de cierre de sesión debe terminar completamente la sesión o conexión asociada
- La funcionalidad de cierre de sesión debe estar disponible en todas las páginas protegidas por autorización
- Establecer un tiempo de espera de inactividad de sesión que sea lo más corto posible, basado en equilibrar el riesgo y los requisitos funcionales del negocio
- No permitir inicios de sesión persistentes y aplicar terminaciones periódicas de sesión, incluso cuando la sesión está activa
- Si se estableció una sesión antes del inicio de sesión, cierre esa sesión y establezca una nueva después de un inicio de sesión exitoso
- Genere un nuevo identificador de sesión en cualquier reautenticación
- No permitir inicios de sesión concurrentes con el mismo ID de usuario
- No exponer identificadores de sesión en URLs, mensajes de error o registros
- Implementar controles de acceso apropiados para proteger los datos de sesión del lado del servidor de acceso no autorizado por parte de otros usuarios del servidor
- Generar periódicamente un nuevo identificador de sesión y desactivar el antiguo
- Generar un nuevo identificador de sesión si la seguridad de la conexión cambia de HTTP a HTTPS, como puede ocurrir durante la autenticación
- Establecer el atributo
secure
para las cookies transmitidas a través de una conexión TLS - Establecer cookies con el atributo
HttpOnly
, a menos que específicamente requiera scripts del lado del cliente dentro de su aplicación para leer o establecer un valor de cookie
Referencias
- Hoja de Referencia: Autenticación de OWASP
- Hoja de Referencia: Autenticación de OWASP
- Hoja de Referencia: Elegir y Usar Preguntas de Seguridad de OWASP
- Hoja de Referencia: Contraseña Olvidada de OWASP
- Hoja de Referencia: Autenticación Multifactor de OWASP
- Hoja de Referencia: Almacenamiento de Contraseñas de OWASP
- Hoja de Referencia: Gestión de Sesiones de OWASP
- Top 10 Controles Proactivos de OWASP
Traducción de versión original en inglés.
La Guía para Desarrolladores OWASP es un esfuerzo comunitario; si hay algo que necesita cambiarse, cree un issue o edítelo en GitHub.
\newpage