libuser๊ฐ /etc/passwd๋ฅผ ๋ค์ ์ฐ๋ ๊ทธ 0.1์ด (CVE-2015-3246)
2015๋ ์ฌ๋ฆ์ ๊ณต๊ฐ๋ ๋ฆฌ๋ ์ค ๋ก์ปฌ ๊ถํ ์์น ์ด์ ์ค ํ๋๋ ํ๋ คํ ๋ฉ๋ชจ๋ฆฌ ์์์ด ์๋๋ผ "ํ์ผ์ ์ด๋ป๊ฒ ์ ์ฅํ๋๋"์ ๊ดํ ๊ฒ์ด์์. ์ ธ์ฝ๋๋, ROP ์ฒด์ธ๋ ์์ด ๊ทธ๋ฅ ์ฌ์ฉ์ ๊ณ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์คํธ ํ์ผ ํ๋๊ฐ ์ฐ๋ค ๋ง ์ํ๋ก ๋จ๋ ๊ฒ, ๊ทธ๊ฒ ์ ๋ถ์์. ๊ทธ๋ฐ๋ฐ ๊ทธ ํ์ผ์ด ํํ /etc/passwd์๋ค๋ ๊ฒ ๋ฌธ์ ์์.
- libuser๋ /etc/passwd๋ฅผ ์์ ํ ๋ ํ์ผ์ ํต์งธ๋ก ์๋ผ๋ด๊ณ ๋ค์ ์ฐ๋ ๋ฐฉ์์ ์ผ๊ณ , ๊ทธ ์ค๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์ฃฝ์ผ๋ฉด ํ์ผ์ด ๋ฐ ํ ๋ง ๋ ์ฑ๋ก ๋จ์์
- ์๋ ค๋๊ฐ ์ง์ ์ด ์ด ๋์๊ฒ(๊ณต๊ฒฉ์ ์ ์ฅ์์ ์ด ์ข๊ฒ) ์กํ๋ฉด ๋ฃจํธ ๊ณ์ ์ ์ํธ ํ๋๊ฐ ๋น์ด๋ฒ๋ฆด ์ ์์ด ๋ก์ปฌ ๊ถํ ์์น์ผ๋ก ์ด์ด์ง
- ๋ฐฉ์ด๋ ํจ์น๊ฐ 1์์, ๊ทธ ๋ค์์ด userhelper ๊ฐ์ setuid ์ง์ ์ ์ถ์์ /etc/passwd ๋ฌด๊ฒฐ์ฑ ๊ฐ์์
1. libuser๋ ๋ฌด์จ ๋ฌผ๊ฑด์ธ๊ฐ
libuser๋ ๋ ๋ํ ๊ณ์ด์์ ์ฌ์ฉ์·๊ทธ๋ฃน ๊ณ์ ์ ๋ค๋ฃจ๋ ๊ณต์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์. ์ฐ๋ฆฌ๊ฐ ์ง์ ๋ถ๋ฅผ ์ผ์ ๊ฑฐ์ ์์ง๋ง, userhelper(consolehelper๋ฅผ ํตํด ์ผ๋ฐ ์ฌ์ฉ์๊ฐ chfn/chsh ๊ฐ์ ์์ ์ ํ๋๋ก ์ค๊ฐํด ์ฃผ๋ setuid ํ๋ก๊ทธ๋จ)๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์. ์ฆ ์ผ๋ฐ ๊ณ์ ์ด "๋ด ์ค๋ช ์ ๋ณด ์ข ๋ฐ๊ฟ๊ฒ์" ํ๊ณ ์์ฒญํ๋ฉด, ์ค์ ๋ก /etc/passwd๋ฅผ ์๋๋ ์ฃผ์ฒด๋ ๋ฃจํธ ๊ถํ์ผ๋ก ๋์๊ฐ๋ libuser์.
์ฌ๊ธฐ์ ์ ๋ขฐ ๊ฒฝ๊ณ๊ฐ ํ๋ ์๊น. ์ ๋ ฅ์ ์ผ๋ฐ ์ฌ์ฉ์, ์ฐ๊ธฐ ๊ถํ์ ๋ฃจํธ. ์ด๋ฐ ๊ตฌ์กฐ๋ ์ธ์ ๋ ์กฐ์ฌ์ค๋ฝ๊ฒ ๋ค๋ค์ผ ํ๋ ์๋ฆฌ์.
2. ๋ฌธ์ ์ ๋ณธ์ง — ๋น์์์ ์ฐ๊ธฐ
๊ณ์ ํ์ผ์ ์์ ํ๊ฒ ๊ณ ์น๋ ์ ์์ ์ด๋ฐ ํ๋ฆ์.
- ์์ ํ์ผ์ ์๋ก ๋ง๋ค๊ณ ๊ฑฐ๊ธฐ์ ์ ์ฒด ๋ด์ฉ์ ์
- ์ ๋๋ก ๋ค ์จ์ก๋์ง ํ์ธํ๊ณ ๋์คํฌ์ ๋ฐ์ํจ
- ๋ง์ง๋ง์ rename()์ผ๋ก ์๋ณธ ์๋ฆฌ์ ๊ฐ์๋ผ์
rename์ ์์์ ์ด๋ผ, ์ค๊ฐ์ ๋ญ๊ฐ ํฐ์ ธ๋ ํ์ผ์ "์์ ๊ฒ" ์๋๋ฉด "์ ๊ฒ" ๋ ์ค ํ๋๋ก๋ง ์กด์ฌํจ. ๋ฐ์ฏค ์ฐ์ธ ์ํ๊ฐ ๋์ฌ ์ ์์.
๊ทธ๋ฐ๋ฐ libuser๋ ์๋ณธ ํ์ผ์ ์ด์ด์ truncate ํ ์ฒ์๋ถํฐ ๋ค์ ์ฐ๋ ๋ฐฉ์์ ํํ์. ์ด๋ฌ๋ฉด ์ฐ๊ธฐ๊ฐ ์งํ๋๋ ์งง์ ์๊ฐ ๋์ /etc/passwd๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ถ์์ ํ ์ํ๋ก ์กด์ฌํจ. ํ์์ ๋ ๊น์งํ ์ฌ์ด๋ผ ์๋ฌด๋ ์ ๊ฒฝ ์ ์ฐ์ง๋ง, ๊ณต๊ฒฉ์ ์ ์ฅ์์ ๊ทธ ์ฐฐ๋๋ ๋ ธ๋ ค๋ณผ ๋งํ ์ฐฝ์ด ๋จ.
3. ์ฐฝ์ ์ต์ง๋ก ๋ฒ๋ฆฌ๋ ๋ฐฉ๋ฒ (๊ฐ๋ ์์ค)
์ฌ๊ธฐ์ ์ฌ๋ฐ๋ ๊ฑด, ๊ณต๊ฒฉ์๊ฐ ๊ตณ์ด ์ ๊ตํ ํ์ด๋ฐ ์ธ์์ ํ ํ์๊ฐ ์์๋ค๋ ์ ์. ๋ฆฌ์์ค ์ ํ์ด๋ผ๋ ํจ์ฌ ์์ ํ ์๋จ์ด ์์์.
- ์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ์ RLIMIT_FSIZE(ํ์ผ ํฌ๊ธฐ ์ํ)๋ฅผ ๋ฌผ๋ ค๋ฐ์
- ์ด ์ํ์ ์์ฃผ ์๊ฒ ๊ฑธ์ด๋๊ณ userhelper๋ฅผ ์คํํ๋ฉด, ๋ฃจํธ ๊ถํ์ผ๋ก /etc/passwd๋ฅผ ๋ค์ ์ฐ๋ ๋์ค ์ํ์ ๊ฑธ๋ ค ํ๋ก์ธ์ค๊ฐ ๊ทธ๋๋ก ์ข ๋ฃ๋จ
- ๊ฒฐ๊ณผ์ ์ผ๋ก /etc/passwd๋ ์ง์ ํ ํฌ๊ธฐ์์ ์ ํํ ์๋ฆฐ ์ํ๋ก ๋จ์
์ฆ "์ธ์ ์ฃฝ์ผ๊น"๊ฐ ์๋๋ผ "๋ช ๋ฐ์ดํธ์์ ์๋ฅผ๊น"์ ๋ฌธ์ ๋ก ๋ฐ๋. ๊ฒฝํฉ ์กฐ๊ฑด์ด์ง๋ง ์น๋ฅ ์ด ์ฌ์ค์ 100%์ ๊ฐ๊น์ด ๊ฒฝํฉ์ด์๋ ์ ์. ์ฌ๊ธฐ์ ๊ฐ์ ์๊ธฐ ๊ณต๊ฐ๋ ์ง๊ฟ ์ด์์ธ CVE-2015-3245(GECOS ํ๋์ ๊ฐํ ๋ฌธ์๊ฐ ๊ฑธ๋ฌ์ง์ง ์๋ ๋ฌธ์ )๋ฅผ ์น์ผ๋ฉด, ๊ณต๊ฒฉ์๋ ์๊ธฐ ๊ณ์ ์ ๋ณด ์์ ์ํ๋ ํํ์ ์ค์ ๋ฏธ๋ฆฌ ์ฌ์ด๋๊ณ ์ ๋จ ์์น๊น์ง ์กฐ์ ํ ์ ์์์. ๊ทธ๋ ๊ฒ ํด์ ๋ฃจํธ ํญ๋ชฉ์ ์ํธ ํ๋๊ฐ ๋น์ด๋ฒ๋ฆฌ๋ ์ํ๋ฅผ ๋ง๋ค๋ฉด, ๊ทธ ๋ค์์ ์ค๋ช ์ด ํ์ ์์.
์ด ๊ธ์์๋ ์ฌ๊ธฐ๊น์ง๋ง ๊ฐ๋ ์ ์ผ๋ก ์ ๋ฆฌํจ. ์ฌํ ์คํฌ๋ฆฝํธ๋ ๋ค๋ฃจ์ง ์์. ์ค์ํ ๊ฑด ์ ์ฐจ๊ฐ ์๋๋ผ "๋ถ๋ถ์ ์ผ๋ก ์ฐ์ธ ์ค์ ํ์ผ์ ๊ทธ ์์ฒด๋ก ๊ถํ ์์น ๊ฒฝ๋ก๊ฐ ๋๋ค"๋ ์ฌ์ค์.
4. ๋ฐฉ์ด์ ๊ด์ — ๋ฌด์์ ๋ด์ผ ํ๋
์ด๋ฏธ ์ค๋์ ์ ํจ์น๋ ์ฌ์์ด์ง๋ง, ํ์ง ๊ด์ ์ ์ง๊ธ๋ ๊ทธ๋๋ก ์ฌํ์ฉ๋จ.
- ๊ณ์ ํ์ผ ๋ฌด๊ฒฐ์ฑ ๊ฐ์: AIDE๋ ์ ์ฌ ๋๊ตฌ๋ก /etc/passwd, /etc/shadow, /etc/group์ ํด์ ๋ณํ๋ฅผ ์ถ์ ํจ. ์ ์์ ์ธ ๊ณ์ ์์ฑ๊ณผ ๋ฌ๋ฆฌ, ๊ณต๊ฒฉ ํ์ ์ ๋ณดํต ํ์ผ ํฌ๊ธฐ๊ฐ ๊ฐ์๊ธฐ ์ค์ด๋๋ ํํ๋ก ๋ํ๋จ
- ๋น ์ํธ ํ๋ ์ ๊ฒ: ๋ ๋ฒ์งธ ํ๋๊ฐ ๋น์ด ์๋ ํญ๋ชฉ์ด ์๋์ง ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํจ. ํนํ UID 0 ๊ณ์ ์ ๋ฌด์กฐ๊ฑด ๋ด์ผ ํจ
- auditd ๊ท์น: /etc/passwd์ ๋ํ write/truncate ์ด๋ฒคํธ๋ฅผ ๊ฐ์ํ๊ณ , ์ด๋ค ์คํ ํ์ผ์ด ๊ทธ ๋ณ๊ฒฝ์ ์ผ์ผ์ผฐ๋์ง ํจ๊ป ๊ธฐ๋กํจ. ์ ์ ๊ด๋ฆฌ ์์ (useradd, usermod)์ด ์๋ ๊ฒฝ๋ก์์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ๊ทธ๊ฒ ์ ํธ์
- setuid ํ๋ก๊ทธ๋จ ์คํ ๋ก๊ทธ: ์ผ๋ฐ ์ฌ์ฉ์๊ฐ userhelper ๊ณ์ด์ ๋ฐ๋ณต ํธ์ถํ๋ ํจํด์ ํํ ์ผ์ด ์๋. ์งง์ ์๊ฐ์ ์ฌ๋ฌ ๋ฒ ์คํ๋๊ณ ๊ทธ๋๋ง๋ค ๊ณ์ ํ์ผ์ด ๋ฐ๋์๋ค๋ฉด ๋ค์ฌ๋ค๋ณผ ๊ฐ์น๊ฐ ์ถฉ๋ถํจ
- ๋น์ ์ ์ข ๋ฃ ํ์ : ๋ฃจํธ ๊ถํ ํ๋ก์ธ์ค๊ฐ ํ์ผ ํฌ๊ธฐ ์ ํ์ด๋ ์๊ทธ๋๋ก ์ค๋ ์ข ๋ฃ๋ ๊ธฐ๋ก์ ๊ทธ ์์ฒด๋ก ์ด์ ์งํ์
5. ์ํ — ์์๋๋ก
- ํจ์น๊ฐ ๋จผ์ ์. ๋ฐฐํฌํ ๋ฒค๋๊ฐ ์ ๊ณตํ๋ libuser ๋ฐ ๊ด๋ จ ํจํค์ง ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฉํ๋ฉด ๊ทผ๋ณธ ์์ธ์ด ์ฌ๋ผ์ง. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐฑ์ ์ด๋ผ ์ด๋ฏธ ๋ ์๋ ํ๋ก์ธ์ค ์ ๋ฆฌ๋ ๊ฐ์ด ์ฑ๊ฒจ์ผ ํจ
- ๋ถํ์ํ ์ง์ ์ ์ ์ค์. ์๋ฒ ์ฉ๋์ ์์คํ ์์ ์ผ๋ฐ ์ฌ์ฉ์๊ฐ chfn/chsh๋ก ์๊ธฐ ์ ๋ณด๋ฅผ ๋ฐ๊ฟ ์ผ์ด ๊ฑฐ์ ์๋ค๋ฉด, ํด๋น consolehelper ์ฐ๋์ด๋ setuid ๋นํธ๋ฅผ ์ ์ฑ ์ ๋ง๊ฒ ์ ๋ฆฌํ๋ ๊ฒ ํฉ๋ฆฌ์ ์. ๊ฐ์ธ์ ์ผ๋ก๋ ๋ฐ์คํฌํฑ์ด ์๋ ์์คํ ์์ ์ด๋ฐ setuid ์ค๊ฐ ๋๊ตฌ๋ฅผ ๊ทธ๋๋ก ๋๋ ๊ฑธ ๋ณ๋ก ์ข์ํ์ง ์์
- ๋ฐฑ์ ๊ณผ ๋ณต๊ตฌ ๊ฒฝ๋ก๋ฅผ ์ค๋นํจ. /etc/passwd๊ฐ ๊นจ์ก์ ๋ ๋๋๋ฆด ์ ์๋ ์ค๋ ์ท์ด ์์ผ๋ฉด ์ฌ๊ณ ๊ฐ ์ฌ๊ฑด์ผ๋ก ๋ฒ์ง์ง ์์. pwck ๊ฐ์ ๊ฒ์ฆ ๋๊ตฌ๋ฅผ ์ ๊ธฐ ์ ๊ฒ์ ๋ฃ์ด๋๋ ๊ฒ๋ ์ถ์ฒํจ
- ๊ฐ์ ํจํด์ ์์ฒด ์ฝ๋์์๋ ์ฐพ์๋ด. ์ค์ ํ์ผ์ ์ง์ ์ด์ด truncateํ๊ณ ๋ค์ ์ฐ๋ ์ฝ๋๊ฐ ์ฌ๋ด ์คํฌ๋ฆฝํธ๋ ์์ฒด ๋ฐ๋ชฌ์ ๋จ์ ์๋ค๋ฉด, ๊ทธ๊ฑด libuser์ ๋๊ฐ์ ์ค์์. ์์ ํ์ผ + rename ํจํด์ผ๋ก ๋ฐ๊พธ๋ ๋ฐ ์ค๋ ๊ฑธ๋ฆฌ์ง ์์
6. ์ด ์ฌ๊ฑด์์ ์ฑ๊ธธ ๊ฒ
์ทจ์ฝ์ ์ด๋ผ๊ณ ํ๋ฉด ๋ณดํต ํ์ฑ ์ค๋ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ ์ฌ๋ฆฌ๊ฒ ๋๋๋ฐ, ์ด ๊ฑด์ ์ ์์ ์ธ ์ฝ๋๊ฐ ์ค๊ฐ์ ๋ฉ์ท์ ๋ ๋จ๋ ์ํ๊ฐ ๋ฌธ์ ์์. ๋ ผ๋ฆฌ์ ๋ฒ๊ทธ๊ฐ ์์ด๋, ์คํจ ์๋๋ฆฌ์ค๋ฅผ ์ค๊ณํ์ง ์์ผ๋ฉด ๊ทธ ์๋ฆฌ๊ฐ ๊ณต๊ฒฉ๋ฉด์ด ๋จ. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์คํจ๋ฅผ ์ ๋ฐํ๋ ์๋จ์ด ๊ผญ ๋๋จํ ํ์๋ ์์์. ๋ฆฌ๋ ์ค๊ฐ ์๋๋ถํฐ ์ ๊ณตํ๋ ๋ฆฌ์์ค ์ ํ ๊ธฐ๋ฅ ํ๋๋ฉด ์ถฉ๋ถํ์.
10๋ ์ ์ด์ผ๊ธฐ์ง๋ง, "๊ถํ ์๋ ํ๋ก์ธ์ค๊ฐ ์ ๋ขฐ ๊ฒฝ๊ณ ๋๋จธ์ ์ ๋ ฅ์ผ๋ก ์ค์ํ ํ์ผ์ ๋ค์ ์ด๋ค"๋ ๊ตฌ์กฐ๋ ์ง๊ธ๋ ์ฌ๋ฐฉ์ ์์. ๋ด๊ฐ ๊ด๋ฆฌํ๋ ์์คํ ์๋ ๊ทธ๋ฐ ์ฝ๋๊ฐ ๋จ์ ์๋์ง ํ ๋ฒ์ฏค ๋ค์ ธ๋ณด๋ฉด ์ข๊ฒ ์. ํน์ ๋น์ทํ ํจํด ๋ฐ๊ฒฌํ ์ ์์ผ๋ฉด ๋๊ธ๋ก ๊ณต์ ํด ์ฃผ์ธ์. ๊ฐ์ด ์ ๋ฆฌํด ๋ด์.
# ๋๊ธ