Glibc์˜ ARMv7์šฉ memcpy ํ•จ์ˆ˜ ๊ตฌํ˜„ ์‹œ ์น˜๋ช…์ ์ธ ์ทจ์•ฝ์ 

Cisco ๋ณด์•ˆ ์—ฐ๊ตฌ์› ํญ๋กœ ์„ธ๋ถ€ ์‚ฌํ•ญ ์ทจ์•ฝ์  (CVE-2020-6096) 32๋น„ํŠธ ARMv7 ํ”Œ๋žซํผ์šฉ Glibc ์ œ๊ณต memcpy() ํ•จ์ˆ˜ ๊ตฌํ˜„์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€ํ˜ธ ์žˆ๋Š” 32๋น„ํŠธ ์ •์ˆ˜๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ์ตœ์ ํ™” ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ณต์‚ฌ๋œ ์˜์—ญ์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์Œ์ˆ˜ ๊ฐ’์„ ์ž˜๋ชป ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์Œ์ˆ˜ ํฌ๊ธฐ์˜ ARMv7 ์‹œ์Šคํ…œ์—์„œ memcpy()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ’ ๋น„๊ต๊ฐ€ ์ž˜๋ชป๋˜๊ณ  ์ง€์ •๋œ ๋ฒ„ํผ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์˜์—ญ์— ์”๋‹ˆ๋‹ค.

๋ณต์‚ฌ๋œ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ „์†ก๋˜๋Š” ๋ณ€์ˆ˜์˜ ์Œ์ˆ˜ ๊ฐ’ ๊ตฌ์„ฑ์„ ๊ณต๊ฒฉ์ž๊ฐ€ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ํ•ด๋‹น ์ทจ์•ฝ์ ์„ ์•…์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณต๊ฒฉ ์ค‘์— ๋ฒ„ํผ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋ ค๋ฉด ์ตœ์†Œ 2GB๋ฅผ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. memcpy() ํ•จ์ˆ˜๋Š” ์‘์šฉ ๋ถ„์•ผ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉฐ ARMv4 ํ”„๋กœ์„ธ์„œ๋Š” ์ž๋™์ฐจ ์‹œ์Šคํ…œ, ๋ชจ๋ฐ”์ผ, ์‚ฐ์—…, ์†Œ๋น„์ž, ํ†ต์‹  ๋ฐ ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ Bluetooth, HD Radio/DAB, USB, CAN ๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฒฉ์„ ๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Wi-Fi Fi ๋ฐ ๊ธฐํƒ€ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค(์˜ˆ: ํฌ๊ธฐ ์ œํ•œ ์—†์ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ณต๊ฒฉ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ)

์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋™์ฐจ Wi-Fi ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™์ฐจ ์ •๋ณด ์‹œ์Šคํ…œ์— ๋‚ด์žฅ๋œ HTTP ์„œ๋ฒ„๋ฅผ ๊ณต๊ฒฉํ•˜๊ธฐ ์œ„ํ•œ ์‹ค์ œ ์ต์Šคํ”Œ๋กœ์ž‡์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๊ณต๊ฒฉ์ž๋Š” ๋งค์šฐ ํฐ GET ์š”์ฒญ์„ ์ „์†กํ•˜๊ณ  ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋ฃจํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์Œ์œผ๋กœ์จ ์ด ์„œ๋ฒ„์˜ memcpy ์ทจ์•ฝ์ ์„ ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Glibc์˜ ARMv7์šฉ memcpy ํ•จ์ˆ˜ ๊ตฌํ˜„ ์‹œ ์น˜๋ช…์ ์ธ ์ทจ์•ฝ์ 

32๋น„ํŠธ x86 ์‹œ์Šคํ…œ์—์„œ๋Š” ์ด ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ memcpy ๊ตฌํ˜„์ด ํฌ๊ธฐ ๋ณ€์ˆ˜๋ฅผ size_t ์œ ํ˜•์˜ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜ ๊ฐ’(์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด)์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ ARMv7์˜ ๊ฒฝ์šฐ size_t ๋Œ€์‹  ๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์€ ํ˜„์žฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜์ , ์ด๋Š” August Glibc 2.32 ์—…๋ฐ์ดํŠธ์— ํฌํ•จ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
์ˆ˜์ • ์‚ฌํ•ญ์€ ์„œ๋ช…๋œ ํ”ผ์—ฐ์‚ฐ์ž(bge ๋ฐ blt)์—์„œ ์ž‘๋™ํ•˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์–ด์˜ ์‚ฌ์šฉ์„ ์„œ๋ช…๋˜์ง€ ์•Š์€ ๋Œ€์‘ ํ•ญ๋ชฉ(blo ๋ฐ bhs)์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์œผ๋กœ ์š”์•ฝ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฐ๋น„์•ˆ 9์™€ 10 (Debian 8์—์„œ๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ) ํŽ˜๋„๋ผ, Ubuntu, OpenEmbedded, Tizen(glibc์—์„œ ์‚ฌ์šฉ). RHEL ะธ SUSE 32๋น„ํŠธ ARMv7 ์‹œ์Šคํ…œ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Android๋Š” ์ž์ฒด libc(Bionic) ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ด ์ทจ์•ฝ์ ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ˆ์— OpenWRT ๊ธฐ๋ณธ์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๋นŒ๋“œ๋Š” Musl์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ €์žฅ์†Œ์—์„œ๋Š” glibc๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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