Ataque de enumeración: vulnerabilidades en los sistemas de autenticación

Al auditar algunas aplicaciones web, nuestros expertos encontraron una vulnerabilidad a los ataques de enumeración. Te describimos el problema y te explicamos cómo combatirlo.

Hace poco, mientras probaban una plataforma de cadena de bloques en busca de vulnerabilidades, nuestros expertos de Kaspersky Blockchain Security  descubrieron que el proceso de recuperación de la contraseña de la plataforma era vulnerable a un ataque de enumeración de nombres de usuario. Los desarrolladores de la web necesitaban conocer este tipo de ataque y sus peligros.

¿Qué es un ataque de enumeración?

Las aplicaciones web con un sistema de autentificación mediante usuario y contraseña  suelen incluir varios componentes que interactúan con la base de datos del usuario: la ventana de inicio de sesión (por razones obvias), el formulario de registro (para evitar que se dupliquen los nombres de usuario) y la página para restablecer contraseña (para asegurarse de que la cuenta correspondiente existe). Si los desarrolladores no implementan estas funciones de forma segura, los cibercriminales pueden usarlas para determinar si cierto usuario existe en la base de datos y así robar sus datos o secuestrar su cuenta.

Antes era habitual que los desarrolladores implementaran todas estas funciones sin ningún tipo de protección, por lo que los cibercriminales podrían utilizar una lista de nombres de usuario y un programa que los introducía uno a uno. Con el tiempo, para deshacerse de los cibercriminales, los desarrolladores comenzaron a aplicar estrategias de protección como los captchas, un límite en los intentos de inicio de sesión y el uso de asteriscos u otros medios para ocultar ciertos detalles de la respuesta.

En las aplicaciones web modernas, la ventana de inicio de sesión generalmente cuenta con este tipo de protección contra ataques de enumeración. Sin embargo, a veces faltan los formularios de registro  y las páginas para restablecer la contraseña. Además, los desarrolladores web no siempre consideran que la presencia o ausencia de un usuario en la base de datos se pueda determinar según lo que tarde en responder el servidor. Por ejemplo, si el nombre de usuario aparece en la base de datos, la respuesta del servidor tarda 2 milisegundos. Si no, la respuesta tarda el doble: 4 milisegundos. Para un ser humano, la diferencia es indetectable, pero para las herramientas de enumeración automatizadas, es fácil de detectar.

Los peligros de un ataque de enumeración de nombres de usuario

Un ataque de enumeración permite a un cibercriminal comprobar si existe un nombre en concreto en la base de datos. Esto no permitirá que el cibercriminal acceda de forma inmediata, pero sí le concede la mitad de la información necesaria. Por ejemplo, para configurar un ataque de fuerza bruta, no tendrá que buscar por parejas de nombres de usuario y contraseñas, solo tendrán que encontrar la contraseña de un nombre de usuario verificado, lo que le ahorrará tiempo y esfuerzos.

Recuerda también que casi todos los servicios web utilizan las direcciones de correo electrónico como nombres de usuario. Por tanto, el usuario promedio utiliza el mismo nombre de inicio de sesión en muchos sitios web y no todos se toman la seguridad contra ataques de enumeración tan en serio; de hecho, las noticias sobre filtraciones de datos como nombres de inicio de sesión y contraseñas son muy comunes. Las recopilaciones consolidadas de los datos de estas filtraciones están disponibles en los foros de los cibercriminales. Además, los usuarios suelen usar contraseñas débiles o reutilizan contraseñas en diferentes sitios web, por lo que, después de asegurarse de que existe un nombre de usuario en tu sitio web, un atacante puede introducir una recopilación como esa para comprobar si las contraseñas del usuario existen en otros sitios web y luego intentan acceder con esas contraseñas

Además, los operadores del spear phishing a menudo emplean ataques de enumeración durante la fase de reconocimiento. Después de comprobar que su objetivo tiene una cuenta en tu servicio, pueden enviar un correo electrónico supuestamente de tu parte, pidiéndole al usuario que cambie su contraseña y que se vincule a una página de phishing que se parece a tu sitio web. Cuando el cliente desprevenido introduce una nueva contraseña, también tiene que confirmar la antigua, y de esta forma proporcionan a los cibercriminales todo lo que necesitan para robar o secuestrar tu cuenta a través de un ataque de enumeración.

Cómo protegerte de un ataque de enumeración

¿Alguna vez te has dado cuenta de cómo responden los sitios web modernos al envío de un formulario para restablecer la contraseña? No dicen “Te hemos enviado un enlace para restablecer tu contraseña” o “El correo electrónico especificado no está en nuestra base de datos”, como solían hacerlo los sitios web. En su lugar, escriben: “Si este correo electrónico existe en nuestra base de datos, te enviaremos un mensaje con un enlace”. En otras palabras, los sitios web no confirman ni desmienten explícitamente la existencia del nombre de usuario. Hicieron este cambio precisamente para protegerse contra los ataques de enumeración.

Asimismo, no es necesario que expliques con detalle en la ventana de inicio de sesión que el usuario ha introducido una contraseña incorrecta o que ese nombre de usuario no existe en el sistema. Simplemente di que no se ha encontrado esa combinación de nombre de usuario y contraseña. No es lo ideal desde el punto de la experiencia del usuario: por ejemplo, a mí me desespera cuando olvido qué correo electrónico utilicé para el registro, pero estoy bastante seguro de la contraseña, o viceversa, pero el sitio web no me indica en qué campo estoy equivocado. Sin embargo, con la ciberseguridad la comodidad casi siempre se ve sacrificada, y en el caso de los servicios de autenticación, se justifica un leve sesgo de seguridad.

Por supuesto, el uso de un captcha y la limitación en los intentos de inicio de sesión también son imprescindibles para protegerse contra ataques de enumeración. Además de eso, para garantizar la seguridad de tu aplicación web, recomendamos que te sometas a una auditoría de terceros. Y, si operas con la tecnología de la cadena de bloques, nuestros colegas de Kaspersky Blockchain Security pueden ayudarte con el análisis de seguridad de aplicaciones web. Tampoco olvides equiparte con una solución de seguridad confiable.

Consejos