¿SSH ignora los caracteres después de la cadena de contraseña correcta?

¿SSH ignora los caracteres después de la cadena de contraseña correcta?

La máquina remota 10.10.10.1 tiene la contraseña "asdFGH12" para el usuario denominado "usuario". Puedo iniciar sesión incluso si escribo la contraseña "asdFGH12dasdkjlkjasdus" o cualquier otro carácter después de la cadena "asdFGH12".

$ ssh -v 10.10.10.1
OpenSSH_5.2p1 FreeBSD-20090522, OpenSSL 0.9.8k 25 Mar 2009
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to 10.10.10.1 [10.10.10.1] port 22.
debug1: Connection established.
debug1: identity file /home/user/.ssh/identity type 0
debug1: identity file /home/user/.ssh/id_rsa type -1
debug1: identity file /home/user/.ssh/id_dsa type 2
debug1: Remote protocol version 1.99, remote software version OpenSSH_4.1
debug1: match: OpenSSH_4.1 pat OpenSSH_4*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.2p1 FreeBSD-20090522
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host '10.10.10.1' is known and matches the RSA host key.
debug1: Found key in /home/user/.ssh/known_hosts:58
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering public key: /home/user/.ssh/id_dsa
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Trying private key: /home/user/.ssh/id_rsa
debug1: Next authentication method: keyboard-interactive
Password:
debug1: Authentication succeeded (keyboard-interactive).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
debug1: Requesting X11 forwarding with authentication spoofing.
Last login: Tue Apr 23 14:30:59 2013 from 10.10.10.2
Have a lot of fun...
user@server:~> 

¿Es este un comportamiento conocido de (ciertas) versiones del servidor SSH?

Respuesta1

Esto no es una limitación por parte de su servidor SSH, es una limitación por parte del algoritmo hash de contraseña de su servidor.

Al aplicar hash a contraseñas en Unix, crypt()se llama a la función. Esto puede usar uno de muchos backends, una posibilidad es usar DES u otro algoritmo limitante (para este caso particular, asumiré que su servidor está usando DES). DES generalmente no se usa de forma predeterminada en los sistemas operativos modernos porque resulta en una limitación particularmente mala: la seguridad y validación de la contraseña está limitada a 8 bytes.

Esto significa que si su contraseña se estableció como "foobarbaz", se convierte en "foobarba", generalmente sin previo aviso o aviso. La misma limitación se aplica a la validación, lo que significa que "foobarbaz", "foobarba" y "foobarbazqux" validan para este caso particular.

Respuesta2

Sospecho que su sistema operativo utiliza cifrado de contraseña DES, que solo admite un máximo de 8 caracteres.

https://serverfault.com/questions/361591/ssh-accepts-only-the-half-password

Deman crypt(3)

EXTENSIÓN GNU

La versión glibc2 de esta función tiene las siguientes características adicionales. Si salt es una cadena de caracteres que comienza con los tres caracteres "$1$" seguidos de como máximo ocho caracteres y, opcionalmente, termina en "$", entonces, en lugar de utilizar la máquina DES, la función glibc crypt utiliza un algoritmo basado en MD5 y genera hasta 34 bytes, es decir, "$1$<cadena>$", donde "<cadena>" representa hasta 8 caracteres después de "$1$" en el salt, seguido de 22 bytes elegidos del conjunto [a–zA –Z0–9./].
Aquí es importante toda la clave (en lugar de sólo los primeros 8 bytes).

Puedes verificar la configuración de tu pam para ver si estás usando MD5 o DES:

% egrep "password.*pam_unix.so" /etc/pam.d/system-auth
password    sufficient    pam_unix.so md5 shadow nis nullok try_first_pass use_authtok

También puede confirmar qué función hash está utilizando su sistema con este comando:

% authconfig --test | grep hashing
 password hashing algorithm is md5

Y puedes ver en este /etc/shadowarchivo de sistemas que también usa MD5:

root:$1$<DELETED PASSWORD HASH>:14245:0:99999:7:::

Los códigos que verás en /etc/shadowpara cada tipo de hash:

  • $1-MD5
  • $2 – pez globo
  • $2a – eksblowfish
  • $5 – SHA-256
  • $6 – SHA-512

Puede reconfigurar su sistema con este comando:

% authconfig --passalgo=sha512 --update

Será necesario volver a generar todas las contraseñas existentes; puede utilizar este comando para obligar a los usuarios a restablecerlas la próxima vez que inicien sesión:

% chage -d 0 userName

Referencias

información relacionada