Tema 8

8. Autenticación segura, gestión de contraseñas y MFA

La autenticación decide quién puede entrar al sistema y bajo qué condiciones. Si este proceso falla, casi todos los demás controles pierden valor. Diseñar un login seguro no consiste solo en pedir usuario y contraseña, sino en proteger identidad, sesión, recuperación de cuenta y factores adicionales de verificación.

Objetivo Diseñar autenticación resistente a ataques comunes
Enfoque Identidad, credenciales y defensa en capas
Resultado Reducir toma de cuentas y abuso de sesiones

8.1 Introducción

En la mayoría de las aplicaciones web, la cuenta del usuario es la puerta de entrada a datos, funciones y operaciones sensibles. Si un atacante consigue autenticarse como otra persona, puede actuar con sus permisos sin necesidad de explotar otras vulnerabilidades más complejas.

Por eso la autenticación es uno de los pilares más importantes de la seguridad web. Abarca no solo el formulario de login, sino también el registro, el almacenamiento de credenciales, la recuperación de cuenta, el cambio de contraseña, la segunda verificación y la gestión de intentos fallidos.

Una autenticación débil no afecta solo a un usuario. Puede comprometer la reputación del sistema, habilitar fraude y convertirse en la base de incidentes más amplios.

8.2 Autenticación, autorización y sesión

Antes de profundizar, conviene separar tres conceptos que suelen mezclarse:

  • Autenticación: verifica quién es el usuario o sistema.
  • Autorización: decide qué puede hacer una vez autenticado.
  • Sesión: mantiene continuidad entre solicitudes posteriores.

Este tema se enfoca principalmente en autenticación, pero en la práctica siempre se relaciona con cómo se mantiene la sesión y cómo se aplican permisos luego del login.

8.3 Qué busca proteger una autenticación segura

Un sistema de autenticación bien diseñado debería cumplir varios objetivos:

  • Permitir que el usuario legítimo acceda de forma razonablemente simple.
  • Dificultar fuerza bruta, relleno de credenciales y toma de cuentas.
  • Evitar que una filtración de base exponga contraseñas en claro.
  • Resistir abuso en recuperación o cambio de credenciales.
  • Agregar factores adicionales para cuentas críticas o contextos riesgosos.
La autenticación segura no consiste en hacer la vida imposible al usuario. Consiste en elevar el costo del ataque sin destruir la usabilidad legítima.

8.4 Contraseñas: siguen siendo importantes

Aunque existen métodos modernos de autenticación, la contraseña sigue siendo el factor más extendido en aplicaciones web. El problema es que también es uno de los más abusados: puede ser adivinada, reutilizada, filtrada, robada por phishing o capturada en dispositivos comprometidos.

Esto obliga a pensar no solo en cómo se define una contraseña, sino en cómo se almacena, cómo se renueva, cómo se recupera la cuenta y cómo se combina con factores adicionales.

8.5 Políticas razonables de contraseñas

Una buena política de contraseñas busca equilibrio entre seguridad real y fricción aceptable. Algunas buenas prácticas suelen incluir:

  • Exigir longitud suficiente.
  • Bloquear contraseñas demasiado comunes o filtradas.
  • Permitir frases largas en lugar de reglas arbitrarias difíciles de recordar.
  • Evitar requisitos excesivamente complejos que fomenten patrones débiles repetidos.
  • No obligar a cambios frecuentes sin motivo real, salvo incidentes o riesgo detectado.

Muchas políticas antiguas empeoraban la experiencia sin mejorar demasiado la seguridad. Hoy se valora más longitud, unicidad y control frente a contraseñas comprometidas.

8.6 Almacenamiento seguro de contraseñas

Una aplicación nunca debería guardar contraseñas en texto plano. Si la base de datos se filtra, eso expone directamente a los usuarios y además potencia ataques por reutilización en otros servicios.

El almacenamiento correcto implica aplicar funciones de hash diseñadas específicamente para contraseñas, con salt y costo adecuado. La meta es que incluso ante una filtración, recuperar las contraseñas reales sea costoso y lento.

Desde la seguridad práctica, esto significa:

  • No almacenar contraseñas reversibles.
  • No usar algoritmos rápidos pensados para integridad general.
  • Usar mecanismos adecuados para password hashing.

8.7 Registro y alta de cuentas

La seguridad de autenticación empieza incluso antes del primer login. En el registro conviene pensar en:

  • Validación de credenciales iniciales.
  • Confirmación razonable del canal de contacto, por ejemplo email.
  • Protección contra automatización masiva o abuso.
  • Evitar mensajes que revelen información sensible innecesaria.

Un flujo de registro mal diseñado puede facilitar spam, cuentas falsas, enumeración o posteriores abusos de recuperación.

8.8 Fuerza bruta, credential stuffing y defensa

Una parte importante de la autenticación segura consiste en resistir ataques automáticos. Los más comunes son:

  • Fuerza bruta: prueba masiva de combinaciones.
  • Password spraying: pocas contraseñas comunes sobre muchas cuentas.
  • Credential stuffing: reutilización de credenciales filtradas de otros servicios.

Para mitigar estos ataques se usan medidas como limitación de intentos, análisis de contexto, detección de comportamiento anómalo, MFA y verificación de contraseñas contra listas comprometidas.

8.9 Mensajes de error y enumeración de usuarios

Un detalle aparentemente menor puede tener mucho impacto: cómo responde la aplicación cuando el login falla. Si el sistema distingue claramente entre "usuario inexistente" y "contraseña incorrecta", ayuda al atacante a descubrir cuentas válidas.

Por eso suele recomendarse usar mensajes de error genéricos en autenticación y recuperación, evitando dar señales innecesarias sobre qué identificadores existen realmente.

