๐Ÿ›ก๏ธ SELinux Type Enforcement & MLS Engine Kernel 6.12+

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

โšก Access Vector Cache (AVC) & Security Server Architecture

SELinux๋Š” ๋ชจ๋“  ์ ‘๊ทผ ๊ฒฐ์ • ์‹œ ์ฃผ์ฒด ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ(Subject Context), ๊ฐ์ฒด ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ(Target Context), ํด๋ž˜์Šค(Object Class)๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ผ์•„ ์ดˆ๊ณ ์† ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์ธ **AVC(Access Vector Cache)**๋ฅผ ๋จผ์ € ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ ๋ฏธ์Šค ์‹œ ์ปค๋„ ๋‚ด Security Server๊ฐ€ ์ •์ฑ… ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ˆœํšŒํ•˜์—ฌ ํŒ์ •์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.

Subject Process system_u:system_r: httpd_t:s0 PID: 1042 (Apache) Target Inode Object /var/www/html/index.html httpd_sys_content_t:s0 Class: file (perms: read) AVC (Fast Cache) Access Vector Cache Lookup Hash... O(1) Radix Tree Security Server Policy DB Evaluation TE Rule Check MLS Dominance Decision ENFORCING PENDING

๐Ÿ“œ SELinux ๊ฐ์‚ฌ ๋กœ๊ทธ (auditd / var/log/audit/audit.log)

[ 0.057000] SELinux: Initializing.
[ 0.145000] SELinux: Starting in enforcing mode by default
[Ready] ์ ‘๊ทผ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฐ ๋™์ž‘ ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  [๋‹จ๊ณ„๋ณ„ ์‹คํ–‰] ๋˜๋Š” [์ž๋™ ์‹คํ–‰]์„ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค.

๐Ÿ“‹ Type Enforcement (TE) ๊ทœ์น™ ์„ ์–ธ ๋ฌธ๋ฒ•

# Type Enforcement ํ•ต์‹ฌ ๊ทœ์น™ ์˜ˆ์‹œ
# ๋ฌธ๋ฒ•: allow [์ฃผ์ฒด_๋„๋ฉ”์ธ] [๊ฐ์ฒด_ํƒ€์ž…]:[ํด๋ž˜์Šค] { [๊ถŒํ•œ๋ชฉ๋ก] };

allow httpd_t httpd_sys_content_t:file { read open getattr ioctl };
allow httpd_t httpd_log_t:file { create write append };

# ๊ฑฐ๋ถ€ ๊ธฐ๋ณธ ์ •์ฑ… (Neverallow ์›์น™)
neverallow httpd_t shadow_t:file { read write execute };

๐Ÿ”€ ๋„๋ฉ”์ธ ์ „์ด (Domain Transition) ๋ฉ”์ปค๋‹ˆ์ฆ˜

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰(execve)ํ•  ๋•Œ, ๊ณต๊ฒฉ์ž๊ฐ€ ์ž„์˜์˜ ๊ณ ๊ถŒํ•œ ๋„๋ฉ”์ธ์œผ๋กœ ์ƒ์Šนํ•˜์ง€ ๋ชปํ•˜๋„๋ก 3๊ฐ€์ง€ ํ•„์ˆ˜ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜์–ด์•ผ๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋„๋ฉ”์ธ์ด ์ „์ด๋ฉ๋‹ˆ๋‹ค.

Source Domain init_t (systemd) 1. allow init_t httpd_exec_t:file { execute }; 2. allow init_t httpd_t:process { transition }; Entrypoint Binary /usr/sbin/httpd type: httpd_exec_t 3. allow httpd_t httpd_exec_t:file { entrypoint }; Target Domain httpd_t (Apache) โœ“ ์ตœ์†Œ ๊ถŒํ•œ์œผ๋กœ ๊ฒฉ๋ฆฌ๋จ โœ— shadow_t ์ ‘๊ทผ ๋ถˆ๊ฐ€ โœ— rootfs ์ž„์˜ ์“ฐ๊ธฐ ๋ถˆ๊ฐ€

๐Ÿ”’ Multi-Level Security (MLS) & Bell-LaPadula ๋ชจ๋ธ

