eBPF ํ์ ์์คํ ์์ ์ทจ์ฝ์ (CVE-2021-4204)์ด ํ์ธ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด JIT๊ฐ ํฌํจ๋ ํน์ ๊ฐ์ ๋จธ์ ์ Linux ์ปค๋ ๋ด๋ถ์์ ํธ๋ค๋ฌ๋ฅผ ์คํํ ์ ์์ผ๋ฉฐ, ๊ถํ์ด ์๋ ๋ก์ปฌ ์ฌ์ฉ์๊ฐ ๊ถํ ์์น์ ๋ฌ์ฑํ๊ณ ํด๋น ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๋ฆฌ๋ ์ค ์ปค๋ ์์ค. ์ด ๋ฌธ์ ๋ Linux ์ปค๋ 5.8๋ถํฐ ๋ํ๋ฌ์ผ๋ฉฐ ์์ ๋์ง ์์ ์ํ๋ก ๋จ์ ์์ต๋๋ค(๋ฆด๋ฆฌ์ค 5.16 ํฌํจ). ๋ฐฐํฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ฑ๋๋ ์ ๋ฐ์ดํธ ์ํ๋ Debian, RHEL, SUSE, Fedora, Ubuntu, Arch ํ์ด์ง์์ ์ถ์ ํ ์ ์์ต๋๋ค. 18์ XNUMX์ผ์ ๊ฒ์๋ ์์ ์ธ ์๋ ๊ฐ๋ฅํ ์ต์คํ๋ก์์ด ์์ฑ๋์๋ค๊ณ ๋ฐํ๋์์ต๋๋ค(์ฌ์ฉ์์ ๊ฐ๋ฐ์์๊ฒ ์ทจ์ฝ์ ์ ์์ ํ๋ ๋ฐ ์ผ์ฃผ์ผ์ด ์ฃผ์ด์ก์ต๋๋ค).
์ด ์ทจ์ฝ์ ์ ์คํ์ ์ํด ์ ์ก๋ eBPF ํ๋ก๊ทธ๋จ์ ์๋ชป๋ ๊ฒ์ฆ์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. eBPF ํ์ ์์คํ ์ ๋ณด์กฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ด ๊ธฐ๋ฅ์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์ ํน์ ๊ฒ์ฆ ํ๋ก๊ทธ๋จ์ ํตํด ํ์ธ๋ฉ๋๋ค. ์ผ๋ถ ํจ์์์๋ PTR_TO_MEM ๊ฐ์ ์ธ์๋ก ์ ๋ฌํด์ผ ํ๋ฉฐ, ๊ฐ๋ฅํ ๋ฒํผ ์ค๋ฒํ๋ก๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ๊ฒ์ฆ์๋ ์ธ์์ ๊ด๋ จ๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์์์ผ ํฉ๋๋ค. bpf_ringbuf_submit ๋ฐ bpf_ringbuf_discard ํจ์์ ๊ฒฝ์ฐ ์ ์ก๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ์ ๋ํ ๋ฐ์ดํฐ๊ฐ ๊ฒ์ฆ์์๊ฒ ๋ณด๊ณ ๋์ง ์์์ผ๋ฉฐ, ์ด๋ ํน๋ณํ ์ค๊ณ๋ eBPF ์ฝ๋ ์คํ ์ ๋ฒํผ ๊ฒฝ๊ณ๋ฅผ ๋์ด์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฎ์ด์ฐ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๊ณต๊ฒฉ์ ์ํํ๋ ค๋ฉด ์ฌ์ฉ์๋ ์์ ์ BPF ํ๋ก๊ทธ๋จ์ ๋ก๋ํ ์ ์์ด์ผ ํ๋ฉฐ ์ต๊ทผ์ ๋ง์ Linux ๋ฐฐํฌํ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ์ฐจ๋จํฉ๋๋ค(๋ฆด๋ฆฌ์ค 5.16๋ถํฐ ์ปค๋ ์์ฒด์์ eBPF์ ๋ํ ๊ถํ ์๋ ์ก์ธ์ค๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธ์ง๋๋ ๊ฒ์ ํฌํจ). ์๋ฅผ ๋ค์ด, Ubuntu 20.04 LTS์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์์๋ ์ทจ์ฝ์ ์ด ์
์ฉ๋ ์ ์์ง๋ง Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 ๋ฐ Fedora 33 ํ๊ฒฝ์์๋ ๊ด๋ฆฌ์๊ฐ ์ค์ ํ ๊ฒฝ์ฐ์๋ง ๋ํ๋ฉ๋๋ค. kernel.unprivileged_bpf_disabled ๋งค๊ฐ๋ณ์๋ฅผ 0์ผ๋ก ์ค์ ํฉ๋๋ค. ์ทจ์ฝ์ ์ ์ฐจ๋จํ๊ธฐ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก "sysctl -w kernel.unprivileged_bpf_disabled=1" ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๊ถํ ์๋ ์ฌ์ฉ์๊ฐ BPF ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru