La adición de una sal de .htpasswd?
-
09-10-2019 - |
Pregunta
¿Es posible añadir una sal de contraseñas en archivos .hpasswd? No asumo desde el servidor necesitaría la sal para cada usuario con el fin de verificar la contraseña y no puedo pensar en cómo iba a conseguir, pero por lo demás si la lista debía ser obtenida sería bastante vulnerable. ¿Existe una solución?
Muchas gracias por su ayuda, Ben
Solución
Por defecto htpasswd utiliza el estándar cripta función y por lo tanto las contraseñas ya se salan - nota en este ejemplo que ambos usuarios tienen la misma contraseña sin embargo, los valores hash son diferentes:
simon@diablo:~$ htpasswd -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ htpasswd -b htpasswd simon2 abcd Adding password for user simon2 simon@diablo:~$ cat htpasswd simon:NWvm/LCCxQ64E simon2:2I.LBzsRqULN6
(nota: la bandera -b
normalmente se desaconseja debido a que otros usuarios puedan ver sus argumentos de línea de comandos y por lo tanto la contraseña)
Los dos primeros caracteres del hash son la sal; contraseñas se verifican llamando crypt()
nuevo. Introducción de una contraseña incorrecta produce una cadena que es desigual a la contraseña con algoritmo hash:
>>> from crypt import crypt
>>> crypt("wrongpass", "NWvm/LCCxQ64E")
'NWbxQgX1unvso'
mientras que la contraseña correcta produce el hash espera:
>>> crypt("abcd", "NWvm/LCCxQ64E")
'NWvm/LCCxQ64E'
htpasswd -m
utiliza un algoritmo diferente que se basa-MD5 y utiliza una sal más larga:
simon@diablo:~$ htpasswd -m -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ cat htpasswd simon:$apr1$mfvnBVmG$iIHIHOaH9vcImG5G.8eVa/
Aquí, la sal es los 8 caracteres entre el segundo y tercero $
.
tiendas htpasswd -s
un SHA-1 digerir sin sal; Esto parece ser para la compatibilidad con Netscape / LDIF:
simon@diablo:~$ htpasswd -s -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ htpasswd -s -b htpasswd simon2 abcd Adding password for user simon2 simon@diablo:~$ cat htpasswd simon:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8= simon2:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=
Estas pueden ser fácilmente revertidos - convertir en un hexágono digerir:
>>> "".join("%02x" % ord(c)
... for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'
a continuación, utilizar un línea de base de datos de hash .
Otros consejos
La utilidad htpasswd
ya hace sales uso en la mayoría de los casos:
La cripta () y formatos MD5 permutan la representación anteponiendo una cadena semilla aleatoria, para hacer de diccionario ataques contra las contraseñas más difícil.
Y eso es (más o menos) con el propósito de sales en los archivos de contraseñas. Mientras que las sales tienen que ser incluidos en el archivo .htpasswd
del servidor para el servidor para poder comprobar contraseñas, son las numerosas posibilidades diferentes de lo que es una sal podría ser que defiende contra técnicas de ataque como tablas de arco iris .
Sin embargo, si los usuarios elegir contraseñas débiles o comunes, descifrado de contraseñas es un problema de todos modos, ya que el atacante (que se supone tener acceso al archivo de contraseñas) tratará los primeros, muy rápidamente, de hecho (no limitado por la velocidad de el servidor y conexión a Internet), adivinando en la forma normal. El mejor consejo que puedo dar es que los usuarios siempre deben elegir contraseñas seguras.