내 목표는 Linux 시스템(특히 Lubuntu 14.10 - 예, 이전 버전은 하드웨어 호환성 이유로 인해 지금은 변경할 수 없음)에서 취약한 SSH 비밀번호를 비활성화하는 것입니다.
먼저, 다양한 비밀번호를 사용하여 실제로 머신에 SSH로 접속할 수 있는지 확인했습니다. 예를 들어 ssh USER@HOST -c aes256-cbc
, ssh USER@HOST -c aes256-ctr
비밀번호를 묻는 메시지를 표시하고 들어오게 해주세요.
/etc/ssh/sshd_config 파일 맨 아래에 다음을 추가했습니다.
# Cryptographic Policy
# See https://www.ssh.com/academy/ssh/sshd_config#cryptographic-policy
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss
KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256
MACs hmac-sha2-256,hmac-sha2-512
이제 이러한 변경 사항이 적용되기를 원하며 sshd 서비스를 다시 시작해야 한다는 메시지가 어디서나 표시됩니다. 나는 이것이 SSH 연결이나 그와 유사한 것을 수신하는 서비스임에 틀림없다고 생각합니다. 그러나 나는 실행중인 것이 하나도없는 것 같습니다. 서비스 목록에 없습니다. 재부팅하려고 하면 다음 메시지가 나타납니다.
$ service sshd restart
sshd: unrecognized service
그래서 방금 컴퓨터를 재부팅했습니다.
내가 추가한 줄은 이 서비스가 실행되지 않을 때에도 작업을 수행합니다. 구성 파일을 업데이트하고 재부팅한 후에는 어떤 비밀번호로도 SSH에 접속할 수 없기 때문입니다. 예상되는 "일치하는 비밀번호를 찾을 수 없습니다"(현재 비활성화된 것으로 간주되는 비밀번호의 경우)라는 메시지를 표시하는 대신 연결을 거부합니다.
$ ssh USER@HOST -c aes256-cbc
ssh: connect to host <IP REDACTED> port 22: Connection refused
$ ssh USER@HOST -c aes256-ctr
ssh: connect to host <IP REDACTED> port 22: Connection refused
이 줄을 제거하고 재부팅하면 이전처럼 SSH를 통해 다시 로그인할 수 있습니다.
sshd_config 파일에 이 줄을 추가하면 ssh가 중단되는 것 같습니다. 사실 sshd가 실행 중도 아니기 때문에 다시 시작할 수 없을 것 같습니다. 이상합니다. 어쩌면 내가 하고 있는 일을 오해했을 수도 있습니다. 아니면 이전 버전을 사용하고 있어서 문제가 발생할 수 있나요?
$ ssh -V
OpenSSH_6.6.1p1 Ubuntu-8, OpenSSL 1.0.1f 6 Jan 2014
귀하의 통찰력에 미리 감사드립니다. 제가 작성한 내용이 명확하길 바라며, 필요하다면 더 자세한 내용을 기꺼이 제공해 드리겠습니다.
- - 갱신 - -
귀하의 답변과 의견에 감사드립니다. 이것으로부터 나는 이 컴퓨터에서 sshd를 다시 시작해서는 안 되며, 다시 시작해야 하는 서비스가 ssh라는 것을 알았습니다. 서비스를 다시 시작하고 를 실행하여 /etc/ssh/sshd_config에 대한 변경 사항을 적용할 수 있었습니다 sudo service ssh restart
. 이는 재부팅하는 것보다 더 편리하며 모두 지적했듯이 위험도 적습니다.
SSH를 다시 시작한 후 이전 다시 시작한 후와 동일한 동작이 발생합니다. 모든 연결이 거부되었습니다. 지금 내 생각에는 Shadur가 옳고 오타일 뿐이거나 내가 사용하도록 요청한 하나 이상의 암호 또는 알고리즘이 이 버전에서 허용되지 않는 것 같습니다.
---- 업데이트 2 ---- HostKeyAlgorithms 옵션을 제거하면 작동합니다. 이는 OpenSSH 6.6의 구성 옵션이 아닌 것 같습니다. 제 생각에는이번에 제출하세요추가할 수 있는 곳이겠네요.
$ ssh USER@HOST -c aes256-cbc
Unable to negotiate with <IP REDACTED> port 22: no matching cipher found. Their offer: aes128-ctr,aes192-ctr,aes256-ctr
$ ssh USER@HOST -c aes256-ctr
USER@HOST's password:
Welcome to Ubuntu 14.10 (GNU/Linux 3.16.0-23-generic i686)
답변1
서비스가 다시 돌아올지 확신할 수 없을 때 다시 시작한 것이 심각한 실수였지만 상황을 이대로 처리하도록 합시다.
하드웨어에 대해 언급하셨는데, 이는 곧 콘솔에 로그인할 수 있도록 컴퓨터에 물리적으로 액세스할 수 있다는 뜻이기를 바랍니다.
ssh
이 작업을 수행하면(또는 컴퓨터가 다른 곳에서 호스팅되는 경우 다른 사람이 대신 관리하게 하면) 서비스 이름이 대신에 있음을 알게 될 것입니다. 즉, 개요가 제공되어야 함을 sshd
의미합니다. service ssh status
이와 같이:
shadur@periapsis:~$ service ssh status
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-04-21 21:45:37 CEST; 12h ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 1357 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 1362 (sshd)
Tasks: 4 (limit: 19080)
Memory: 7.2M
CPU: 5.703s
CGroup: /system.slice/ssh.service
├─ 1362 "sshd: /usr/sbin/sshd -D [listener] 2 of 10-100 startups"
├─42848 "sshd: [accepted]"
├─42903 "sshd: root [priv]"
└─42904 "sshd: root [net]"
다음은 sshd
프로세스에서 마지막으로 언급한 몇 가지 사항을 자세히 설명하는 일부 로그 항목입니다.
또는 journalctl -u ssh.service
로그 출력이 무엇인지 확인할 수 있습니다.
내 생각엔 어딘가에 오타가 있거나 이전 버전의 ssh가 알지 못하는 암호화 방법을 참조하고 있는 것 같습니다.
나중에 참조할 수 있도록 sshd -t
구성 sshd -T
에 대한 시험 실행 테스트를 수행하고 오류를 내보내므로 복구 여부가 확실하지 않을 때 sshd 프로세스를 다시 시작할 위험이 없습니다.