AppArmor๋ ํ๋ก์ธ์ค๊ฐ ํ์ผ์ ์ ๊ทผํ ๋ dentry ๊ณ์ธต์ ์ํํ์ฌ **์ ๊ทํ๋ ์ ๊ท ๊ฒฝ๋ก(Canonical Path)**๋ฅผ ํฉ์ฑํ ํ, ์ปค๋์ ์ฌ์ ์ปดํ์ผ๋ **๊ฒฐ์ ์ ์ ํ ์คํ ๋งํค(DFA)** ์์ง์ ํตํด $O(1)$ ์๋๋ก ๊ท์น์ ๋์กฐํฉ๋๋ค.
profile vuln_apparmor_service /bin/exploit_apparmor {
# 1. ํ์ผ์์คํ
๊ท์น
/home/lab/** r, # ์ผ๋ฐ ํ ๋๋ ํฐ๋ฆฌ ์ฝ๊ธฐ ํ์ฉ
deny /tmp/secret_token rw, # ๋น๋ฐ ํ ํฐ ์ ๊ทผ ์๊ฒฉ ๊ฑฐ๋ถ
# 2. ๋คํธ์ํฌ ๊ท์น
deny network raw, # Raw ํจํท ์ค๋ํ/์ธ์ ์
์ฐจ๋จ
# 3. ํ๋ก์ธ์ค ์ถ์ ๊ท์น
deny ptrace, # ํ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์กฐ์ ์ฐจ๋จ
}
์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ๋์ ์ ํ์ํ ๊ถํ์ ํ์ ํ๊ธฐ ์ํ ํ์ต ๋ชจ๋์ ๋๋ค.
apparmor="AUDIT" ... (complain) ํ๊ทธ์ ํจ๊ป dmesg์ ์์ธ ์ถ๋ ฅ.aa-logprof ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ํ๋กํ ์๋ ํ๋กํ์ผ๋ง ๋ฐ ํ๋.ํ๋ก๋์ ๋ฐฐํฌ ์ ์ธ๊ฐ๋์ง ์์ ๋ชจ๋ ์์ ์ ๊ทผ์ ์ฆ๊ฐ ๊ฒฉ๋ฆฌ/์ฐจ๋จํ๋ ๋ฐฉ์ด ๋ชจ๋์ ๋๋ค.
apparmor="DENIED" ... (enforce) ํ๊ทธ์ ํจ๊ป ์์คํ
๊ฐ์ฌ ์ด๋ฒคํธ ๋ฐ์.| ๋น๊ต ํญ๋ชฉ | ์ ํต์ DAC | AppArmor (๊ฒฝ๋ก ๊ธฐ๋ฐ MAC) | SELinux (๋ ์ด๋ธ ๊ธฐ๋ฐ MAC) |
|---|---|---|---|
| ์ ๊ทผ ํต์ ๊ธฐ์ค | ์์ ์ UID/GID ๋ฐ ํ์ผ ํผ๋ฏธ์ (rwxrwxrwx) | ์ ๊ทํ๋ ๊ฒฝ๋ก๋ช (Canonical Path) | ํ์ฅ ์์ฑ(xattr) ๋ณด์ ์ปจํ ์คํธ ๋ ์ด๋ธ |
| ๊ด๋ฆฌ ๋ณต์ก๋ | ๋งค์ฐ ๋ฎ์ | ๋ฎ์ ~ ๋ณดํต (์ง๊ด์ ์์ผ๋์นด๋) | ๋งค์ฐ ๋์ (์๋ง ๊ฐ์ Type & Rule) |
| ํ๋๋งํฌ / ํ์ผ ์ด๋ | ์ํฅ ์์ | ๊ฒฝ๋ก๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋ก์ด ๊ท์น์ด ์ ์ฉ๋จ | ์์ด๋ ธ๋(xattr)์ ๋ ์ด๋ธ์ด ๋ณด์กด๋์ด ์์ |
| ์ปจํ ์ด๋ ๋ฐํ์ ์นํ์ฑ | ๋ฏธํก (๋ฃจํธ ๊ถํ ๊ณต์ ์ทจ์ฝ) | ๋งค์ฐ ์ฐ์ (Docker/K8s ๊ธฐ๋ณธ ํ์ฌ) | ๋ณดํต (๋ณต์กํ MCS/MLS ๋ ์ด๋ธ๋ง ํ์) |
| ์ปค๋ ํ๊ฐ ์์ง | ์ธ๋ผ์ธ ๋นํธ๋ง์คํฌ ๊ฒ์ฌ | ๊ฒฐ์ ์ ์ ํ ์คํ ๋งํค (DFA) | ์ก์ธ์ค ๋ฒกํฐ ์บ์ (AVC) |
| ์ฃผ์ ์ฑํ ๋ฐฐํฌํ | ๋ชจ๋ ์ ๋์ค/๋ฆฌ๋ ์ค | Ubuntu, Debian, openSUSE | RHEL, Fedora, CentOS, Android |