8.10 Recuperación de cuenta

Muchos sistemas tienen un login razonablemente seguro, pero una recuperación de cuenta débil. Eso es crítico porque un atacante no siempre necesita romper la contraseña si puede resetearla fácilmente.

Un flujo de recuperación seguro debería:

  • Usar tokens de un solo uso y expiración corta.
  • No revelar cuentas existentes de forma innecesaria.
  • Invalidar correctamente tokens previos cuando corresponde.
  • Exigir pruebas proporcionales al riesgo.
  • Notificar cambios sensibles al usuario por un canal confiable.

8.11 Cambio de contraseña y acciones sensibles

Cambiar una contraseña, desactivar MFA o modificar datos de recuperación son acciones de alto impacto. No deberían depender solo de una sesión antigua y silenciosa. En muchos casos es recomendable reautenticar al usuario o pedir una confirmación adicional antes de permitir esos cambios.

Esto reduce impacto de secuestro de sesión, equipos compartidos o sesiones abiertas por descuido.

8.12 MFA: qué es y por qué importa

MFA, o autenticación multifactor, agrega uno o más factores adicionales además de la contraseña. La idea es simple: si la contraseña se filtra o es robada, el atacante todavía necesita otra prueba para entrar.

Los factores suelen agruparse en:

  • Algo que sabes: contraseña, PIN, respuesta secreta.
  • Algo que tienes: app autenticadora, token físico, dispositivo confiable.
  • Algo que eres: biometría, cuando el contexto y la plataforma lo permiten.

8.13 Formas comunes de MFA

Método Ventaja Consideración de seguridad
App autenticadora Amplio uso y buena seguridad práctica Requiere proteger el dispositivo y el backup del secreto
Token físico Muy resistente frente a phishing avanzado Mayor costo y logística
SMS Fácil de adoptar Más débil frente a ciertos abusos del canal telefónico
Push al dispositivo Cómodo para el usuario Debe evitar fatiga o aprobaciones automáticas

8.14 MFA no es magia

Aunque MFA reduce enormemente el riesgo de toma de cuentas, no elimina todos los ataques. Puede verse afectado por phishing en tiempo real, ingeniería social, robo del dispositivo, malware local o errores de implementación.

Por eso no debe usarse como excusa para descuidar contraseñas, sesiones, recuperación de cuenta o monitoreo. Es una capa poderosa, no una solución única.

8.15 Autenticación adaptativa y contexto

Algunas aplicaciones ajustan el nivel de verificación según señales de riesgo, por ejemplo ubicación inusual, dispositivo nuevo, horario atípico o comportamiento sospechoso. Esto se conoce como autenticación adaptativa o basada en riesgo.

Bien implementada, permite equilibrar seguridad y experiencia, pidiendo controles adicionales cuando realmente cambia el contexto.

8.16 SSO y federación

Muchas aplicaciones modernas delegan autenticación en proveedores externos mediante SSO o identidad federada. Esto puede mejorar seguridad y experiencia si se implementa correctamente, pero también concentra riesgo en el proveedor de identidad y en los flujos de integración.

Delegar autenticación no elimina la responsabilidad del sistema. La aplicación sigue necesitando validar tokens, proteger sesiones y manejar correctamente los permisos locales.

8.17 Errores frecuentes en autenticación

  • Guardar contraseñas en texto plano o con mecanismos débiles.
  • Permitir credenciales triviales o muy comunes.
  • No limitar intentos o no detectar abuso automatizado.
  • Revelar si un usuario existe mediante mensajes distintos.
  • Tener recuperación de cuenta más débil que el login principal.
  • Implementar MFA solo en algunos flujos y olvidar otros críticos.
Una autenticación es tan fuerte como su eslabón más débil. Muchas veces ese eslabón no es el login principal, sino el reset de contraseña o la desactivación de MFA.

8.18 Ejemplo conceptual

Imaginemos un portal donde el login exige usuario y contraseña, pero el reset de contraseña solo depende de conocer el email y usar un enlace sin expiración fuerte. Aunque el formulario principal esté razonablemente protegido, un atacante podría concentrarse en el flujo de recuperación y tomar la cuenta por allí.

Este ejemplo muestra por qué la autenticación debe analizarse como un sistema completo y no como una pantalla aislada.

8.19 Defensa en profundidad para identidades

Una estrategia madura de autenticación suele combinar varias capas:

  • Contraseñas resistentes y control sobre credenciales comprometidas.
  • Hashing seguro del lado servidor.
  • Limitación de intentos y detección de abuso.
  • MFA, especialmente para cuentas sensibles.
  • Flujos seguros de recuperación y cambio de credenciales.
  • Notificaciones de eventos críticos y monitoreo de actividad sospechosa.

8.20 Qué debes recordar de este tema

  • La autenticación protege la identidad y es uno de los controles más críticos de toda aplicación.
  • Las contraseñas deben almacenarse de forma segura y validarse con políticas razonables.
  • La recuperación de cuenta y el cambio de credenciales son tan importantes como el login.
  • MFA reduce mucho el riesgo de toma de cuentas, pero no reemplaza otras capas.
  • Una autenticación segura se diseña como un sistema completo, no como un único formulario.

8.21 Conclusión

La autenticación segura es una de las defensas más rentables de una aplicación web porque protege directamente el punto donde identidad, datos y permisos se encuentran. Si este sistema está bien diseñado, muchas campañas automáticas, fraudes y tomas de cuenta pierden gran parte de su eficacia.

En el próximo tema avanzaremos sobre autorización, control de acceso y prevención de IDOR, es decir, qué puede hacer realmente un usuario una vez que logró autenticarse.