nf_tables, watch_queue ๋ฐ IPsec์˜ ์•…์šฉ ๊ฐ€๋Šฅํ•œ ์ทจ์•ฝ์ ์ด Linux ์ปค๋„์—์„œ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋กœ์ปฌ ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์—์„œ ์ž์‹ ์˜ ๊ถŒํ•œ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์œ„ํ—˜ํ•œ ์ทจ์•ฝ์ ์ด Linux ์ปค๋„์—์„œ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๋ ค ์ค‘์ธ ๋ชจ๋“  ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž‘๋™ ์ค‘์ธ ๊ณต๊ฒฉ ํ”„๋กœํ† ํƒ€์ž…์ด ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • watch_queue ์ด๋ฒคํŠธ ์ถ”์  ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ์ทจ์•ฝ์ (CVE-2022-0995)์œผ๋กœ ์ธํ•ด ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์€ ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์ฝ”๋“œ๊ฐ€ ์ปค๋„ ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ทจ์•ฝ์ ์€ watch_queue_set_size() ํ•จ์ˆ˜์— ์กด์žฌํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ๋ชฉ๋ก์˜ ๋ชจ๋“  ํฌ์ธํ„ฐ๋ฅผ ์ง€์šฐ๋ ค๋Š” ์‹œ๋„์™€ ๊ด€๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ Linux ๋ฐฐํฌํŒ์—์„œ ์‚ฌ์šฉ๋˜๋Š” "CONFIG_WATCH_QUEUE=y" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋„์„ ๋นŒ๋“œํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    ์ด ์ทจ์•ฝ์ ์€ 11์›” 21.10์ผ์— ์ถ”๊ฐ€๋œ ์ปค๋„ ๋ณ€๊ฒฝ์—์„œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux ํŽ˜์ด์ง€์—์„œ ๋ฐฐํฌํŒ์˜ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ๊ฒŒ์‹œ๋ฅผ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ต์Šคํ”Œ๋กœ์ž‡ ํ”„๋กœํ† ํƒ€์ž…์€ ์ด๋ฏธ ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ปค๋„ 5.13.0-37์ด ํฌํ•จ๋œ Ubuntu XNUMX์—์„œ ์‹คํ–‰ํ•  ๋•Œ ๋ฃจํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    nf_tables, watch_queue ๋ฐ IPsec์˜ ์•…์šฉ ๊ฐ€๋Šฅํ•œ ์ทจ์•ฝ์ ์ด Linux ์ปค๋„์—์„œ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • IPv2022 ๋ฐ IPv27666๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” IPsec์— ๋Œ€ํ•œ ESP ๋ณ€ํ™˜(๋ณด์•ˆ ํŽ˜์ด๋กœ๋“œ ์บก์Šํ™”) ๊ตฌํ˜„๊ณผ ๊ด€๋ จ๋œ esp4 ๋ฐ esp6 ์ปค๋„ ๋ชจ๋“ˆ์˜ ์ทจ์•ฝ์ (CVE-4-6)์ž…๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์œผ๋กœ ์ธํ•ด ์ผ๋ฐ˜ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ๋กœ์ปฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐœ์ฒด๋ฅผ ๋ฎ์–ด์“ฐ๊ณ  ์‹œ์Šคํ…œ์—์„œ ํ•ด๋‹น ๊ถŒํ•œ์„ ์ƒ์Šน์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ตœ๋Œ€ ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ๊ฐ€ skb_page_frag_refill ๊ตฌ์กฐ์— ํ• ๋‹น๋œ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜์—ฌ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ์™€ ์ˆ˜์‹ ๋œ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์กฐ์ • ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    ํ•ด๋‹น ์ทจ์•ฝ์ ์€ 7์›” 5.17์ผ ์ปค๋„์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค(5.16.15, 21.10 ๋“ฑ์—์„œ ์ˆ˜์ •๋จ). Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux ํŽ˜์ด์ง€์—์„œ ๋ฐฐํฌํŒ์˜ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ๊ฒŒ์‹œ๋ฅผ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์—์„œ Ubuntu Desktop 2์— ๋Œ€ํ•œ ๋ฃจํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ต์Šคํ”Œ๋กœ์ž‡์˜ ์ž‘์—… ํ”„๋กœํ† ํƒ€์ž…์ด ์ด๋ฏธ GitHub์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ์ด ์ต์Šคํ”Œ๋กœ์ž‡์€ Fedora ๋ฐ Debian์—์„œ๋„ ์ž‘๋™ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ฃผ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋ชฉํ•  ์ ์€ ์ด ์ต์Šคํ”Œ๋กœ์ž‡์€ ์›๋ž˜ pwn2022own XNUMX ๋Œ€ํšŒ๋ฅผ ์œ„ํ•ด ์ค€๋น„๋์œผ๋‚˜, ์ปค๋„ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด์™€ ๊ด€๋ จ๋œ ๋ฒ„๊ทธ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์ˆ˜์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ทจ์•ฝ์ ์˜ ์„ธ๋ถ€ ๋‚ด์šฉ์„ ๊ณต๊ฐœํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค.

  • nftables ํŒจํ‚ท ํ•„ํ„ฐ์˜ ์ž‘๋™์„ ๋ณด์žฅํ•˜๋Š” nf_tables ๋ชจ๋“ˆ์˜ netfilter ํ•˜์œ„ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ์ทจ์•ฝ์ (CVE-2022-1015, CVE-2022-1016). ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ๊ถŒํ•œ์ด ์—†๋Š” ๋กœ์ปฌ ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํƒ์˜ ํ• ๋‹น๋œ ๋ฒ„ํผ์— ๋Œ€ํ•ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์“ฐ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ํ˜•์‹์ด ์ง€์ •๋˜๊ณ  nftables ๊ทœ์น™์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ์ธ๋ฑ์Šค์˜ ๊ฒ€์‚ฌ ๋‹จ๊ณ„ ์ค‘์— ์ฒ˜๋ฆฌ๋˜๋Š” nftables ํ‘œํ˜„์‹์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์˜ค๋ฒ„ํ”Œ๋กœ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    ์ทจ์•ฝ์ ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ "enum nft_registers reg"์˜ ๊ฐ’์ด ๋‹จ์ผ ๋ฐ”์ดํŠธ์ž„์„ ์•”์‹œํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ตœ์ ํ™”๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” C89 ์‚ฌ์–‘์— ๋”ฐ๋ผ 32๋น„ํŠธ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ์ด ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๊ณ  ํ• ๋‹นํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํฌ๊ธฐ๋Š” ๊ตฌ์กฐ์ฒด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์‹ค์ œ ํฌ๊ธฐ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ตฌ์กฐ์ฒด์˜ ๊ผฌ๋ฆฌ๊ฐ€ ์Šคํƒ์˜ ํฌ์ธํ„ฐ์™€ ๊ฒน์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    ๋ฌธ์ œ๋Š” ์ปค๋„ ์ˆ˜์ค€์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์•…์šฉ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ณต๊ฒฉ์ด ์„ฑ๊ณตํ•˜๋ ค๋ฉด CLONE_NEWUSER ๋˜๋Š” CLONE_NEWNET ๊ถŒํ•œ์ด ์žˆ๋Š” ๋ณ„๋„์˜ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” nftables์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ๊ฒฉ๋ฆฌ๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ). ์ด ์ทจ์•ฝ์ ์€ ์˜ˆ๋ฅผ ๋“ค์–ด "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" ๋ชจ๋“œ์—์„œ ๋นŒ๋“œํ•  ๋•Œ ํ™œ์„ฑํ™”๋˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์ ํ™”์™€๋„ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Linux ์ปค๋„ 5.12๋ถ€ํ„ฐ ์ทจ์•ฝ์  ์•…์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    netfilter์˜ ๋‘ ๋ฒˆ์งธ ์ทจ์•ฝ์ ์€ nft_do_chain ํ•ธ๋“ค๋Ÿฌ์—์„œ ์ด๋ฏธ ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(use-after-free)์— ์•ก์„ธ์Šคํ•จ์œผ๋กœ์จ ๋ฐœ์ƒํ•˜๋ฉฐ nftables ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•œ ์กฐ์ž‘์„ ํ†ตํ•ด ์ฝ๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์˜์—ญ ๋ˆ„์ถœ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ ํฌ์ธํ„ฐ ์ฃผ์†Œ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. Linux ์ปค๋„ 5.13๋ถ€ํ„ฐ ์ทจ์•ฝ์  ์•…์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    ์ทจ์•ฝ์ ์€ ์ตœ์‹  ์ปค๋„ ํŒจ์น˜ 5.17.1, 5.16.18, 5.15.32, 5.10.109, 5.4.188, 4.19.237, 4.14.274 ๋ฐ 4.9.309์—์„œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux ํŽ˜์ด์ง€์—์„œ ๋ฐฐํฌํŒ์˜ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ๊ฒŒ์‹œ๋ฅผ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•œ ์—ฐ๊ตฌ์›์€ ๋ฐฐํฌํŒ์ด ์ปค๋„ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ถœ์‹œํ•œ ํ›„ ๋ฉฐ์น  ๋‚ด์— ๊ฒŒ์‹œ๋  ์˜ˆ์ •์ธ ๋‘ ๊ฐ€์ง€ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ์ž‘๋™ ๊ฐ€๋Šฅํ•œ ์ต์Šคํ”Œ๋กœ์ž‡ ์ค€๋น„๋ฅผ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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