์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ. ์ฐ๋ฆฌ๋ ์ ๊ทน์ ์ผ๋ก ์์
์ ์ฐฉ์ํ๊ณ ์์ผ๋ฉฐ ์ด๋ฏธ XNUMX์์ ๋ง์ ๊ฐ๋ ฅํ ์ถ์๋ฅผ ์ค๋นํ๊ณ ์์ต๋๋ค. ๊ทธ ์ค์์๋ ๋ชจ๋๊ฐ ์ข์ํ๋ ์๋ก์ด ๊ณผ์ ์ ๋ฑ๋ก์ด ๋ฐํ๋์์ต๋๋ค.
ํ์ผ ๊ถํ์ SUID ์คํ ํ์ผ์ ๋ํ ์์ ํ ๋์์ ์ ๊ณตํ์ง๋ง ์ฒ์์๋ ์ฝ๊ฐ ํผ๋์ค๋ฌ์ ๋ณด์ผ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ ๋ชจ๋๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์๊ณ ์์ต๋๋ค.
์์ ๊ธฐ์ฌ๋ฅผ ์์ธํ ์ฝ์ง ์์ผ๋ ค๋ฉด ์๊ฐ์ ์ ์ฝํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ผ ๊ถํ์ ๋ฃจํธ๋ก ์คํ๋๋ ํ๋ก์ธ์ค๋ฅผ ํ์ฉํ๋ฏ๋ก ํน์ ๊ธฐ๋ฅ์ ์ ์งํ๊ธฐ ์ํด ์์
์ ์ํํ ์ ์์ต๋๋ค.
๊ถํ์ ์ผ๋ฐ์ ์ผ๋ก ํญ์ ๋ฃจํธ๋ก ์คํ๋๋ ์๋น์ค์ ์ ์ฉํ์ง๋ง ๋ช
๋ น์ค ์ ํธ๋ฆฌํฐ๋ ์ด๋ป์ต๋๊น? ๋คํํ๋ ์ฌ๋ฐ๋ฅธ ์ ํธ๋ฆฌํฐ๊ฐ ์ค์น๋์ด ์๋ ๊ฒฝ์ฐ์๋ ์ด ๊ธฐ๋ฅ์ด ์ง์๋ฉ๋๋ค. Ubuntu๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ฅผ ๋ค์ด ํจํค์ง๊ฐ ํ์ํฉ๋๋ค. libcap2-bin
. ๋ํ ๋น๊ตฌ์ ์ปค๋(๋ฒ์ ๋ถํฐ)์ ์คํํด์ผ ํฉ๋๋ค. 2.6.24).
์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด SUID ๋นํธ ์ค์ ๊ณผ ์ ์ฌํ๊ฒ ๊ถํ์ ์คํ ํ์ผ๊ณผ ์ฐ๊ฒฐํ ์ ์์ง๋ง ํน์ ๊ถํ ์งํฉ์ ๋ํด์๋ง ๊ฐ๋ฅํฉ๋๋ค. ๊ณต์ต์ฌ์
setcap
ํ์ผ์์ ๊ถํ์ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ํ์ํ ๊ถํ์ ์ ํํ๋ ๊ฒ์
๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋คํธ์ํฌ ์ง๋จ ๋๊ตฌ๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. tracewalk
, ์ด๋ ๋ค์์ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. CAP_NET_RAW
.
๋ฐ์ด๋๋ฆฌ๊ฐ ์๋ ๋๋ ํ ๋ฆฌ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. tracewalk
, ๋ค์๊ณผ ๊ฐ์ด ์ด ๊ถํ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
sudo setcap cap_net_raw=eip tracewalk
์ง๊ธ์ ์ ๋ฏธ์ฌ๋ฅผ ๋ฌด์ํ์ธ์. =eip
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํด์๋ ๋ช ์ด ํ์ ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. ๊ถํ ์ด๋ฆ์ ์๋ฌธ์์
๋๋ค. ์ด์ ๋ค์์ ์ฌ์ฉํ์ฌ ๊ถํ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
setcap -v cap_new_raw=eip tracewalk
๋๋ ํน์ ์คํ ํ์ผ์ ๋ํด ์ค์ ๋ ๋ชจ๋ ๊ถํ์ ๋์ดํ ์ ์์ต๋๋ค.
getcap tracewalk
์ฐธ๊ณ ๋ก ๋ค์์ ์ฌ์ฉํ์ฌ ์คํ ํ์ผ์์ ๋ชจ๋ ๊ถํ์ ์ ๊ฑฐํ ์๋ ์์ต๋๋ค.
setcap -r tracewalk
์ด ์์ ์์ ๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ์คํ ํ์ผ์ ์คํํ ์ ์์ด์ผ ํ๋ฉฐ ์์ ์์ผ์ผ๋ก ์์ ํ ์ ์์ด์ผ ํ์ง๋ง ๋ฃจํธ ์ฌ์ฉ์๊ฐ ๊ฐ๋ ๋ค๋ฅธ ๊ถํ์ ์์ด์ผ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ์ด์ํ ์ ๋ฏธ์ฌ๋ ๋ฌด์์ ์๋ฏธํ๋ ๊ฑธ๊น์? =eip
? ์ด๋ฅผ ์ํด์๋ ๊ถํ์ ์ฑ๊ฒฉ์ ์ด๋ ์ ๋ ์ดํดํด์ผ ํฉ๋๋ค. ๊ฐ ํ๋ก์ธ์ค์๋ ์ธ ๊ฐ์ง ๊ถํ ์ธํธ๊ฐ ์์ต๋๋ค. ํจ๊ณผ์ ์ด๊ณ ์์ ๊ฐ๋ฅํ๋ฉฐ ํ์ฉ๋จ:
- ํจ๊ณผ์ ์ธ ๊ถํ์ ํ๋ก์ธ์ค๊ฐ ์ค์ ๋ก ์ํํ ์ ์๋ ์์
์ ์ ์ํ๋ ๊ถํ์
๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์์ ์์ผ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
CAP_NET_RAW
์ ํจ ์ธํธ์ ์์ต๋๋ค. - ์ฌ์ฉ ๊ฐ๋ฅ ๊ถํ์ ์ ์ ํ ํธ์ถ์ ์ฌ์ฉํ์ฌ ์์ฒญํ๋ ๊ฒฝ์ฐ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง ์ ์๋ ๊ถํ์ ๋๋ค. ํด๋น ๊ถํ์ ์์ฒญํ๊ธฐ ์ํด ํน๋ณํ ์์ฑ๋์ง ์์ ํ ํ๋ก์ธ์ค๊ฐ ์ค์ ๋ก ์ด๋ค ์์ ๋ ์ํํ์ง ๋ชปํ๋๋ก ๋ฐฉ์งํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ค์ ๋ก ํ์ํ ๊ธฐ๊ฐ ๋์์๋ง ์ ํจ ์งํฉ์ ์ค์ํ ๊ถํ์ ์ถ๊ฐํ๋ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ์์ ๊ฐ๋ฅ ๊ถํ์ ์์ฑ๋ ์์ ํ๋ก์ธ์ค์ ์ก์ธ์ค ๊ฐ๋ฅํ ์งํฉ์์ ์์๋ ์ ์๋ ๊ถํ์
๋๋ค. ์์ ์ค
fork()
๋๋clone()
ํ์ ํ๋ก์ธ์ค์๋ ํด๋น ์์ ์ ์ฌ์ ํ ๋์ผํ ์คํ ํ์ผ์ด ์คํ ์ค์ด๋ฏ๋ก ํญ์ ์์ ํ๋ก์ธ์ค์ ๊ถํ ์ฌ๋ณธ์ด ์ ๊ณต๋ฉ๋๋ค. ์์ ๊ฐ๋ฅํ ์ธํธ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.exec()
(๋๋ ์ด์ ์์ํ๋)์ด ํธ์ถ๋์ด ์คํ ํ์ผ์ ๋ค๋ฅธ ํ์ผ๋ก ๋์ฒดํฉ๋๋ค. ์ด ์์ ์์ ํ๋ก์ธ์ค์ ์ฌ์ฉ ๊ฐ๋ฅํ ์งํฉ์ ์ ํ๋ก์ธ์ค์ ์ฌ์ฉ๋ ์ก์ธ์ค ๊ฐ๋ฅํ ์งํฉ์ ์ป๊ธฐ ์ํด ์์ ๊ฐ๋ฅํ ์งํฉ์ผ๋ก ๋ง์คํฌ๋ฉ๋๋ค.
๊ทธ๋์ ์ ํธ๋ฆฌํฐ setcap
์ด๋ฅผ ํตํด ํน์ ์คํ ํ์ผ์ ๋ํด ์ด ์ธ ๊ฐ์ง ์ธํธ์ ๊ถํ์ ๋
๋ฆฝ์ ์ผ๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฃน์ ์๋ฏธ๋ ํ์ผ ๊ถํ์ ๋ฐ๋ผ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ํด์๋ฉ๋๋ค.
- ์ฌ์ฉ ๊ฐ๋ฅ ํ์ผ ๊ถํ์ ์คํ ํ์ผ์ ํธ์ถํ ์์ ํ๋ก์ธ์ค์ ๊ถํ์ด ์๋๋ผ๋ ์คํ ํ์ผ์ ํญ์ ์ฌ์ฉํ ์ ์๋ ๊ถํ์ ๋๋ค. ์์ ์๋ '๊ฐ์ ' ํ๊ฐ๋ผ๊ณ ๋ถ๋ ์ต๋๋ค.
- ์์๋จ ํ์ผ ๊ถํ์ ํธ์ถ ํ๋ก์ธ์ค ์ธํธ์์ ๊ถํ์ ์ ๊ฑฐํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์๋ ์ถ๊ฐ ๋ง์คํฌ๋ฅผ ์ ์ํฉ๋๋ค. ํธ์ถ ํ๋ก์ธ์ค์ ์์๋ ์งํฉ์ ์ถ๊ฐ๋ก ์ ์ฉ๋๋ฏ๋ก ๋ ์งํฉ์ ๋ชจ๋ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ง ๊ถํ์ด ์์๋ฉ๋๋ค.
- ์ ํจํ ํ์ผ ๊ถํ์ ์ค์ ๋ก ์ธํธ๊ฐ ์๋ ๋จ์ผ ๋นํธ์ ๋ถ๊ณผํ๋ฉฐ, ์ค์ ๋๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ฒด ์ธํธ๊ฐ ์ ํ๋ก์ธ์ค์ ์ ํจ ์ธํธ์๋ ๋ณต์ฌ๋๋ค๋ ์๋ฏธ์ ๋๋ค. ์ด๋ ๊ถํ์ ์์ฒญํ๋๋ก ํน๋ณํ ์์ฑ๋์ง ์์ ํ๋ก์ธ์ค์ ๊ถํ์ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. XNUMX๋นํธ์ด๋ฏ๋ก ์ด๋ค ๊ถํ์ ๋ํด ์ค์ ํ๋ค๋ฉด ๋ชจ๋ ๊ถํ์ ๋ํด ์ค์ ํด์ผ ํฉ๋๋ค. ๊ถํ์ ์ง์ํ์ง ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๊ถํ์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ฏ๋ก ๋ ๊ฑฐ์ ๋นํธ๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
๋ค์์ ํตํด ๊ถํ์ ์ง์ ํ ๋ setcap
์ธ ๊ธ์ e
, i
ะธ p
๊ด๋ จํ๋ค ํจ๊ณผ์ ์ด๊ณ ์์ ๊ฐ๋ฅํ๋ฉฐ ์ ๊ทผ ๊ฐ๋ฅ ๊ฐ๊ฐ ์ค์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ฌ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
sudo setcap cap_net_raw=eip tracewalk
...ํด์๋๋ฅผ ๋ํ๋
๋๋ค. CAP_NET_RAW
์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์์ ๊ฐ๋ฅํ ์ธํธ์ ์ถ๊ฐ๋์ด์ผ ํ๋ฉฐ ์ ํจ ๋นํธ๋ ์ค์ ๋์ด์ผ ํฉ๋๋ค. ์ด๋ ํ์ผ์ ๋ํด ์ด์ ์ ์ค์ ๋ ๊ถํ์ ์ฌ์ ์ํฉ๋๋ค. ํ ๋ฒ์ ์ฌ๋ฌ ๊ถํ์ ์ค์ ํ๋ ค๋ฉด ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก์ ์ฌ์ฉํ์ธ์.
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
์ฒซ์งธ, ํ์ผ ๊ธฐ๋ฅ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ ํจ๊ป ์๋ํ์ง ์์ต๋๋ค. ์ด๋ฅผ ๋ฐ์ด๋๋ฆฌ ํ์ผ ์์ฒด(์ฆ, ์ฌ๋ณผ๋ฆญ ๋งํฌ์ ๋์)์ ์ ์ฉํด์ผ ํฉ๋๋ค.
๋์งธ, ํด์๋ ์คํฌ๋ฆฝํธ์์๋ ์๋ํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ถํ์ ํ ๋นํ๋ ค๋ Python ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ Python ์ธํฐํ๋ฆฌํฐ ์์ฒด์ ํ ๋นํด์ผ ํฉ๋๋ค. ๋ถ๋ช
ํ ์ด๊ฒ์ ์ ์ฌ์ ์ธ ๋ณด์ ๋ฌธ์ ์
๋๋ค. ์๋ํ๋ฉด ํด๋น ์ธํฐํ๋ฆฌํฐ๋ก ์คํ๋ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ ์ง์ ๋ ๊ถํ์ ๊ฐ๊ฒ ๋์ง๋ง SUID๋ก ๋ง๋๋ ๊ฒ๋ณด๋ค ์ฌ์ ํ ํจ์ฌ ๋ซ์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํ์ํ ์์
์ ์ํํ๊ณ ์คํฌ๋ฆฝํธ์์ ํธ์ถํ ์ ์๋ ๋ณ๋์ ์คํ ํ์ผ์ C ๋๋ ์ด์ ์์ํ๋ ์ธ์ด๋ก ์์ฑํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ Wireshark์์ ์ฌ์ฉํ๋ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ ์ฌํฉ๋๋ค. /usr/bin/dumpcap
๊ถํ ์๋ ์์
์ ์ํํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
์
์งธ, ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ผ ๊ถํ์ด ๋นํ์ฑํ๋ฉ๋๋ค. LD_LIBRARY_PATH
๋ช
๋ฐฑํ ๋ณด์์์ ์ด์ ๋ก(1). ์๋ ๋์ผํ๊ฒ ์ ์ฉ LD_PRELOAD
, ๋ด๊ฐ ์๋ ํ.
1. ๊ณต๊ฒฉ์๋ ๋ถ๋ช
ํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ฅผ ๊ต์ฒดํ๊ณ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก LD_LIBRARY_PATH
ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์คํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ์ฐ์ ์ ์ผ๋ก ํธ์ถ๋๋๋ก ํ์ฌ ํธ์ถ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋์ผํ ๊ถํ์ผ๋ก ์์ฒด ์์ ์ฝ๋๊ฐ ์คํ๋๋๋ก ํฉ๋๋ค.
๊ทธ๊ฒ ๋ค์ผ. ๊ฐ์ข ํ๋ก๊ทธ๋จ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์์์ ํ์ธํ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com