FIDO/U8.2F 2๋‹จ๊ณ„ ์ธ์ฆ ํ† ํฐ์„ ์ง€์›ํ•˜๋Š” OpenSSH XNUMX ์ถœ์‹œ

XNUMX๊ฐœ์›”๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— ์ œ์‹œ๋œ ์„๋ฐฉํ•˜๋‹ค OpenSSH 8.2, SSH 2.0 ๋ฐ SFTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.

OpenSSH 8.2 ๋ฆด๋ฆฌ์Šค์˜ ์ฃผ์š” ๊ฐœ์„  ์‚ฌํ•ญ์€ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋Š” ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ XNUMX๋‹จ๊ณ„ ์ธ์ฆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค. U2F, ์–ผ๋ผ์ด์–ธ์Šค์—์„œ ๊ฐœ๋ฐœ ํ”ผ๋„. U2F๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ €๋ ดํ•œ ํ•˜๋“œ์›จ์–ด ํ† ํฐ์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋ฌผ๋ฆฌ์  ์กด์žฌ๋ฅผ ํ™•์ธํ•˜๊ณ  USB, Bluetooth ๋˜๋Š” NFC๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์žฅ์น˜๋Š” ์›น์‚ฌ์ดํŠธ์—์„œ ์ด์ค‘ ์ธ์ฆ ์ˆ˜๋‹จ์œผ๋กœ ํ™๋ณด๋˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋ฏธ ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋˜๋ฉฐ Yubico, Feitian, Thetis ๋ฐ Kensington์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์ œ์กฐ์—…์ฒด์—์„œ ์ƒ์‚ฐ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์กด์žฌ๋ฅผ ํ™•์ธํ•˜๋Š” ์žฅ์น˜์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด SHA-25519 ํ•ด์‹œ์™€ ๊ฒฐํ•ฉ๋œ ECDSA ๋ฐ Ed25519 ๋””์ง€ํ„ธ ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด ํ‚ค ์œ ํ˜• "ecdsa-sk" ๋ฐ "ed256-sk"๊ฐ€ OpenSSH์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ† ํฐ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ ˆ์ฐจ๋Š” PKCS#11 ์ง€์›์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋กœ๋“œ๋˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ๋‹จ์˜ ๋ž˜ํผ์ธ ์ค‘๊ฐ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. libfido2, USB๋ฅผ ํ†ตํ•œ ํ† ํฐ ํ†ต์‹  ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(FIDO U2F/CTAP 1 ๋ฐ FIDO 2.0/CTAP 2 ํ”„๋กœํ† ์ฝœ์ด ์ง€์›๋จ). OpenSSH ๊ฐœ๋ฐœ์ž๊ฐ€ ์ค€๋น„ํ•œ ์ค‘๊ฐ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ libsk-libfido2 ํฌํ•จ ๋œ ํ•ต์‹ฌ libfido2๋ฟ๋งŒ ์•„๋‹ˆ๋ผ HID ๋“œ๋ผ์ด๋ฒ„ OpenBSD์šฉ.

ํ‚ค๋ฅผ ์ธ์ฆํ•˜๊ณ  ์ƒ์„ฑํ•˜๋ ค๋ฉด ์„ค์ •์—์„œ "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 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ณง ์ค‘๋‹จ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™๋ณด ํŠน์ • ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ถฉ๋Œ ๊ณต๊ฒฉ์˜ ํšจ์œจ์„ฑ(์ถฉ๋Œ ์„ ํƒ ๋น„์šฉ์€ ์•ฝ 45๋‹ฌ๋Ÿฌ๋กœ ์ถ”์‚ฐ๋ฉ๋‹ˆ๋‹ค) ๋‹ค๊ฐ€์˜ค๋Š” ๋ฆด๋ฆฌ์Šค ์ค‘ ํ•˜๋‚˜์—์„œ๋Š” SSH ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์›๋ž˜ RFC์— ์–ธ๊ธ‰๋˜์–ด ์žˆ๊ณ  ์‹ค์ œ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐœ ํ‚ค ๋””์ง€ํ„ธ ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜ "ssh-rsa"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค(์‚ฌ์šฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด). ์‹œ์Šคํ…œ์— ssh-rsa๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ "-oHostKeyAlgorithms=-ssh-rsa" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ssh๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€