Los peligros del ataque de enumeración

Al auditar unas 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 mediante la 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 la contraseña (para asegurarse de que la cuenta correspondiente existe). Si los desarrolladores no implementan estas funciones de forma segura, los atacantes pueden usarlas para determinar si cierto usuario existe en la base de datos.

Antes era habitual que los desarrolladores implementaran todas estas funciones sin ningún tipo de protección, por lo que los atacantes 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 ciberdelincuentes, 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. 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 atacante comprobar si existe un nombre en concreto en la base de datos. Esto no permitirá que el ciberdelincuente 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 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 tan en serio; de hecho, las noticias sobre filtraciones de 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 ciberdelincuentes. Además, los usuarios suelen usar las mismas 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 estafadores todo lo que necesitan.

Cómo protegerte de un ataque de enumeración

¿Alguna vez te has percato de cómo responden los sitios web modernos al envío de un formulario para restablecer una 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 seguridad la comodidad casi siempre se ve sacrificada, y en el caso de los servicios de autenticación, se justifica un sesgo de seguridad menor.

Por supuesto, el uso de un captcha y la limitación en los intentos de inicio de sesión también son imprescindibles. 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.

Consejos