SSH는 올바른 비밀번호 문자열 뒤의 문자를 무시합니까?

SSH는 올바른 비밀번호 문자열 뒤의 문자를 무시합니까?

원격 시스템 10.10.10.1에는 "user"라는 사용자에 대한 비밀번호 "asdFGH12"가 있습니다. 비밀번호 "asdFGH12dasdkjlkjasdus"를 입력하거나 "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:~> 

이는 (특정) SSH 서버 버전의 알려진 동작입니까?

답변1

이는 SSH 서버 부분의 제한 사항이 아니라 서버 비밀번호 해시 알고리즘 부분의 제한 사항입니다.

Unix에서 비밀번호를 해싱할 때 해당 crypt()함수가 호출됩니다. 이는 많은 백엔드 중 하나를 사용할 수 있으며, DES를 사용하거나 다른 제한 알고리즘을 사용할 수도 있습니다(이 특별한 경우에는 서버가 DES를 사용한다고 가정합니다). DES는 일반적으로 현대 운영 체제에서 기본적으로 사용되지 않습니다. 왜냐하면 비밀번호 강도와 유효성 검사가 8바이트로 제한되는 특히 나쁜 제한을 초래하기 때문입니다.

즉, 비밀번호가 "foobarbaz"로 설정되어 있으면 일반적으로 경고나 공지 없이 "foobarba"가 됩니다. 유효성 검사에도 동일한 제한이 적용됩니다. 즉, "foobarbaz", "foobarba" 및 "foobarbazqux"는 모두 이 특정 사례에 대해 유효성을 검사합니다.

답변2

귀하의 OS는 최대 8자까지만 지원하는 DES 비밀번호 암호화를 사용하고 있는 것 같습니다.

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

에서man crypt(3)

GNU 확장

이 함수의 glibc2 버전에는 다음과 같은 추가 기능이 있습니다. salt가 "$1$" 세 문자로 시작하고 그 뒤에 최대 8자가 따라오고 선택적으로 "$"로 끝나는 문자열인 경우 DES 시스템을 사용하는 대신 glibc crypt 함수는 MD5 기반 알고리즘을 사용합니다. 최대 34바이트, 즉 "$1$<string>$"을 출력합니다. 여기서 "<string>"은 솔트의 "$1$" 다음에 오는 최대 8자를 나타내고 그 뒤에는 [a–zA 세트에서 선택한 22바이트가 옵니다. –Z0–9./].
여기서는 처음 8바이트만이 아니라 전체 키가 중요합니다.

pam 설정을 확인하여 MD5 또는 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

다음 명령을 사용하여 시스템에서 어떤 해싱 기능을 사용하고 있는지 확인할 수도 있습니다.

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

/etc/shadow그리고 이 시스템 파일에서 MD5도 사용하고 있음을 확인할 수 있습니다 .

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

/etc/shadow각 해싱 유형에 대해 표시되는 코드는 다음과 같습니다 .

  • $1 – MD5
  • $2 – 복어
  • $2a – 엑스복어
  • $5 – SHA-256
  • $6 – SHA-512

다음 명령을 사용하여 시스템을 재구성할 수 있습니다.

% authconfig --passalgo=sha512 --update

기존 비밀번호를 다시 생성해야 합니다. 다음 명령을 사용하여 사용자가 다음에 로그인할 때 비밀번호를 재설정하도록 할 수 있습니다.

% chage -d 0 userName

참고자료

관련 정보