¿Es seguro permitir que una cuenta use 'test123'? como su contraseña?

1

Estoy trabajando para reforzar la seguridad de la capa de autenticación de mi aplicación y actualmente estoy haciendo una llamada sobre la complejidad que necesitaré para las contraseñas.



¿Existe una recomendación 'estándar' de complejidad?

El requisito actual es así:

8 char minimum
a-z
At least one number
At least one of the following: !@#$%^&*

Entonces, si alguien eligiera test123! como su contraseña, mi aplicación les permitiría usar eso como su contraseña.

Esto es aproximadamente "dos veces" la complejidad que mi banco requiere para iniciar sesión en mi cuenta. Todavía permiten 5 char, a-z, 0-9 para las contraseñas, lo que me parece una locura. Pero tampoco parece que estén sufriendo una epidemia de ataques, por lo que debe evitar los ataques, "de alguna manera".

  

Pregunta: Como profesional de infosec, ¿qué complejidad mínima requeriría que tuviera Gmail si fuera su llamada?



¿Cómo utilizo un estimador de entropía de manera efectiva?

Acabo de descubrir qué es un Entropy Estimator y son geniales. No he estado tan entusiasmado con el software desde hace mucho tiempo.

No, no ingresé ninguna de mis contraseñas en ninguna de ellas.

No, no entiendo realmente cómo funcionan.

Y no estoy completamente seguro de cómo usar la información que me dan. Por ejemplo, ingresé test123! en el estimador GRC Password Haystacks y obtuve estos resultados:

Haystacks de contraseña de GRC

Search Space Depth (Alphabet):  26+10+33 = 69
Search Space Length (Characters):   8 characters
Exact Search Space Size (Count): 521,354,232,876,120 
Search Space Size (as a power of 10):   5.21 x 1014

**Time Required to Exhaustively Search this Password's Space:**
Online Attack: (100,000 guesses per second) 1.66 hundred centuries
Offline Fast Attack: (100 billion guesses per second)   1.45 hours
Massive Cracking Array: (100 trillion guesses per second)   5.21 seconds

Por lo tanto, aparentemente esos resultados parecen bastante buenos. La probabilidad de que uno de mis usuarios sea atacado por un blackhat con un massive cracking array a su disposición parece altamente improbable.

También he implementado un mecanismo de bloqueo de limitación de velocidad y de lista negra con la siguiente configuración:

- IP is used as the ID
- Rate-Limited with a max of 10rps from any given IP
- A maximum of 5 failed login attempts are allowed every 60s before an IP is blacklisted
- Blacklist duration is 5 minutes
  

Pregunta: Teniendo en cuenta las defensas que he implementado, ¿debería considerar mi punto final de inicio de sesión seguro si un usuario decide elegir test123! como su contraseña?



¿Qué pasa con un ataque de diccionario?

Obviamente, test123! se intentará muy cerca del inicio del ataque.

Si estoy permitiendo 5 intentos cada 60 antes de incluir en la lista negra una IP, y la duración de la lista negra es de 5 minutos, parece razonable que un atacante determinado intente limitar los estimados a 5 por minuto y luego simplemente tómelos más tiempo para agarrar esta fruta de poca monta, o si realmente lo desean, podrían agarrar una nueva IP cada 5 intentos, o juntar 10,000 máquinas para atacar con 5 intentos por minuto para acelerar las cosas. Muy poco probable, pero no imposible.

Y esto me lleva a creer que realmente no hay ninguna forma de protegerse de un ataque de diccionario, excepto para forzar Passwords of Unusual Complexity en mis usuarios, lo que realmente no quiero hacer.

¿Y teniendo en cuenta que Facebook, Google, etc. no parecen tener estos requisitos, debe haber alguna forma de protegerse contra un ataque de diccionario por segundo a corto plazo y conjeturas bajas? ¿O es simplemente que nadie realmente se molesta en hacer esto porque no vale la pena?

  

Pregunta: ¿Existe alguna forma confiable de protegerse de los ataques de diccionario? ¿El ajuste de los parámetros de los módulos de límite de velocidad y de lista negra mejoraría la seguridad de mi punto final?

Gracias de antemano por cualquier ayuda u opinión.

    
pregunta AJB 28.12.2015 - 01:56
fuente

1 respuesta

2

Casi has respondido a tus propias preguntas. En primer lugar, es importante tener en cuenta que la complejidad de las contraseñas normalmente solo interviene en los ataques sin conexión. Como mostró su informe de entropía, una contraseña que se pueda descifrar fácilmente sin conexión demoraría mucho como un ataque en línea. En cuanto a que su banco solo requiere un mínimo de 5 caracteres, obviamente las contraseñas cortas se pueden descifrar fácilmente en un ataque fuera de línea, y como tal, se podría argumentar que tal vez sea una mejor práctica si tienen un longitud de contraseña mínima más larga. Dicho esto, como cualquier banco debería, probablemente tengan una seguridad muy estricta en sus servidores y datos, lo que significa que las posibilidades de que alguien obtenga acceso para realizar un ataque sin conexión son extremadamente bajas. Mientras tengan implementadas buenas medidas de prevención de fuerza bruta para las páginas de inicio de sesión (bloqueos y / o autenticación de 2 factores para dispositivos desconocidos), esto podría explicar por qué no se comprometen regularmente las cuentas. (Aunque podría decirse que incluso si lo hicieran, serían cuentas individuales y probablemente no se divulgarían de todos modos).

Con respecto a su pregunta sobre la prevención de intentos de contraseña distribuida, la solución simple es en lugar de bloquear los intentos de una IP después de 5 intentos fallidos, simplemente bloquear temporalmente la cuenta después de 5 intentos, independientemente de las IP. Esto frustraría completamente un ataque distribuido. Tiene el desafortunado efecto secundario de bloquear potencialmente al usuario real si alguien intenta piratear su cuenta, pero como el bloqueo sería temporal, el ataque tendría que ser prácticamente constante para que el usuario se dé cuenta en primer lugar. La mayoría de los atacantes no obtendrían nada haciendo esto, así que creo que tienes razón en que la razón por la que no ocurre con más frecuencia es que no se molestan en perder algo de tiempo en algo que tiene una probabilidad extremadamente baja de éxito.

    
respondido por el TTT 28.12.2015 - 03:32
fuente

Lea otras preguntas en las etiquetas