Blindaje: Contrarrestar un ataque de fuerza bruta

Share this…

brute_force

Detectando el Ataque

Por supuesto, antes de luchar contra un ataque de fuerza bruta primero debemos detectarlo. Especialistas del Instituto Internacional de Seguridad Cibernética han enlistado una serie de recomendaciones para mitigar estos ataques. Asegúrese de que su aplicación tenga herramientas para monitorear el tráfico de la red. Al menos dos de estas serían útiles: métricas e inicios de sesión.

  • Las métricas HTTP deben ser lo suficientemente detalladas para determinar la URL y el método de cada solicitud entrante, el estatus y el número de respuestas producidas, etc. Luego, se pueden crear alertas especiales en las herramientas de supervisión que le informarán sobre cualquier comportamiento sospechoso.
  • El monitoreo de inicios de sesión proporcionará información más detallada sobre cada solicitud que no siempre se puede recopilar como métrica. Puede contener datos como encabezados de solicitud, IP de origen, cuerpo de la solicitud, etc. Analizarlos podría ayudar a comprender los detalles del ataque y proponer tácticas de defensa.

Bloqueo de IP

Lo primero puede venir a la mente después de detectar un ataque es bloquear la dirección IP del atacante. Pero esa no es una buena manera de disuadir un ataque, ya sea porque el atacante puede superarlo fácilmente cambiando su dirección IP, o bien porque se puede llegar a bloquear una dirección IP pública, cortando el acceso a muchos usuarios.

Bloqueo del Usuario

Otra idea podría ser bloquear cuentas con demasiados intentos fallidos de inicio de sesión. De este modo se requeriría una acción especial del usuario para poder desbloquearlo.

Este es un enfoque arriesgado. Un atacante podría realizar numerosos intentos con muchos nombres de usuario válidos, y podría terminar por bloquear a buena parte de sus usuarios. La mayoría de ellos probablemente desbloqueará sus cuentas la primera vez que suceda. ¿Pero lo harán la segunda vez y luego una y otra vez? Con el tiempo esto puede alejar a los usuarios de su aplicación y eso es algo que no queremos que suceda.

Una versión menos agresiva de esta solución es bloquear una cuenta temporalmente, con una respuesta como “Ingresaste tu contraseña incorrectamente varias veces seguidas. Inténtalo de nuevo en 30 segundos”. En este caso, el propietario de la cuenta no necesita hacer nada, además de esperar un poco. Pero un atacante persistente podría desencadenar el bloqueo temporal una y otra vez, privando al usuario real de la posibilidad de iniciar sesión.

Captcha

No importa cómo se implemente el Test de Turing Público Completamente Automatizado para Distinguir Computadoras y Humanos (CAPTCHA, por sus siglas en inglés), el distinguido “prueba de que no eres un robot” siempre es irritante. Muy a menudo no es conveniente resolver CAPTCHA en el escritorio y, a veces en las versiones móviles, puede convertirse de repente en un obstáculo para el usuario. En aplicaciones que priorizan la facilidad de uso, CAPTCHA debe considerarse como un último recurso.

Además, muchas implementaciones de CAPTCHA son vulnerables a los ataques, ya sea automatizados, que utilizan redes neuronales, o ingeniería social, en los que grandes grupos de personas reciben un pago para resolver acertijos CAPTCHA en tiempo real.

Si desea o debe agregar CAPTCHA a la página de inicio de sesión de su aplicación, considere lo siguiente:

  • No solicite resolver un CAPTCHA antes del inicio de sesión, es mejor hacerlo después de uno o más intentos fallidos en una fila del nombre de usuario dado. De esta manera será menos molesto para los usuarios reales.
  • Solicite resolver el CAPTCHA cuando se intente ingresar con un nombre de usuario no existente para complicar al atacante la labor de encontrar nombres de usuario registrados.
  • No utilice CAPTCHA de elaboración propia. Use uno existente, que haya sido probado y posiblemente pagado.

Latencia/Retraso

En un ataque de fuerza bruta, el hacker intentará accesar probando muchas contraseñas. Introducir un retraso entre los intentos de inicio de sesión fallidos ralentizaría significativamente el proceso, lo que probablemente hará que todo el proceso sea demasiado lento para el atacante. Ese estado latente adicional no molestará a los usuarios reales, ya que probablemente no les importe esperar unos pocos segundos más si cometieron un error al escribir una contraseña. Para períodos más largos, por ejemplo 10 segundos, considere mostrarle al usuario algún tipo de temporizador de cuenta regresiva.

Solicitar al Usuario una Pregunta Secreta Adicional

La pregunta secreta y su respuesta correspondiente se configuran en el perfil del usuario. Presente esa opción para inicios de sesión con demasiados intentos de inicio de sesión fallidos, esperando que el usuario proporcione una respuesta válida. Asegúrese de hacer esa pregunta también para los inicios de sesión no válidos, para que el atacante no tenga otra forma de descubrir cuentas reales.

Engañar a las Herramientas de Fuerza Bruta

En un ataque de fuerza bruta se pueden usar algunas de las herramientas de prueba de penetración. Esos programas envían solicitudes con el encabezado User-Agent a un valor predeterminado, un signo revelador de la herramienta del ataque.

Al devolver aleatoriamente la respuesta para solicitudes con dicho encabezado, una aplicación puede engañar al atacante que ya no podrá distinguir entre intentos correctos y fallidos. Funcionará con hackers principiantes que no sepan resolver esto. De cualquier modo, tenga en cuenta que esta no es una solución totalmente segura.