¿Qué métodos se utilizan para contrarrestar un ataque de contraseña de fuerza bruta?

No especificó si está preguntando sobre un ataque en línea o un ataque fuera de línea.

Tampoco dijo si quiso decir desde el punto de vista de un diseñador de servicios o desde el punto de vista de un usuario. Desde el punto de vista del usuario, la respuesta es usar una contraseña segura y única. También un usuario puede considerar habilitar alguna verificación de segundo factor si está disponible para el servicio en particular.

Para el resto de esto, voy a discutir qué pueden hacer los diseñadores de servicios para defenderse de los ataques de contraseña de fuerza bruta.

Ataques de fuerza bruta en línea

Un ataque de fuerza bruta en línea es cuando el atacante realiza múltiples intentos de inicio de sesión en el servidor legítimo. Puede ser un servidor web y un servidor de correo electrónico, un servidor de aplicaciones de iCloud o lo que sea.

Hay varias cosas que un servidor puede hacer para frustrar tales ataques. Por lo general, estos se realizan en combinación entre sí.

Limitación de velocidad

Usar alguna forma de limitación de velocidad es posible. Por ejemplo, después del primer intento fallido de un nombre de usuario, puede requerir que transcurra un segundo antes de que se pueda enviar un segundo intento para ese nombre de usuario. Luego, simplemente duplique eso por cada intento fallido posterior.

Hay otros esquemas de limitación de velocidad disponibles. Realmente no tengo opiniones firmes sobre cuáles son los mejores, porque casi siempre y cuando tengas algo razonable, funcionará tan bien como todos los demás métodos razonables.

Cerrar

Esto es como limitar la velocidad extrema. Después de un cierto número de intentos fallidos, el servidor deshabilita (bloquea) todos los inicios de sesión de la cuenta. El propietario legítimo de la cuenta tendrá que pasar por un procedimiento separado para desbloquear la cuenta.

Una dificultad con esto es que el procedimiento de desbloqueo por el que alguien tiene que pasar a menudo tiene una seguridad peor que la contraseña original. En particular, las “preguntas de seguridad” como “cuál es el segundo nombre de su padre” a menudo se basan en información disponible públicamente.

Notificación

Un servicio puede intentar notificar al usuario legítimo de intentos fallidos (o exitosos) de inicio de sesión. Por ejemplo, cada vez que inicio sesión en mi proveedor de alojamiento DNS, se me presenta algo como

  Último inicio de sesión desde 72.64.118.114 el 03-feb-2014 18:36:34
 Último inicio de sesión fallido: 72.64.118.114 el 10-sep-2013 13:24:53 

iCloud notifica a todos mis dispositivos registrados cada vez que se registra un nuevo dispositivo para mi cuenta de iCloud. Otros sistemas enviarán correos electrónicos o mensajes de texto cuando haya un inicio de sesión desde un nuevo dispositivo o si hay un cierto número de intentos fallidos.

Exactamente, la mejor manera de ajustar dicha notificación es complicada y debe hacerse caso por caso. Si le das a la gente información sobre la que no pueden actuar fácilmente, no les estás haciendo ningún favor. Por lo tanto, estas cosas deben diseñarse con mucho cuidado.

Ataques de fuerza bruta fuera de línea

Un ataque fuera de línea es cuando el atacante ha capturado los datos de la contraseña hash de alguna parte. Una vez que el atacante tiene estos datos, no necesita comunicarse con el servidor en absoluto, por lo que todos los métodos utilizados para defenderse contra los ataques en línea ya no se aplican.

No permita que los atacantes obtengan datos de contraseña

La defensa obvia es no permitir que los atacantes obtengan los datos de la contraseña hash. Obviamente, las personas intentan diseñar sistemas con esto en mente, pero igual de obvio, estas cosas fallan.

Buen hashing de contraseña

Por lo tanto, además de lo obvio, se recomienda encarecidamente que los servidores que almacenan contraseñas hash las utilicen de manera que sean computacionalmente caras de verificar.

Antecedentes sobre hashing

La idea (relevante) de una función hash criptográfica es que si c = H (m), no es factible averiguar qué es m simplemente conociendo c y la naturaleza de la función hash, H.

