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.