27 de octubre de 2005

Falla 3: Autenticación interrumpida y manejo de sesiones

El proceso de autenticación y manejo de sesión incluye todos los aspectos del manejo de la autenticación del usuario y el manejo de las sesiones activas.


La autenticación es un aspecto crítico de este proceso sobre todo en el entendido que aún un mecanismo sólido de autenticación puede ser esquivado por un manejo defectuoso de las credenciales del usuario, es decir, mediante el uso de funcionalidades como: "Cambio de contraseña", "Actualización de la cuenta", "¿Olvidó su clave?", "Recordar mi contraseña", etc. Cabe recordar que en virtud de que estas funcionalidades están expuestas a cualquiera es deseable que todas ellas (funciones de manejo de cuenta) sean autenticadas siempre que se invoquen sin importar que el usuario tenga una sesión válida.

La autenticación de los usuarios en la web envuelve el uso de un id de usuario (número de identificación) y una clave (password). Hay en el mercado algunos métodos más robustos basados en medio criptograficoso biométrico, los cuales obvia decir, tienen costos prohibitivos para la mayoría de desarrollos de
aplicaciones web.

Es común que los problemas comiencen cuando los equipos de desarrollo desestiman la complejidad del diseño de esquemas de autenticación y manejo de sesión apropiados para proteger las credenciales de los usuarios en todo el sitio.

Las aplicaciones web deben crearr sesiones para llevar el registro del flujo de peticiones de cada usuario. El protocolo que se usa en el web es HTTP, el cual no soporta esta característica; por lo tanto, las propias aplicaciones deben encargarse de esto, ya sea por medio de las prestaciones de su ambiente de desarrollo o bien, utilizando sus propios recursos. En ambos casos, si los datos relativos a la sesión no se protegen debidamente, algún atacante puede "secuestrar" una sesión activa al asumir la identidad del usuario.

Una medida preventiva es la de proteger el envío de información sensible por medio de protocolos encriptados como SSL.

Por otro lado, hay una sola medida para determinar si nuestras aplicaciones son o no vulnerables. Esta es llevar a cabo auditorías sobre el código que se usa para la autenticación y el manejo de la sesión. Se debe verificar que los datos del usuario siempre se encuentren seguros, ya sea que estén en tránsito (al viajar por la red), o almacenados (en disco duro).

Finalmente, algunas técnicas aconsejables para proteger las aplicaciones son:
- Usar contraseñas resistentes, procurando no usar el nombre de usuario como contraseña, ni palabras que sean fácilmente descubiertas.
- Límitar los intentos fallidos a fin de que un atacante no pueda llevar a cabo un ataque por diccionario o fuerza bruta.
- Controlar lo cambios de contraseñas. En caso de que un usuario solicite una contraseña olvidada, éste debe confirmar su solicitud.
- Encriptar las contraseñas.
- Proteger contraseñas en tránsito por medio de canales seguros como SSL.
- Proteger de la lista de nombres de usuario para evitar que puedan ser usados en intentos de accesos no autorizados.
- Evitar el uso de sistemas de recordatorio de contraseñas en los navegadores.
- Emplear en el código de las secciones sensibles todo tipo de etiquetas para evitar el uso del almacenamiento de contraseñas (u otro tipo de información sensible) en el navegador.
- Forzar la autenticación de todos y cada uno de los componentes de la aplicación, evitanto las relaciones de confianza.