Entonces, por ejemplo, si usamos la función hash SHA1 en “Contraseña1” obtenemos … 70ccd9007338d6d81dd3b6271621b9cf9a97ea00 (bytes codificados como hexadecimales).

La idea es que es computacionalmente inviable pasar de ese número a “Contraseña1”. Entonces, en cambio, lo que hará un ataque de fuerza bruta es calcular el hash de muchas contraseñas comunes y ver si alguna de ellas resulta ser la misma que algunos de los hashes de contraseñas que han robado.

Una PC de gama alta puede calcular muchos millones de hash SHA1 por segundo.

Saca tus contraseñas / hashes

No voy a explicar o discutir la salazón, aparte de decir que hay que hacerlo. Entonces, cuando el servidor crea un hash de contraseña para una contraseña, necesita sal.

Hash lento

Como dije, una PC de gama alta puede realizar muchas decenas o incluso cientos de millones de hash SHA1 por segundo. Las funciones hash criptográficas cumplen muchas funciones y queremos que sean rápidas. La velocidad de SHA1 (y otras funciones hash criptográficas) es algo bueno en general. Simplemente significa que no son ideales para contraseñas hash.

Lo que nos gustaría hacer es reducir la tasa de conjeturas en un ataque fuera de línea de, digamos, cientos de millones de conjeturas por segundo a algo más como unas pocas decenas de miles de conjeturas por segundo.

Actualmente hay tres algoritmos de “hash lento” en uso para hacer esto. Cada uno usa “hashes rápidos” internamente, pero ellos mismos son “lentos”. Estos tres son PBKDF2, bcrypt y scrypt. Si está creando un servidor que necesita verificar las contraseñas, aprenda a usar una de ellas y úsela.

Podría seguir hablando mucho sobre los méritos relativos de esos tres esquemas de hashing de contraseñas, pero eso distraería del punto de que cualquier cosa que procese las contraseñas debería usar una de ellas (y usarla correctamente). La comunidad de seguridad no está completamente satisfecha con ninguno de esos tres, y es por eso que hay un esfuerzo para desarrollar un sucesor de esos esquemas. Vea la Competencia de hash de contraseña para más detalles.

¿Qué tipo de ataque está intentando realizar su usuario malicioso teórico? Las contraseñas se pueden almacenar o usar de múltiples maneras: la clave aquí se ALMACENA y UTILIZA como entrada.

  1. Abordemos primero el primer tema: ALMACENAMIENTO de contraseñas. Es posible que un atacante ya haya obtenido acceso a una copia o colección parcial de sus contraseñas; siempre que no los haya almacenado en texto claro y los haya fragmentado (la salazón es parte de hacer que atacar las funciones hash no sea factible), entonces el atacante tiene algunas opciones:
  • Buscando colisiones entre los hashes almacenados contra sus hashes almacenados. La idea de las funciones hash criptográficas fuertes es que deben ser unidireccionales y colisiones mínimas (o nulas). Su objetivo será la fuerza bruta de las búsquedas para encontrar un valor de entrada que tenga el mismo valor de salida hash que uno en su tabla.
  • En segundo lugar, puede decir, bueno, ¿qué hace una sal para protegerme en este caso? Obliga al atacante a regenerar sus tablas hash pregeneradas (ver tablas Rainbow) para usar la sal que podría darle tiempo para regenerar contraseñas, etc.
  • ¡Cifrar copias de seguridad, etc. puede ayudar!

Estoy ignorando el concepto de almacenar contraseñas cifradas: es estúpido porque el atacante ya tiene acceso a los datos y podría obtener acceso a las claves criptográficas.

  1. Prevención de ataques a través de INPUT . Los sistemas a menudo se protegen implementando uno o varios métodos
  • Política de contraseña: cosas como cuántos intentos fallidos antes de bloquear una cuenta de forma permanente o temporal. Estructura de contraseña, inicios de sesión de ubicación, etc.
  • Intentos fallidos de cortafuegos
  • Usar la autenticación multifactor (como lo hace Google) usando un teléfono celular o algo que TIENES frente a lo que SABES.

Sin embargo, es posible que no pueda protegerse contra ataques desconocidos o muy teóricos contra algoritmos que pueden arruinar el concepto de que las funciones hash criptográficamente fuertes se basan en esta premisa única: deberían ser computacionalmente inviables para invertir.

