XNUMX๊ฐ์๊ฐ์ ๊ฐ๋ฐ ๋์
OpenSSH 8.2 ๋ฆด๋ฆฌ์ค์ ์ฃผ์ ๊ฐ์ ์ฌํญ์ ํ๋กํ ์ฝ์ ์ง์ํ๋ ์ฅ์น๋ฅผ ์ฌ์ฉํ์ฌ XNUMX๋จ๊ณ ์ธ์ฆ์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด์์ต๋๋ค.
์ฌ์ฉ์์ ์กด์ฌ๋ฅผ ํ์ธํ๋ ์ฅ์น์ ์ํธ ์์ฉํ๊ธฐ ์ํด SHA-25519 ํด์์ ๊ฒฐํฉ๋ ECDSA ๋ฐ Ed25519 ๋์งํธ ์๋ช
์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ์๋ก์ด ํค ์ ํ "ecdsa-sk" ๋ฐ "ed256-sk"๊ฐ OpenSSH์ ์ถ๊ฐ๋์์ต๋๋ค. ํ ํฐ๊ณผ ์ํธ ์์ฉํ๊ธฐ ์ํ ์ ์ฐจ๋ PKCS#11 ์ง์์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ๋ก๋๋๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋จ์ ๋ํผ์ธ ์ค๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐฐ์น๋ฉ๋๋ค.
ํค๋ฅผ ์ธ์ฆํ๊ณ ์์ฑํ๋ ค๋ฉด ์ค์ ์์ "SecurityKeyProvider" ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ๊ฑฐ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ libsk-libfido2.so์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ SSH_SK_PROVIDER ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค(export SSH_SK_PROVIDER=/path/to/libsk-libfido2. ๊ทธ๋์). ๊ณ์ธต ๋ผ์ด๋ธ๋ฌ๋ฆฌ(--with-security-key-builtin)์ ๋ํ ๊ธฐ๋ณธ ์ง์์ ์ฌ์ฉํ์ฌ openssh๋ฅผ ๋น๋ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ "SecurityKeyProvider=internal" ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
๋ค์์ผ๋ก "ssh-keygen -t ecdsa-sk"๋ฅผ ์คํํด์ผ ํฉ๋๋ค. ๋๋ ํค๊ฐ ์ด๋ฏธ ์์ฑ ๋ฐ ๊ตฌ์ฑ๋์ด ์๋ ๊ฒฝ์ฐ "ssh"๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ssh-keygen์ ์คํํ๋ฉด ์์ฑ๋ ํค ์์ด โ~/.ssh/id_ecdsa_skโ์ ์ ์ฅ๋๋ฉฐ ๋ค๋ฅธ ํค์ ์ ์ฌํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ณต๊ฐ ํค(id_ecdsa_sk.pub)๋ Authorized_keys ํ์ผ์ ์๋ฒ์ ๋ณต์ฌ๋์ด์ผ ํฉ๋๋ค. ์๋ฒ ์ธก์์๋ ๋์งํธ ์๋ช ๋ง ํ์ธํ๊ณ , ํด๋ผ์ด์ธํธ ์ธก์์๋ ํ ํฐ๊ณผ์ ์ํธ ์์ฉ์ ์ํํฉ๋๋ค. (์๋ฒ์ libsk-libfido2๋ฅผ ์ค์นํ ํ์๋ ์์ง๋ง ์๋ฒ๊ฐ "ecdsa-sk" ํค ์ ํ์ ์ง์ํด์ผ ํฉ๋๋ค.) . ์์ฑ๋ ๊ฐ์ธ ํค(id_ecdsa_sk)๋ ๋ณธ์ง์ ์ผ๋ก ํค ํธ๋ค์ด๋ฉฐ, U2F ํ ํฐ ์ธก์ ์ ์ฅ๋ ๋น๋ฐ ์ํ์ค์ ๊ฒฐํฉํด์ผ๋ง ์ค์ ํค๋ฅผ ํ์ฑํฉ๋๋ค. id_ecdsa_sk ํค๊ฐ ๊ณต๊ฒฉ์์ ์์ ๋ค์ด๊ฐ ๊ฒฝ์ฐ ์ธ์ฆ์ ํต๊ณผํ๋ ค๋ฉด ํ๋์จ์ด ํ ํฐ์ ๋ํ ์ก์ธ์ค ๊ถํ๋ ์ป์ด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด id_ecdsa_sk ํ์ผ์ ์ ์ฅ๋ ๊ฐ์ธ ํค๋ ์ธ๋ชจ๊ฐ ์์ต๋๋ค.
๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก ํค๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ํํ ๋(์์ฑ ์ค ๋ฐ ์ธ์ฆ ์ค ๋ชจ๋) ์ฌ์ฉ์์ ๋ฌผ๋ฆฌ์ ์กด์ฌ์ ๋ํ ๋ก์ปฌ ํ์ธ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ ํฐ์ ์ผ์๋ฅผ ํฐ์นํ๋ ๊ฒ์ด ์ ์๋์ด ์์ผ๋ฏ๋ก ์ฐ๊ฒฐ๋ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์์คํ ์ ๋ํ ์๊ฒฉ ๊ณต๊ฒฉ์ ์ํํฉ๋๋ค. ๋ ๋ค๋ฅธ ๋ฐฉ์ด์ ์ผ๋ก ssh-keygen์ ์์ ๋จ๊ณ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ํ์ฌ ํค ํ์ผ์ ์ก์ธ์คํ ์๋ ์์ต๋๋ค.
OpenSSH์ ์ ๋ฒ์ ์์๋ SHA-1 ํด์๋ฅผ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๊ณง ์ค๋จ๋ ๊ฒ์ด๋ผ๊ณ ๋ฐํํ์ต๋๋ค.
OpenSSH์์ ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ํํ๊ฒ ์ ํํ๊ธฐ ์ํด ํฅํ ๋ฆด๋ฆฌ์ค์์๋ UpdateHostKeys ์ค์ ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ํด๋ผ์ด์ธํธ๋ฅผ ๋ณด๋ค ์์ ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์๋ ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ถ์ฅ๋๋ ์๊ณ ๋ฆฌ์ฆ์๋ RFC2 RSA SHA-256 ๊ธฐ๋ฐ์ rsa-sha512-8332/2(OpenSSH 7.2๋ถํฐ ์ง์๋๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋จ), ssh-ed25519(OpenSSH 6.5๋ถํฐ ์ง์) ๋ฐ ecdsa-sha2-nistp256/384/521 ๊ธฐ๋ฐ์ด ํฌํจ๋ฉ๋๋ค. RFC5656 ECDSA(OpenSSH 5.7๋ถํฐ ์ง์).
OpenSSH 8.2์์๋ "ssh-rsa"๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฅ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ง๋ง ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ ์ธ์ฆ์์ ๋์งํธ ์๋ช ์ ํ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ๋ CASignatureAlgorithms ๋ชฉ๋ก์์ ์ ๊ฑฐ๋์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก diffie-hellman-group14-sha1 ์๊ณ ๋ฆฌ์ฆ์ ์ง์๋๋ ๊ธฐ๋ณธ ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ์์ ์ ๊ฑฐ๋์์ต๋๋ค. ์ธ์ฆ์์์ SHA-1์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณต๊ฒฉ์๊ฐ ๊ธฐ์กด ์ธ์ฆ์์ ๋ํ ์ถฉ๋์ ๊ฒ์ํ ์ ์๋ ๋ฌด์ ํ์ ์๊ฐ์ ๊ฐ๊ณ ์๋ ๋ฐ๋ฉด ํธ์คํธ ํค์ ๋ํ ๊ณต๊ฒฉ ์๊ฐ์ ์ฐ๊ฒฐ ์๊ฐ ์ด๊ณผ(LoginGraceTime)์ ์ํด ์ ํ๋๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ์ํ๊ณผ ๊ด๋ จ๋์ด ์์ต๋๋ค. ).
์ด์ ssh-keygen์ ์คํํ๋ฉด OpenSSH 2๋ถํฐ ์ง์๋๋ rsa-sha512-7.2 ์๊ณ ๋ฆฌ์ฆ์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค. ์ด๋ ์ด์ OpenSSH ๋ฆด๋ฆฌ์ค๋ฅผ ์คํํ๋ ์์คํ ์์ OpenSSH 8.2์์ ์๋ช ๋ ์ธ์ฆ์๋ฅผ ์ฒ๋ฆฌํ๋ ค๊ณ ํ ๋ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. ์๋ช ์ ์์ฑํ ๋ "ssh-keygen -t ssh-rsa"๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ๊ฑฐ๋ OpenSSH 2๋ถํฐ ์ง์๋๋ ecdsa-sha256-nistp384/521/5.7 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ธฐํ ๋ณ๊ฒฝ ์ฌํญ:
- sshd_config์ ํฌํจ ์ง์๋ฌธ์ด ์ถ๊ฐ๋์ด ๊ตฌ์ฑ ํ์ผ์ ํ์ฌ ์์น์ ๋ค๋ฅธ ํ์ผ์ ๋ด์ฉ์ ํฌํจํ ์ ์์ต๋๋ค(ํ์ผ ์ด๋ฆ์ ์ง์ ํ ๋ ๊ธ๋ก๋ธ ๋ง์คํฌ๋ฅผ ์ฌ์ฉํ ์ ์์).
- "no-touch-required" ์ต์ ์ด ssh-keygen์ ์ถ๊ฐ๋์ด ํค๋ฅผ ์์ฑํ ๋ ํ ํฐ์ ๋ํ ์ก์ธ์ค๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ์ธํ ํ์๊ฐ ์์ต๋๋ค.
- ๊ณต๊ฐ ํค ์ธ์ฆ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์ต์ ์ ๊ฒฐํฉํ๋ PubkeyAuthOptions ์ง์์ด๊ฐ sshd_config์ ์ถ๊ฐ๋์์ต๋๋ค. ํ์ฌ ํ ํฐ ์ธ์ฆ์ ์ํ ๋ฌผ๋ฆฌ์ ์กด์ฌ ํ์ธ์ ๊ฑด๋๋ฐ๊ธฐ ์ํด "no-touch-required" ํ๋๊ทธ๋ง ์ง์๋ฉ๋๋ค. ๋น์ ํ์๋ฉด, Authorized_keys ํ์ผ์ "no-touch-required" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ํค๋ฅผ ์์ฑํ ๋ ์ถ๊ฐ FIDO ์ฆ๋ช ์ธ์ฆ์๋ฅผ ์์ฑํ ์ ์๋๋ก ssh-keygen์ "-O write-attestation=/path" ์ต์ ์ ์ถ๊ฐํ์ต๋๋ค. OpenSSH๋ ์์ง ์ด๋ฌํ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ง ์์ง๋ง ๋์ค์ ํค๊ฐ ์ ๋ขฐํ ์ ์๋ ํ๋์จ์ด ์ ์ฅ์์ ์๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- SSH ๋ฐ SSHD ์ค์ ์์ ์ด์ IPQoS ์ง์์ด๋ฅผ ํตํด ํธ๋ํฝ ์ฐ์ ์์ ๋ชจ๋๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
๋ฅด DSCP (ํ๋น ๋์์ ๋ํ ๋ ธ๋ ฅ์ด ์ ์) - ssh์์ "AddKeysToAgent=yes" ๊ฐ์ ์ค์ ํ ๋ ํค์ ์ค๋ช
ํ๋๊ฐ ์์ผ๋ฉด ํค ๊ฒฝ๋ก๋ฅผ ์ค๋ช
์ผ๋ก ๋ํ๋ด๋ ssh-agent์ ์ถ๊ฐ๋ฉ๋๋ค. ์์
ssh-keygen ๋ฐ ssh-agent๋ ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒฝ๋ก ๋์ PKCS#11 ๋ ์ด๋ธ๊ณผ X.509 ์ ๋ชฉ ์ด๋ฆ์ ํค์ ์ฃผ์์ผ๋ก ์ฌ์ฉํฉ๋๋ค. - DSA ๋ฐ ECDSA ํค์ฉ PEM์ ssh-keygen์ผ๋ก ๋ด๋ณด๋ด๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- FIDO/U2F ํ ํฐ ์ก์ธ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ก์ด ์คํ ํ์ผ์ธ ssh-sk-helper๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- zlib ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ผ๋ก ์ปดํ์ผํ๊ธฐ ์ํด ssh ๋ฐ sshd์ "--with-zlib" ๋น๋ ์ต์ ์ ์ถ๊ฐํ์ต๋๋ค.
- RFC4253 ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ MaxStartups ์ ํ ์ด๊ณผ๋ก ์ธํ ์ ๊ทผ ์ฐจ๋จ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ์ฐ๊ฒฐ ์ ํ์๋๋ ๋ฐฐ๋์ ์ ๊ณตํฉ๋๋ค. ์ง๋จ์ ๋จ์ํํ๊ธฐ ์ํด ์ด์ ps ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ ๋ ํ์๋๋ sshd ํ๋ก์ธ์ค ํค๋์ ํ์ฌ ์ธ์ฆ๋ ์ฐ๊ฒฐ ์์ MaxStartups ์ ํ ์ํ๊ฐ ํ์๋ฉ๋๋ค.
- ssh ๋ฐ ssh-agent์์ $SSH_ASKPASS๋ฅผ ํตํด ์ง์ ๋ ํ๋ฉด์ ์ด๋๋ฅผ ํ์ํ๋ ํ๋ก๊ทธ๋จ์ ํธ์ถํ๋ฉด ์ด์ ์ด๋ ์ ํ์ ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋ก ์ ์ก๋ฉ๋๋ค. "confirm" - ํ์ธ ๋ํ ์์(์/์๋์), "none" " - ์ ๋ณด ๋ฉ์์ง, "๊ณต๋ฐฑ" - ๋น๋ฐ๋ฒํธ ์์ฒญ
- ์ง์ ๋ ๋์งํธ ์๋ช ๊ณผ ์ฐ๊ด๋ ์ฌ์ฉ์์ ๋ํด ํ์ฉ๋ ์๋ช ์ ํ์ผ์ ๊ฒ์ํ๊ธฐ ์ํด ssh-keygen์ ์๋ก์ด ๋์งํธ ์๋ช ์์ "find-principals"๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- seccomp ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ Linux์์ sshd ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ์ ๋ํ ์ง์์ด ํฅ์๋์์ต๋๋ค. IPC ์์คํ ํธ์ถ์ ๋นํ์ฑํํ๊ณ clock_gettime64(), clock_nanosleep_time64 ๋ฐ clock_nanosleep()์ ํ์ฉํฉ๋๋ค.
์ถ์ฒ : opennet.ru