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

귀하의 운영 체제가 최대 8자까지만 지원하는 DES 비밀번호 암호화를 사용하는 것 같습니다.

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

~에서man crypt(3)

GNU 확장

이 함수의 glibc2 버전에는 다음과 같은 추가 기능이 있습니다. salt가 3개의 문자 "$1$"로 시작하고 최대 8개의 문자가 뒤따르고 선택적으로 "$"로 끝나는 문자열인 경우 glibc 암호화 함수는 DES 시스템을 사용하지 않고 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

인용하다

관련 정보