Por último, pero no menos importante, no olvides educar constantemente a tu base de usuarios; ¡esto ayuda!

Sensibilidad al tiempo. Si ve más de N intentos en el tiempo X, tome medidas. Algunas opciones populares:

  • intentos futuros de límite de velocidad (solo permite volver a intentar cada N minutos, N aumenta exponencialmente con la falla)
  • requiere verificación CAPTCHA / ReCAPTCHA
  • bloquear la dirección IP de origen

Y siempre, siempre inicie sesión y marque para el equipo de seguridad. Usted * TIENE * un equipo de seguridad, ¿verdad?

Ataque de fuerza bruta significa probar todas y cada una de las contraseñas mediante el uso de una combinación de alfabetos, números y caracteres especiales. Considere que mi contraseña es JAZZ, ahora tiene 4 caracteres y todas las letras alfabéticas en mayúsculas. ¿Cuántas posibles contraseñas se pueden hacer para este 26 * 26 * 26 * 26? Puede parecer difícil probarlo manualmente, pero uno puede escribir fácilmente un script para probar uno por uno y estará bien en segundos. Esto se llama ataque de fuerza bruta. Este ataque se puede detener de las siguientes maneras:

Aumente la complejidad de la contraseña: solicite a sus usuarios que usen una contraseña más larga, con un mínimo de 8 caracteres, incluidos los alfabéticos, tanto mayúsculas como minúsculas, números y caracteres especiales. Esto aumentará el posible no de combinación, tomará mucho más tiempo para descifrar … sin embargo, ciertamente no es robusto y completamente seguro. A continuación hay algunos consejos que pueden ayudarlo en el mismo

1) arregle el número de intentos de inicio de sesión, digamos 3 intentos, publique que el sistema debería cerrar la conexión.
2) Ahora, la conexión de cierre por sí sola no resolverá su propósito, ya que el atacante volverá a iniciar la nueva conexión. Esto se puede resolver bloqueando la IP del atacante para que su sistema no acepte ninguna conexión durante algún tiempo.
3) Esto podría molestar a los usuarios legítimos, ya que lo estás bloqueando sospechando que es un ataque

Entonces, la solución final podría ser como:

Agregue un código captcha (se pueden agregar formas mezcladas e irregulares del alfabeto y números que solo los humanos pueden leer y comprender) para resolver antes de iniciar sesión.

Si por alguna razón no puede implementar el código captcha; puedes agregar un mecanismo defensivo que debería bloquear al atacante durante un período de tiempo aleatorio que ralentiza el ataque. El tiempo de bloqueo puede calcularse como una potencia de dos, por ejemplo … después de los primeros tres intentos, debe esperar 2 segundos, después de los siguientes tres intentos debe esperar 2 ^ 2 = 4 segundos, luego nuevamente después de los siguientes tres intentos, debe esperar 2 ^ 3 = 8 segundos … para que pueda ver que ralentizará el ataque de fuerza bruta increíblemente lento. ¡Ciertamente el atacante se rendiría!

La mejor manera de evitar ser víctima de un ataque de fuerza bruta exitoso es asegurarse de que todas las credenciales de inicio de sesión sean lo suficientemente largas y complejas para dificultar que un atacante las adivine. Otros mecanismos de mitigación de la fuerza bruta incluyen el uso de autenticación de dos factores y el uso de autenticación basada en certificados en lugar de combinaciones de nombre de usuario y contraseña.

Trabajo en una empresa de alojamiento web y he aquí un vistazo a algunas de las formas en que nuestras tecnologías de mitigación de fuerza bruta pueden reducir el impacto de repetidos intentos de inicio de sesión maliciosos.

Daemon de falla de inicio de sesión

Como parte de nuestro proceso de fortalecimiento del servidor ServerShield, instalamos y configuramos el firewall CSF, que incluye el Daemon de falla de inicio de sesión (LFD). LFD se ejecuta en segundo plano y analiza periódicamente los registros del servidor en busca de fallos de inicio de sesión repetidos. Muchos intentos fallidos de inicio de sesión desde la misma IP en poco tiempo generalmente indican un ataque de fuerza bruta. Si LFD detecta un posible ataque de fuerza bruta, bloqueará rápidamente la IP infractora, evitando que el atacante vuelva a intentarlo y reduciendo los recursos del servidor utilizados en intentos fallidos de inicio de sesión.

