기존 서버는 Amazon linux 2를 사용하였으나 node version upgrade를 위하여 Amazon linux 2023으로 변경하였다.
다만, 기존에 외부 종속성 중에서 DB 접속이 필요하던 서비스가 있었는데 잘 되던 ssh 터널링의 접속이 계속 거부되는 이슈가 생겼다.
현재 OpenSSH 버전은 8.7버전이었다.
$ ssh -V
OpenSSH_8.7p1
https://www.openssh.com/txt/release-8.8
위 openssh 릴리즈 노트에 따르면 다음과 같다.
OpenSSH 8.8 was released on 2021-09-26. It is available from the mirrors listed athttps://www.openssh.com/. OpenSSH is a 100% complete SSH protocol 2.0 implementation and includes sftp client and server support
. . . . .
This release disables RSA signatures using the SHA-1 hash algorithm by default. This change has been made as the SHA-1 hash algorithm is cryptographically broken, and it is possible to create chosen-prefix hash collisions for <USD$50K [1] For most users, this change should be invisible and there is no need to replace ssh-rsa keys. OpenSSH has supportedRFC8332 RSA/SHA-256/512 signatures since release 7.2 and existing ssh-rsa keys will automatically use the stronger algorithm where possible. Incompatibility is more likely when connecting to older SSH implementations that have not been upgraded or have not closely tracked improvements in the SSH protocol. For these cases, it may be necessary to selectively re-enable RSA/SHA1 to allow connection and/or user authentication via the HostkeyAlgorithms and PubkeyAcceptedAlgorithms options. For example, the following stanza in ~/.ssh/config will enable RSA/SHA1 for host and user authentication for a single destination host: Host old-host HostkeyAlgorithms +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa We recommend enabling RSA/SHA1 only as a stopgap measure until legacy implementations can be upgraded or reconfigured with another key type (such as ECDSA or Ed25519).
OpenSSH 8.8에서는 ssh-rsa 서명 알고리즘이 기본적으로 비활성화된 이유는 ssh-rsa가 SHA-1 해시 알고리즘을 사용하기 때문입니다. SHA-1은 암호적으로 안전하지 않으며, 충돌 공격에 취약합니다. 이로 인해 다음과 같은 이유로 SHA-1 사용이 문제가 됩니다:
- SHA-1의 암호학적 약점: SHA-1 해시 알고리즘은 충돌 공격에 취약합니다. 이는 서로 다른 두 데이터 세트가 동일한 해시 출력을 생성할 수 있다는 것을 의미합니다. 이러한 충돌은 SHA-1이 제공하는 보안 보증을 무너뜨려 안전한 암호화 작업에 부적합하게 만듭니다. 연구에 따르면 비교적 적은 계산 자원으로 이러한 충돌을 생성할 수 있습니다.
- 공격 비용: 연구자들은 공격자가 충돌을 만들어내는 데 필요한 비용이 50,000달러 미만일 것으로 추정하고 있습니다. 이로 인해 실제 공격이 가능할 위험이 커집니다.
- 표준 및 모범 사례: 더 넓은 암호학 커뮤니티는 SHA-1 사용을 피하고 있습니다. 주요 웹 브라우저, 인증 기관 및 기타 보안 민감 애플리케이션은 인증서 및 서명에 대해 SHA-1 사용을 중단하거나 금지하고 있습니다. 미국 국립표준기술연구소(NIST)는 2011년에 SHA-1을 사용 중단하고, SHA-256 또는 SHA-3와 같은 더 강력한 알고리즘을 권장했습니다.
- 개선된 대안: OpenSSH는 7.2 버전 이후로 더 강력한 알고리즘(RSA/SHA-256 및 RSA/SHA-512)을 사용한 RSA 키를 지원해왔으며, 이러한 강력한 알고리즘은 SHA-1과 같은 취약점이 없습니다. ssh-rsa를 사용하지 않음으로써 OpenSSH는 현대 암호학 관행에 맞추어 전체적인 보안을 강화합니다.
따라서 OpenSSH 버전 업그레이드에 따라서 ssh-rsa 알고리즘 지원을 더 이상 하지 않는 상황이지만, 외부 종속성 서비스의 pub키를 관여할 수 있는 상황이 아니었기에 적용가능하도록 환경을 수정해야한다.
(지원 가능한 알고리즘 확인)
$ ssh -Q PubkeyAcceptedAlgorithms | grep rsa
rsa 알고리즘이 없기에 아래와 같은 에러가 지속적으로 발생
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
$ vim /etc/ssh/sshd_config
# 하단 구문 추가 후 저장
PubkeyAcceptedAlgorithms +ssh-rsa
$ sudo systemctl restart sshd
위와 같이 ssh-rsa 알고리즘을 추가하여 재시작하면 정상적으로 될 것이다.
다만, Amazon linux 2023에서는 위와 같은 과정을 거쳐도 계속해서 에러가 발생하였다.
https://docs.aws.amazon.com/linux/al2023/ug/ssh-host-keys-disabled.html
$ sudo dnf install crypto-policies-scripts
$ sudo update-crypto-policies --set LEGACY
공식문서 상 위와 같은 명령어를 입력하였더니 이제 정상적으로 ssh-rsa 알고리즘이 적용되어 ssh 터널링이 정상적으로 접속이 되었다 👍
짧게 어째서 ssh-rsa 알고리즘이 deprecated되었는지 살펴보면 다음과 같다.
OpenSSH 8.8에서는 ssh-rsa 서명 알고리즘이 기본적으로 비활성화된 이유는 ssh-rsa가 SHA-1 해시 알고리즘을 사용하기 때문이다. SHA-1은 암호적으로 안전하지 않으며, 충돌 공격에 취약합니다. 이로 인해 다음과 같은 이유로 SHA-1 사용이 문제가 된다.
- SHA-1의 암호학적 약점: SHA-1 해시 알고리즘은 충돌 공격에 취약합니다. 이는 서로 다른 두 데이터 세트가 동일한 해시 출력을 생성할 수 있다는 것을 의미합니다. 이러한 충돌은 SHA-1이 제공하는 보안 보증을 무너뜨려 안전한 암호화 작업에 부적합하게 만든다. 연구에 따르면 비교적 적은 계산 자원으로 이러한 충돌을 생성할 수 있다.
- 공격 비용: 연구자들은 공격자가 충돌을 만들어내는 데 필요한 비용이 50,000달러 미만일 것으로 추정. 이로 인해 실제 공격이 가능할 위험이 커진다.
- 표준 및 모범 사례: 더 넓은 암호학 커뮤니티는 SHA-1 사용을 피하고 있다. 주요 웹 브라우저, 인증 기관 및 기타 보안 민감 애플리케이션은 인증서 및 서명에 대해 SHA-1 사용을 중단하거나 금지하고 있다. 미국 국립표준기술연구소(NIST)는 2011년에 SHA-1을 사용 중단하고, SHA-256 또는 SHA-3와 같은 더 강력한 알고리즘을 권장한다.
- 개선된 대안: OpenSSH는 7.2 버전 이후로 더 강력한 알고리즘(RSA/SHA-256 및 RSA/SHA-512)을 사용한 RSA 키를 지원해왔으며, 이러한 강력한 알고리즘은 SHA-1과 같은 취약점이 없다. ssh-rsa를 사용하지 않음으로써 OpenSSH는 현대 암호학 관행에 맞추어 전체적인 보안을 강화한다.