Terrapin - ์—ฐ๊ฒฐ ๋ณด์•ˆ์„ ์•ฝํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” SSH ํ”„๋กœํ† ์ฝœ์˜ ์ทจ์•ฝ์ 

๋…์ผ ๋ณดํ›”(Bochum)์— ์žˆ๋Š” Ruhr ๋Œ€ํ•™์˜ ์—ฐ๊ตฌ์› ๊ทธ๋ฃน์€ ํ”„๋กœํ† ์ฝœ์˜ ์ทจ์•ฝ์ (CVE-2023-48795)์„ ์•…์šฉํ•˜๋Š” SSH - Terrapin์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด MITM ๊ณต๊ฒฉ ๊ธฐ์ˆ ์„ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. MITM ๊ณต๊ฒฉ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฒฉ์ž๋Š” ์—ฐ๊ฒฐ ํ˜‘์ƒ ํ”„๋กœ์„ธ์Šค ์ค‘์— ์—ฐ๊ฒฐ ๋ณด์•ˆ ์ˆ˜์ค€์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ํ”„๋กœํ† ์ฝœ ํ™•์žฅ์„ ๊ตฌ์„ฑํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ ํˆดํ‚ท์˜ ํ”„๋กœํ† ํƒ€์ž…์ด GitHub์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด OpenSSH์˜ ๋งฅ๋ฝ์—์„œ ์ด ์ทจ์•ฝ์ ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ ์•ˆ์ „ํ•œ ์ธ์ฆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋„๋ก ์—ฐ๊ฒฐ์„ ๋กค๋ฐฑํ•˜๊ณ  ํ‚ค๋ณด๋“œ ํ‚ค ์ž…๋ ฅ ๊ฐ„์˜ ์ง€์—ฐ์„ ๋ถ„์„ํ•˜์—ฌ ์ž…๋ ฅ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋Š” ๋ถ€์ฑ„๋„ ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ AsyncSSH์—์„œ ๋‚ด๋ถ€ ์ƒํƒœ ๋จธ์‹  ๊ตฌํ˜„์˜ ์ทจ์•ฝ์ (CVE-2023-46446)๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ Terrapin ๊ณต๊ฒฉ์„ ํ†ตํ•ด SSH ์„ธ์…˜์— ์นจ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ทจ์•ฝ์ ์€ ChaCha20-Poly1305 ๋˜๋Š” ETM(Encrypt-then-MAC) ๋ชจ๋“œ์™€ ๊ฒฐํ•ฉ๋œ CBC ๋ชจ๋“œ ์•”ํ˜ธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  SSH ๊ตฌํ˜„์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์ด OpenSSH์—์„œ 10๋…„ ๋„˜๊ฒŒ ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์€ ์˜ค๋Š˜ ์ถœ์‹œ๋œ OpenSSH 9.6๊ณผ PuTTY 0.80, libssh 0.10.6/0.9.8 ๋ฐ AsyncSSH 2.14.2์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ์—์„œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Dropbear SSH์—์„œ๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ด๋ฏธ ์ฝ”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์ง€๋งŒ ์ƒˆ ๋ฆด๋ฆฌ์Šค๋Š” ์•„์ง ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ์ทจ์•ฝ์ ์€ ์—ฐ๊ฒฐ ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ณต๊ฒฉ์ž(์˜ˆ: ์•…์˜์ ์ธ ๋ฌด์„  ์ง€์ ์˜ ์†Œ์œ ์ž)๊ฐ€ ์—ฐ๊ฒฐ ํ˜‘์ƒ ํ”„๋กœ์„ธ์Šค ์ค‘์— ํŒจํ‚ท ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์ž„์˜ ๊ฐœ์ˆ˜์˜ SSH ์„œ๋น„์Šค ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋‚˜ ์„œ๋ฒ„์—์„œ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค๋„ ๊ณต๊ฒฉ์ž๋Š” ์‚ฌ์šฉ๋œ ํ”„๋กœํ† ์ฝœ ํ™•์žฅ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ SSH_MSG_EXT_INFO ๋ฉ”์‹œ์ง€๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ์‹œํ€€์Šค ๋ฒˆํ˜ธ ์ฐจ์ด๋กœ ์ธํ•œ ํŒจํ‚ท ์†์‹ค์„ ์ƒ๋Œ€๋ฐฉ์ด ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์›๊ฒฉ ํŒจํ‚ท๊ณผ ๋™์ผํ•œ ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ๋”๋ฏธ ํŒจํ‚ท ์ „์†ก์„ ์‹œ์ž‘ํ•˜์—ฌ ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋ฅผ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”๋ฏธ ํŒจํ‚ท์—๋Š” ์ฒ˜๋ฆฌ ์ค‘์— ๋ฌด์‹œ๋˜๋Š” SSH_MSG_IGNORE ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Terrapin - ์—ฐ๊ฒฐ ๋ณด์•ˆ์„ ์•ฝํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” SSH ํ”„๋กœํ† ์ฝœ์˜ ์ทจ์•ฝ์ 

๋ฌด๊ฒฐ์„ฑ ์œ„๋ฐ˜์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์—์„œ ๊ฐ์ง€๋˜๋ฏ€๋กœ ์ŠคํŠธ๋ฆผ ์•”ํ˜ธ ๋ฐ CTR์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ChaCha20-Poly1305 ์•”ํ˜ธ๋งŒ์ด ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค([์ด๋ฉ”์ผ ๋ณดํ˜ธ]), ์ƒํƒœ๋Š” ๋ฉ”์‹œ์ง€ ์‹œํ€€์Šค ๋ฒˆํ˜ธ์™€ Encrypt-Then-MAC ๋ชจ๋“œ์˜ ์กฐํ•ฉ(*)์œผ๋กœ๋งŒ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.[์ด๋ฉ”์ผ ๋ณดํ˜ธ]) ๋ฐ CBC ์•”ํ˜ธ.

OpenSSH 9.6 ๋ฐ ๊ธฐํƒ€ ๊ตฌํ˜„์—์„œ๋Š” ๊ณต๊ฒฉ์„ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•ด "์—„๊ฒฉํ•œ KEX" ํ”„๋กœํ† ์ฝœ์˜ ํ™•์žฅ์ด ๊ตฌํ˜„๋˜๋ฉฐ, ์„œ๋ฒ„ ๋ฐ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ง€์›์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์€ ์—ฐ๊ฒฐ ํ˜‘์ƒ ํ”„๋กœ์„ธ์Šค ์ค‘์— ์ˆ˜์‹ ๋œ ๋น„์ •์ƒ์ ์ด๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€(์˜ˆ: SSH_MSG_IGNORE ๋˜๋Š” SSH2_MSG_DEBUG ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ)๋ฅผ ๋ฐ›์œผ๋ฉด ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ณ  ๊ฐ ํ‚ค ๊ตํ™˜์ด ์™„๋ฃŒ๋œ ํ›„ MAC(๋ฉ”์‹œ์ง€ ์ธ์ฆ ์ฝ”๋“œ) ์นด์šดํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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