Microsoft์ ๋ณด์ ์ฐ๊ตฌ์๋ค์ ๋คํธ์ํฌ ๋์คํจ์ฒ ์๋น์ค(์ฝ๋๋ช Nimbuspwn)์์ ๊ถํ ์๋ ์ฌ์ฉ์๊ฐ ๋ฃจํธ ๊ถํ์ผ๋ก ์์ ๋ช ๋ น์ ์คํํ ์ ์๋๋ก ํ์ฉํ๋ ๋ ๊ฐ์ง ์ทจ์ฝ์ (CVE-2022-29799, CVE-2022-29800)์ ํ์ธํ์ต๋๋ค. ์ด ๋ฌธ์ ๋ networkd-dispatcher 2.2 ๋ฆด๋ฆฌ์ค์์ ์์ ๋์์ต๋๋ค. ๋ฐฐํฌํ(Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux)๋ณ ์ ๋ฐ์ดํธ ๊ฒ์์ ๋ํ ์ ๋ณด๋ ์์ง ์์ต๋๋ค.
Networkd-dispatcher๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค systemd-networkd๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํ๊ณ NetworkManager-dispatcher์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ํํ๋ Ubuntu๋ฅผ ํฌํจํ ๋ง์ Linux ๋ฐฐํฌํ์์ ์ฌ์ฉ๋ฉ๋๋ค. ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์คํฌ๋ฆฝํธ ์์์ ์ฒ๋ฆฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ๋ณธ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ค์ ํ ํ VPN์ ์์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
networkd-dispatcher์ ๊ด๋ จ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ ๋ฃจํธ๋ก ์คํ๋๋ฉฐ D-Bus๋ฅผ ํตํด ์ด๋ฒคํธ ์ ํธ๋ฅผ ์์ ํฉ๋๋ค. ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ๋ ์ด๋ฒคํธ์ ๋ํ ์ ๋ณด๋ systemd-networkd ์๋น์ค์์ ์ ์ก๋ฉ๋๋ค. ๋ฌธ์ ๋ ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์กด์ฌํ์ง ์๋ ์ํ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๊ณ ์คํฌ๋ฆฝํธ๊ฐ ๋ฃจํธ๋ก ์คํ๋๋๋ก ํธ๋ฆฌ๊ฑฐํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
Systemd-networkd๋ /etc/networkd-dispatcher ๋๋ ํฐ๋ฆฌ์ ์๋ ์์คํ ํธ๋ค๋ฌ ์คํฌ๋ฆฝํธ๋ง ์คํํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ ์ฌ์ฉ์ ๊ต์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ์ง๋ง ํ์ผ ๊ฒฝ๋ก ์ฒ๋ฆฌ ์ฝ๋์ ์ทจ์ฝ์ (CVE-2022-29799)์ผ๋ก ์ธํด ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ ๋ฐ ์์ ์คํฌ๋ฆฝํธ ์คํ ๊ฐ๋ฅ์ฑ. ํนํ, ์คํฌ๋ฆฝํธ์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ฑํ ๋ D-Bus๋ฅผ ํตํด ์ ๋ฌ๋๋ OperationalState, AdministrativeState ๊ฐ์ ์ฌ์ฉํ๋๋ฐ, ์ด๋ ํน์๋ฌธ์๊ฐ ์ง์์ง์ง ์์๋ค. ๊ณต๊ฒฉ์๋ ์ด๋ฆ์ "../" ๋ฌธ์๊ฐ ํฌํจ๋ ์์ ์ ์ํ๋ฅผ ์์ฑํ๊ณ ๋คํธ์ํฌ ๋์คํจ์ฒ ํธ์ถ์ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ก ๋ฆฌ๋๋ ์ ํ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ ์ทจ์ฝ์ (CVE-2022-29800)์ ๊ฒฝ์ ์กฐ๊ฑด๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์คํฌ๋ฆฝํธ ๋งค๊ฐ ๋ณ์(๋ฃจํธ์ ์ํจ)๋ฅผ ํ์ธํ๊ณ ์คํํ๋ ์ฌ์ด์ ํ์ผ์ ๊ต์ฒดํ๊ณ ํด๋น ํ์ผ์ด ์๋์ง ์ฌ๋ถ ํ์ธ์ ์ฐํํ๊ธฐ์ ์ถฉ๋ถํ ์งง์ ์๊ฐ์ด ์์์ต๋๋ค. ์คํฌ๋ฆฝํธ๋ ๋ฃจํธ ์ฌ์ฉ์์ ์ํฉ๋๋ค. ๋ํ networkd-dispatcher๋ subprocess.Popen ํธ์ถ์ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ๋๋ฅผ ํฌํจํ์ฌ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํ์ธํ์ง ์์์ผ๋ฏ๋ก ๊ณต๊ฒฉ ๊ตฌ์ฑ์ด ํฌ๊ฒ ๋จ์ํ๋์์ต๋๋ค.
์ด์ ๊ธฐ์ :
- ๋ฃจํธ๊ฐ ์์ ํ ์คํ ํ์ผ์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ "/sbin" ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ "/tmp/nimbuspwn" ๋๋ ํฐ๋ฆฌ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ "/tmp/nimbuspwn/poc.d"๊ฐ ์์ฑ๋ฉ๋๋ค.
- "/sbin"์ ์คํ ํ์ผ์ ๊ฒฝ์ฐ ๋์ผํ ์ด๋ฆ์ ํ์ผ์ด "/tmp/nimbuspwn" ๋๋ ํฐ๋ฆฌ์ ์์ฑ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด "/sbin/vgs" ํ์ผ์ ๊ฒฝ์ฐ ์คํ ํ์ผ "/tmp/nimbuspwn/vgs"๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ณต๊ฒฉ์๊ฐ ์คํํ๋ ค๋ ์ฝ๋๊ฐ ๋ฐฐ์น๋๋ ๊ถํ ์๋ ์ฌ์ฉ์๊ฐ ์์ ํ ์์ฑ๋ ์ฝ๋์ ๋๋ค.
- OperationalState์ "../../../tmp/nimbuspwn/poc" ๊ฐ์ ๋ํ๋ด๋ ์ ํธ๊ฐ D-Bus๋ฅผ ํตํด networkd-dispatcher ํ๋ก์ธ์ค๋ก ์ ์ก๋ฉ๋๋ค. "org.freedesktop.network1" ๋ค์์คํ์ด์ค์์ ์ ํธ๋ฅผ ๋ณด๋ด๊ธฐ ์ํด ํธ๋ค๋ฌ๋ฅผ systemd-networkd์ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฅ์ด ์ฌ์ฉ๋์์ต๋๋ค(์: gpgv ๋๋ epmd ์กฐ์์ ํตํด). ๋๋ systemd-networkd๋ผ๋ ์ฌ์ค์ ํ์ฉํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ๋์ง ์์ต๋๋ค(์: Linux Mint).
- ์ ํธ๋ฅผ ๋ฐ์ ํ Networkd-dispatcher๋ ๋ฃจํธ ์ฌ์ฉ์๊ฐ ์์ ํ๊ณ "/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d" ๋๋ ํฐ๋ฆฌ์์ ์ฌ์ฉํ ์ ์๋ ์คํ ํ์ผ ๋ชฉ๋ก์ ์์ฑํฉ๋๋ค. ์ค์ ๋ก๋ "/sbin"์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
- ํ์ผ ๋ชฉ๋ก์ด ์์ ๋์์ง๋ง ์คํฌ๋ฆฝํธ๊ฐ ์์ง ์์๋์ง ์์ ์๊ฐ, ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ "/tmp/nimbuspwn/poc.d"์์ "/tmp/nimbuspwn"์ผ๋ก ๋ฆฌ๋๋ ์ ๋๊ณ networkd-dispatcher๋ ๋ฃจํธ ๊ถํ์ ๊ฐ์ง ๊ณต๊ฒฉ์๊ฐ ํธ์คํ ํ๋ ์คํฌ๋ฆฝํธ์ ๋๋ค.
์ถ์ฒ : opennet.ru