Además de las técnicas de bloqueo de fuerza bruta integradas en el firewall, también implementamos varias tecnologías de mitigación de fuerza bruta para proteger servicios específicos.

cPHulk

cPHulk está disponible en cuentas de hosting que usan el panel de control de cPanel. cPHulk supervisa los intentos de inicio de sesión en varios servicios, incluidos cPanel, WHM, FTP y correo electrónico. Si detecta un número excesivo de intentos fallidos de inicio de sesión en esos servicios, evitará más intentos desde la misma IP.

Una de las principales ventajas de cPHulk es que utiliza los módulos de autenticación conectables de Linux para controlar el acceso a servicios específicos. Eso permite a los usuarios bloquear rangos de IP para servicios específicos sin impedir el acceso a todos los servicios para todos los que usan una IP en ese rango. Por lo tanto, si el servidor recibe muchos intentos fallidos de inicio de sesión a través de SSH desde hosts en un rango específico, ese rango puede bloquearse desde inicios de sesión SSH, sin afectar a otros usuarios en el mismo rango de acceder a sitios web alojados en el servidor.

Protección CMS a pedido

WiredTree también ofrece bloqueo de fuerza bruta a nivel de aplicación para sistemas de gestión de contenido específicos. Los repetidos ataques de fuerza bruta que apuntan a páginas de inicio de sesión o API pueden ser una gran carga para los clientes de alojamiento de administración de contenido, y nos complace implementar medidas para proteger contra los ataques de fuerza bruta que apuntan a los recursos de esos clientes.

Espero que esta información ayude. Si desea más detalles, consulte esta publicación del blog de nuestra empresa. Cómo ayudamos a proteger a sus servidores contra ataques de fuerza bruta

1. Contraseñas largas con una combinación de letras, números y caracteres especiales. Eso puede hacer que la posibilidad de un ataque exitoso de fuerza bruta sea muy baja porque podría tomar millones de años adivinar la contraseña.

2. Bloquee al usuario después de X intentos de contraseña incorrecta y no permita un inicio de sesión incluso con una contraseña exitosa.

3. Espere X segundos antes de devolver una respuesta diciendo que el intento de contraseña fue incorrecto. Esto ralentizará aún más el ataque de fuerza bruta.

Aunque los ataques de fuerza bruta son difíciles de detener por completo, son fáciles de detectar porque cada intento de inicio de sesión fallido registra un código de estado HTTP 401 en los registros de su servidor web. Es importante monitorear sus archivos de registro para detectar ataques de fuerza bruta, en particular, los 200 códigos de estado entremezclados que significan que el atacante encontró una contraseña válida.

Aquí hay condiciones que podrían indicar un ataque de fuerza bruta u otro abuso de cuenta:

  • Muchos inicios de sesión fallidos desde la misma dirección IP
  • Inicia sesión con múltiples nombres de usuario desde la misma dirección IP
  • Inicia sesión para una sola cuenta que proviene de muchas direcciones IP diferentes
  • Uso excesivo y consumo de ancho de banda de un solo uso
  • Intentos fallidos de inicio de sesión de nombres de usuario o contraseñas secuenciales alfabéticamente
  • Inicia sesión con una URL de referencia del correo de alguien o cliente de IRC
  • URL de referencia que contienen el nombre de usuario y la contraseña en el formato http: // usuario: [correo electrónico protegido]
  • Si protege un sitio web para adultos, consulte las URL de sitios conocidos para compartir contraseñas
  • Los inicios de sesión con contraseñas sospechosas que los hackers usan comúnmente, como ownsyou (ownzyou), washere (wazhere), fanáticos, hacksyou y similares

Los ataques de fuerza bruta son sorprendentemente difíciles de detener por completo, pero con un diseño cuidadoso y múltiples contramedidas, puede limitar su exposición a estos ataques. En última instancia, la única mejor defensa es asegurarse de que los usuarios sigan las reglas básicas para contraseñas seguras: usar contraseñas largas e impredecibles, evitar palabras del diccionario, evitar reutilizar contraseñas y cambiar las contraseñas regularmente.

Algoritmo de bcrypt para hash, salazón, tiempo de espera (para sitios web)