Generar hash de contraseña de samba mediante programación

Generar hash de contraseña de samba mediante programación

Me preguntaba si existe un comando estándar de Linux/Ubuntu para generar hashes de contraseñas SMB stdout. Para los curiosos, quiero administrar un conjunto de nombres de usuario y contraseñas en varias máquinas (usando Puppet), incluido el acceso a través de Samba (por ahora, no uso algo más general como LDAP). Más específicamente, un equivalente de este comando que uso para generar entradas de contraseña de Linux pero para SMB/Samba:

openssl passwd -1

Respuesta1

Internamente, Samba almacena lo mismohashes LM y NTcomo lo hace Windows, y que se utilizan para la autenticación NTLM.

  • El hash NT utiliza el algoritmo MD4, aplicado a la contraseña en codificación Little Endian UTF-16. Puedes utilizar herramientas comunes para calcularlo, por ejemplo:

    #!/usr/bin/env perl
    use Digest::MD4 qw(md4_hex);
    use Encode qw(encode);
    chomp(my $pw = <STDIN>);
    print md4_hex(encode("UTF-16LE", $pw)), "\n";
    

    o OpenSSL:

    printf '%s' "$pw" | iconv -t utf16le | openssl md4
    
  • El hash LM se puede descifrar en segundos. Ya nadie lo usa. No lo uses. Las versiones modernas de Windows, así como (con suerte) Samba, solo almacenan el hash LM de una contraseña "en blanco", independientemente de la entrada.

Sin embargo, incluir los hashes como parte de tus scriptses una muy mala idea,No es mucho mejor que conservar las contraseñas. El hash MD4 sin sal es muy fácil de descifrar si uno quiere obtener la contraseña original, e incluso sin eso, el hash es equivalente a una contraseña: cualquiera que tenga el hash puede realizar la autenticación NTLM sin necesidad de la contraseña. (Windows no permite que nadie, ni siquiera los administradores, acceda directamente al SAM, por lo que inicialmente se pensó que un salt era innecesario).

información relacionada