MLS(๋‹ค์ค‘ ๋ ˆ๋ฒจ ๋ณด์•ˆ)๋Š” ์ •๋ถ€ ๋ฐ ๊ตญ๋ฐฉ ๋“ฑ๊ธ‰์˜ ์—„๊ฒฉํ•œ ๊ธฐ๋ฐ€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Bell-LaPadula ์ˆ˜ํ•™์  ๋ณด์•ˆ ์ •๋ฆฌ๋ฅผ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

1. No Read Up (๋‹จ์ˆœ ๋ณด์•ˆ ์†์„ฑ - Simple Security Property)

์ฃผ์ฒด๋Š” ์ž์‹ ๋ณด๋‹ค ๋†’์€ ๋ฏผ๊ฐ๋„ ๋“ฑ๊ธ‰์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์ ˆ๋Œ€ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ฃผ์ฒด (Clearance: s0 - ์ผ๋ฐ˜)
  โ”œโ”€โ”€ ์ฝ๊ธฐ ์‹œ๋„ โ”€โ”€โ–บ ๊ฐ์ฒด (Level: s0)    [ํ—ˆ์šฉ: GRANTED]
  โ””โ”€โ”€ ์ฝ๊ธฐ ์‹œ๋„ โ”€โ”€โ–บ ๊ฐ์ฒด (Level: s1:c0) [์ฐจ๋‹จ: -EACCES No Read Up!]

2. No Write Down (*-์†์„ฑ - Star Property)

๋†’์€ ๋ณด์•ˆ ๋“ฑ๊ธ‰์„ ๊ฐ€์ง„ ์ฃผ์ฒด๋Š” ๋‚ฎ์€ ๋“ฑ๊ธ‰์˜ ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ถœ(์“ฐ๊ธฐ)ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ฃผ์ฒด (Clearance: s1:c0 - ๊ทน๋น„)
  โ”œโ”€โ”€ ์“ฐ๊ธฐ ์‹œ๋„ โ”€โ”€โ–บ ๊ฐ์ฒด (Level: s1:c0) [ํ—ˆ์šฉ: GRANTED]
  โ””โ”€โ”€ ์“ฐ๊ธฐ ์‹œ๋„ โ”€โ”€โ–บ ๊ฐ์ฒด (Level: s0)    [์ฐจ๋‹จ: -EACCES No Write Down!]

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

๋น„๊ต ํ•ญ๋ชฉ ์ „ํ†ต์  DAC SELinux (๋ ˆ์ด๋ธ” ๊ธฐ๋ฐ˜ MAC) AppArmor (๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ MAC)
๋ณด์•ˆ ํ†ต์ œ ๊ธฐ์ค€ ์†Œ์œ ์ž UID/GID ์•„์ด๋…ธ๋“œ ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ (xattr ๋ ˆ์ด๋ธ”) ์ •๊ทœํ™”๋œ ํŒŒ์ผ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ช…
์ ‘๊ทผ ํ†ต์ œ ๋ชจ๋ธ ์ž„์˜์  ์ ‘๊ทผ ์ œ์–ด Type Enforcement (TE) + MLS/MCS ๊ฒฝ๋กœ ์™€์ผ๋“œ์นด๋“œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ
ํ•˜๋“œ๋งํฌ ๋ณ€์กฐ ๋ฐฉ์–ด ์ทจ์•ฝ ์™„๋ฒฝ (์•„์ด๋…ธ๋“œ์— ๋ ˆ์ด๋ธ”์ด ์ง์ ‘ ๊ท€์†) ๋ณดํ†ต (๊ฒฝ๋กœ๋ช… ๋ณ€๊ฒฝ ์‹œ ์ƒˆ๋กœ์šด ํ”„๋กœํ•„ ๋งค์นญ)
์šด์˜ ๋ฐ ํŠœ๋‹ ๋ณต์žก๋„ ๋งค์šฐ ๋‚ฎ์Œ ๋†’์Œ (audit2allow, setsebool, chcon ํ•„์š”) ๋‚ฎ์Œ ~ ๋ณดํ†ต (aa-genprof, aa-logprof)
์ปค๋„ ์บ์‹œ ์—”์ง„ dcache AVC (Access Vector Cache) DFA (Deterministic Finite Automaton)
์ฃผ์š” ์ฑ„ํƒ ์ƒํƒœ๊ณ„ ๋ชจ๋“  ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค RHEL, CentOS, Fedora, Android, NSA Ubuntu, Debian, SUSE