๐Ÿ›ก๏ธ AppArmor Path-based MAC Architecture Kernel 6.12+

๋Œ€๊ธฐ ์ค‘ (PAUSED)

๐Ÿ” Path-Based Confinement Pipeline & DFA Evaluation

AppArmor๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŒŒ์ผ์— ์ ‘๊ทผํ•  ๋•Œ dentry ๊ณ„์ธต์„ ์ˆœํšŒํ•˜์—ฌ **์ •๊ทœํ™”๋œ ์ •๊ทœ ๊ฒฝ๋กœ(Canonical Path)**๋ฅผ ํ•ฉ์„ฑํ•œ ํ›„, ์ปค๋„์— ์‚ฌ์ „ ์ปดํŒŒ์ผ๋œ **๊ฒฐ์ •์  ์œ ํ•œ ์˜คํ† ๋งˆํ†ค(DFA)** ์—”์ง„์„ ํ†ตํ•ด $O(1)$ ์†๋„๋กœ ๊ทœ์น™์„ ๋Œ€์กฐํ•ฉ๋‹ˆ๋‹ค.

Syscall Entry sys_openat() Path Resolution dentry -> full path /home/lab/notes.txt Task Profile cred->security vuln_apparmor_service DFA Match Engine Path Graph Traversal State: S0 -> S_ACCEPT Enforcement Point Mode: ENFORCE PENDING

๐Ÿ“œ ์ปค๋„ AppArmor ๊ฐ์‚ฌ ๋กœ๊ทธ (auditd / dmesg)

[ 0.145000] AppArmor: AppArmor Filesystem Enabled
[ 0.145100] AppArmor: Loaded profile 'vuln_apparmor_service' (enforce)
[Ready] ์ƒ๋‹จ ํˆด๋ฐ”์—์„œ ์š”์ฒญ ์ž‘์—…๊ณผ ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•œ ํ›„ [๋‹จ๊ณ„๋ณ„ ์‹คํ–‰] ๋˜๋Š” [์ž๋™ ์‹คํ–‰]์„ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค.

๐Ÿ“‹ ํ™œ์„ฑ ํ”„๋กœํ•„ ์„ ์–ธ (`/etc/apparmor.d/vuln_service`)

profile vuln_apparmor_service /bin/exploit_apparmor {
    # 1. ํŒŒ์ผ์‹œ์Šคํ…œ ๊ทœ์น™
    /home/lab/** r,             # ์ผ๋ฐ˜ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ฝ๊ธฐ ํ—ˆ์šฉ
    deny /tmp/secret_token rw,  # ๋น„๋ฐ€ ํ† ํฐ ์ ‘๊ทผ ์—„๊ฒฉ ๊ฑฐ๋ถ€

    # 2. ๋„คํŠธ์›Œํฌ ๊ทœ์น™
    deny network raw,           # Raw ํŒจํ‚ท ์Šค๋‹ˆํ•‘/์ธ์ ์…˜ ์ฐจ๋‹จ
    
    # 3. ํ”„๋กœ์„ธ์Šค ์ถ”์  ๊ทœ์น™
    deny ptrace,                # ํƒ€ ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ์กฐ์ž‘ ์ฐจ๋‹จ
}

โš–๏ธ Complain Mode (ํ•™์Šต/๊ฐ์‚ฌ) vs Enforce Mode (๊ฐ•์ œ ์ฐจ๋‹จ)

1. Complain / Learning Mode (Baseline)

์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„์ž… ์‹œ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•œ ํ•™์Šต ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค.

  • ์ ‘๊ทผ ์ œ์–ด ํŒ์ •: ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•ด๋„ ๋™์ž‘์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ํ—ˆ์šฉ(ALLOWED)ํ•จ.
  • ๋กœ๊ทธ ํ˜•์‹: apparmor="AUDIT" ... (complain) ํƒœ๊ทธ์™€ ํ•จ๊ป˜ dmesg์— ์ƒ์„ธ ์ถœ๋ ฅ.
  • ๋ณด์•ˆ ์ˆ˜์ค€: ๊ณต๊ฒฉ ์ฐจ๋‹จ ๋ถˆ๊ฐ€๋Šฅ (Baseline ์ทจ์•ฝ ์ƒํƒœ).
  • ์ฃผ ์šฉ๋„: aa-logprof ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœํ•„ ์ž๋™ ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ ํŠœ๋‹.

2. Enforce Mode (Hardened)

ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ ์‹œ ์ธ๊ฐ€๋˜์ง€ ์•Š์€ ๋ชจ๋“  ์ž์› ์ ‘๊ทผ์„ ์ฆ‰๊ฐ ๊ฒฉ๋ฆฌ/์ฐจ๋‹จํ•˜๋Š” ๋ฐฉ์–ด ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค.

  • ์ ‘๊ทผ ์ œ์–ด ํŒ์ •: ํ”„๋กœํ•„์— ๋ช…์‹œ๋˜์ง€ ์•Š์€ ์ž‘์—…์— ๋Œ€ํ•ด ์ฆ‰์‹œ -EACCES / -EPERM ๊ฑฐ๋ถ€(DENIED).
  • ๋กœ๊ทธ ํ˜•์‹: apparmor="DENIED" ... (enforce) ํƒœ๊ทธ์™€ ํ•จ๊ป˜ ์‹œ์Šคํ…œ ๊ฐ์‚ฌ ์ด๋ฒคํŠธ ๋ฐœ์ƒ.
  • ๋ณด์•ˆ ์ˆ˜์ค€: ์ƒŒ๋“œ๋ฐ•์Šค ์™„๋ฒฝ ์œ ์ง€, ์›๊ฒฉ RCE ํŽ˜์ด๋กœ๋“œ์˜ ํ˜ธ์ŠคํŠธ ์žฅ์•… ์ฐจ๋‹จ.
  • ์ฃผ ์šฉ๋„: ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„(Docker/K8s ๊ธฐ๋ณธ ํ”„๋กœํ•„) ๋ฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฐ๋ชฌ ๋ฐฉ์–ด.

๐Ÿ”„ Profile Compilation & SecurityFS Interface

Text Profile /etc/apparmor.d/* profile test { /bin/bash rix, deny /etc/**, } apparmor_parser Binary DFA State Machine Bytecode DFA Tables (Transitions) Permission Masks Fast O(1) Evaluation write() to raw node Kernel AppArmor SecurityFS (/sys/kernel/security/apparmor/) .load : Raw bytecode upload entry point .replace : Atomic hot-update of active profiles .remove : Unloading active profile profiles : Lists active profiles & modes (read-only)

๐Ÿ“Š Linux MAC ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์‹ฌ์ธต ๋น„๊ต: AppArmor vs SELinux

๋น„๊ต ํ•ญ๋ชฉ ์ „ํ†ต์  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