Capability

λ¦¬λˆ…μŠ€μ˜ CapabilitiesλŠ” ν”„λ‘œμ„ΈμŠ€μ— ν•„μš”ν•œ μ΅œμ†ŒκΆŒν•œλ§Œ μ„ΈλΆ€μ μœΌλ‘œ λ‚˜λˆ„μ–΄ κ΄€λ¦¬ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€.

1. Capabilities의 λ“±μž₯ λ°°κ²½

λ¦¬λˆ…μŠ€λŠ” 기본적으둜 λ‹€μŒκ³Ό 같은 μ‚¬μš©μž 기반 κΆŒν•œ λͺ¨λΈμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • UID=0 (root): μ‹œμŠ€ν…œμ˜ λͺ¨λ“  μž‘μ—… μˆ˜ν–‰ κ°€λŠ₯

  • UIDβ‰ 0 (일반 μ‚¬μš©μž): μ œν•œλœ κΆŒν•œ

일반 μ‚¬μš©μžκ°€ μ‹œμŠ€ν…œ μˆ˜μ€€μ˜ 일뢀 νŠΉμ •ν•œ μž‘μ—…(예: 포트 바인딩, 파일 μ†Œμœ μž λ³€κ²½, 마운트 λ“±)을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” setuid, setgid, sticky bit와 같은 특수 κΆŒν•œμ„ λΆ€μ—¬ν•˜μ—¬ ν•΄λ‹Ή μž‘μ—…μ„ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“€μ–΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ 방식은 전체 root κΆŒν•œμ„ λΆ€μ—¬ν•˜κ±°λ‚˜, κΆŒν•œμ˜ λ²”μœ„λ₯Ό μ„Έλ°€ν•˜κ²Œ μ œμ–΄ν•  수 μ—†λ‹€λŠ” ν•œκ³„λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 특히 setuidλŠ” ν•˜λ‚˜μ˜ μž‘μ—…λ§Œμ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν”„λ‘œκ·Έλž¨ 전체에 루트 κΆŒν•œμ„ λΆ€μ—¬ν•˜λŠ” 방식이기 λ•Œλ¬Έμ—, λ³΄μ•ˆ 취약점이 μ‘΄μž¬ν•  경우 μ‹œμŠ€ν…œ 전체가 곡격에 λ…ΈμΆœλ˜λŠ” μ‹¬κ°ν•œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό ν•΄κ²°ν•˜κ³ μž λ¦¬λˆ…μŠ€ 컀널은 root κΆŒν•œμ„ μ„ΈλΆ„ν™”ν•˜μ—¬ κΈ°λŠ₯ λ‹¨μœ„λ‘œ 뢄리할 수 μžˆλŠ” Linux Capabilitiesλ₯Ό λ„μž…ν•˜μ˜€μŠ΅λ‹ˆλ‹€. CapabilitiesλŠ” 각 μž‘μ—…(예: λ„€νŠΈμ›Œν¬ 포트 바인딩, 파일 μ†Œμœ μž λ³€κ²½, 마운트 λ“±)에 ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ κΆŒν•œλ§Œμ„ ν”„λ‘œμ„ΈμŠ€μ— λΆ€μ—¬ν•  수 μžˆλ„λ‘ ν•˜μ—¬, μ΅œμ†Œ κΆŒν•œ 원칙(Principle of Least Privilege)을 μ‹œμŠ€ν…œ μˆ˜μ€€μ—μ„œ μ‹€ν˜„ν•  수 있게 ν•©λ‹ˆλ‹€.

2. Capabilities의 μ’…λ₯˜

λ¦¬λˆ…μŠ€μ—μ„œλŠ” μ•½ 41개 μ •λ„μ˜ Capabilitiesκ°€ μ •μ˜λ˜μ–΄ 있으며, μ‚¬μš©ν•˜λŠ” 컀널 버전에 따라 μ‘°κΈˆμ”© λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. κΆŒν•œ μƒμŠΉμ— μ·¨μ•½ν•œ μ£Όμš” Capabilities λͺ©λ‘μ€ μ•„λž˜ ν‘œμ™€ κ°™μŠ΅λ‹ˆλ‹€.

Capability
μ£Όμš” κΈ°λŠ₯ μ„€λͺ…
κΆŒν•œ μƒμŠΉ μœ„ν—˜μ„±

CAP_SYS_ADMIN

μ‹œμŠ€ν…œ 전체 관리 κΆŒν•œ. mount, chroot, λ„€μž„μŠ€νŽ˜μ΄μŠ€ 관리 λ“± κ΄‘λ²”μœ„ν•œ μž‘μ—… ν—ˆμš©

πŸ”΄ 맀우 λ†’μŒ

CAP_SETUID

ν”„λ‘œμ„ΈμŠ€μ˜ UIDλ₯Ό 0(root) λ“±μœΌλ‘œ λ³€κ²½ κ°€λŠ₯

πŸ”΄ 맀우 λ†’μŒ

CAP_SETGID

ν”„λ‘œμ„ΈμŠ€μ˜ GIDλ₯Ό λ³€κ²½ κ°€λŠ₯

πŸ”΄ 맀우 λ†’μŒ

CAP_DAC_OVERRIDE

DAC(μ†Œμœ μž 기반 κΆŒν•œ 검사) λ¬΄μ‹œ κ°€λŠ₯ β†’ λͺ¨λ“  파일 읽기/μ“°κΈ°

πŸ”΄ 맀우 λ†’μŒ

CAP_DAC_READ_SEARCH

읽기 및 디렉토리 검색 κΆŒν•œ λ¬΄μ‹œ

πŸ”΄ 맀우 λ†’μŒ

CAP_FOWNER

μžμ‹ μ΄ μ†Œμœ ν•˜μ§€ μ•Šμ€ νŒŒμΌμ—λ„ μ†Œμœ μž κΆŒν•œμœΌλ‘œ μž‘μ—… κ°€λŠ₯

πŸ”΄ λ†’μŒ

CAP_CHOWN

파일 μ†Œμœ μž λ³€κ²½ κ°€λŠ₯

πŸ”΄ λ†’μŒ

CAP_SYS_PTRACE

λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ λ©”λͺ¨λ¦¬ μ ‘κ·Ό 및 디버깅 κ°€λŠ₯ (μ•”ν˜Έ, 토큰 νƒˆμ·¨ λ“±)

πŸ”΄ 맀우 λ†’μŒ

CAP_NET_ADMIN

λ„€νŠΈμ›Œν¬ μ„€μ • λ³€κ²½ κ°€λŠ₯ (λΌμš°νŒ…, μΈν„°νŽ˜μ΄μŠ€ μ œμ–΄, λ°©ν™”λ²½ λ“±)

πŸ”΄ λ†’μŒ

CAP_NET_RAW

Raw socket μ‚¬μš© κ°€λŠ₯ (ping, sniffer λ“±)

🟑 쀑간

CAP_SYS_MODULE

컀널 λͺ¨λ“ˆ μ‚½μž…/제거 κ°€λŠ₯ (컀널 레벨 취약점 곡격 κ°€λŠ₯)

πŸ”΄ 맀우 λ†’μŒ

CAP_SYS_TIME

μ‹œμŠ€ν…œ μ‹œκ°„ λ³€κ²½ (둜그 μœ„μ‘°, μ‹œκ°„ 기반 우회 κ°€λŠ₯)

🟑 쀑간

CAP_MKNOD

λ””λ°”μ΄μŠ€ 파일 생성 κ°€λŠ₯ (κ°€μ§œ λ””μŠ€ν¬, TTY 생성 λ“±)

🟑 쀑간

chevron-rightCapability의 4κ°€μ§€ μ§‘ν•©κ³Ό μ˜΅μ…˜hashtag

Capabilitiesλ₯Ό μ„€μ •ν•  λ•ŒλŠ” 일반적으둜 λ‹€μŒ μ„Έ κ°€μ§€ ν”Œλž˜κ·Έκ°€ μ‚¬μš©λ©λ‹ˆλ‹€.

Capability μ§‘ν•©
의미
ν•΄λ‹Ή μ˜΅μ…˜

Permitted (ν—ˆμš©λœ μ§‘ν•©)

ν”„λ‘œμ„ΈμŠ€κ°€ κ°€μ§ˆ 수 μžˆλŠ” Capability λͺ©λ‘

p (permitted)

Effective (유효 μ§‘ν•©)

ν”„λ‘œμ„ΈμŠ€κ°€ μ¦‰μ‹œ μ‚¬μš©ν•  수 μžˆλŠ” Capability λͺ©λ‘

e (effective)

Inheritable (상속 κ°€λŠ₯ μ§‘ν•©)

ν”„λ‘œμ„ΈμŠ€κ°€ μžμ‹ ν”„λ‘œμ„ΈμŠ€μ— 상속할 수 μžˆλŠ” Capability λͺ©λ‘

i (inheritable)

Ambient (μ£Όλ³€ μ§‘ν•©)

λͺ…μ‹œμ  μ„€μ • 없이 μžλ™μœΌλ‘œ μžμ‹ ν”„λ‘œμ„ΈμŠ€μ— μ „λ‹¬λ˜λŠ” Capability λͺ©λ‘

별도 μ˜΅μ…˜ μ—†μŒ (ambientλŠ” 별도 λͺ…λ Ήμ–΄λ‘œ 관리)

3. Capabilities 확인 및 μ„€μ • 방법

1. Capabilityκ°€ μ„€μ •λœ λͺ¨λ“  파일 확인

2. 파일의 Capability 확인

3. ν”„λ‘œμ„ΈμŠ€μ˜ Capability 확인

4. νŒŒμΌμ— Capability μ„€μ •

4. Capabilityλ₯Ό μ΄μš©ν•œ κΆŒν•œμƒμŠΉ μ‹œλ‚˜λ¦¬μ˜€

1. CAP_SETUID λ₯Ό μ΄μš©ν•œ root shell νšλ“

  • /home/po3nyo/.local/python3 λ°”μ΄λ„ˆλ¦¬μ— cap_setuid+ep μ„€μ • 확인

  • ν•΄λ‹Ή ν΄λ”λ‘œ 이동 ν›„ python μ‹€ν–‰νŒŒμΌμ„ μ΄μš©ν•˜μ—¬ μ•„λž˜ μ½”λ“œarrow-up-right μ‹€ν–‰ ν›„ root shell νšλ“

2. CAP_DAC_OVERRIDE λ₯Ό μ΄μš©ν•œ /etc/shadow 파일 μ ‘κ·Ό

  • /usr/bin/catλ°”μ΄λ„ˆλ¦¬μ— cap_dac_override+ep μ„€μ • 확인

  • /etc/shadow 쑰회

  • root 계정 νŒ¨μŠ€μ›Œλ“œ ν•΄μ‹œ μΆ”μΆœ

  • ν•΄μ‹œ ν¬λž˜ν‚Ήμ„ 톡해 root νŒ¨μŠ€μ›Œλ“œ νšλ“

  • su λͺ…λ ΉμœΌλ‘œ root 계정 둜그인

5. Mitigation

1. λΆˆν•„μš”ν•œ Capability 제거

일반 μ‚¬μš©μž μ ‘κ·Ό κ°€λŠ₯ν•œ λ°”μ΄λ„ˆλ¦¬μ— cap_setuid, cap_sys_admin, cap_dac_override 같은 κ³ μœ„ν—˜ Capabilitiesκ°€ λΆ€μ—¬λ˜μ–΄ 있으면 λˆ„κ΅¬λ“ μ§€ 루트 μ‰˜μ„ νšλ“ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ •κΈ°μ μœΌλ‘œ ν™•μΈν•˜μ—¬ κ΄€λ¦¬ν•΄μ•Όν•©λ‹ˆλ‹€.

  • Capability μ„€μ • 확인

  • 좜λ ₯ κ²°κ³Ό μœ„ν—˜ Capabilityκ°€ μ„€μ •λœ λ°”μ΄λ„ˆλ¦¬ 확인 및 제거

2. μ΅œμ†Œ κΆŒν•œ 원칙(Least Privilege Principle) 적용

CapabilitiesλŠ” 루트 κΆŒν•œμ„ λŒ€μ²΄ν•  수 μžˆλŠ” 만큼, λ°˜λ“œμ‹œ μ •ν™•ν•˜κ²Œ ν•„μš”ν•œ μž‘μ—…λ§Œ μˆ˜ν–‰ν•˜λ„λ‘ μ΅œμ†Œν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ:

  • ping β†’ cap_net_raw만 ν•„μš”

  • mount β†’ μ ˆλŒ€λ‘œ 일반 μ‚¬μš©μžμ—κ²Œ λΆ€μ—¬ν•˜λ©΄ μ•ˆ 됨 (cap_sys_admin은 rootκΈ‰ κΆŒν•œ)

3. 인터프리터 λ°”μ΄λ„ˆλ¦¬(cap_sh, python, bash λ“±)에 Capabilities κΈˆμ§€

Python, Bash, Perl λ“±μ˜ 인터프리터에 cap_setuid, cap_dac_override 등을 λΆ€μ—¬ν•˜λ©΄, μž„μ˜ μ½”λ“œ μ‹€ν–‰μœΌλ‘œ 루트 μ‰˜μ„ 맀우 μ‰½κ²Œ 얻을 수 μžˆμœΌλ―€λ‘œ μ΄λŸ¬ν•œ λ²”μš© λ„κ΅¬μ—λŠ” μ ˆλŒ€ Capabilityλ₯Ό λΆ€μ—¬ν•˜λ©΄ μ•ˆλ˜λ©° λΆ€λ“μ΄ν•œ 경우 AppArmorλ‚˜ SELinux 같은 Mandatory Access Control(MAC) μ‹œμŠ€ν…œμ„ ν†΅ν•œ 좔가적인 관리가 ν•„μš”ν•©λ‹ˆλ‹€.

4. 정기적 점검 및 κ°μ‹œ

Capabilities 섀정은 파일 속성(xattr)에 μ €μž₯λ˜λ―€λ‘œ, 일반 파일 κ²€μ‚¬λ‘œλŠ” 보이지 μ•ŠμŠ΅λ‹ˆλ‹€. μ •κΈ°μ μœΌλ‘œ μŠ€ν¬λ¦½νŠΈλ‚˜ λ³΄μ•ˆ 점검 λ„κ΅¬λ‘œ κ°μ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€.

슀크립트 μ˜ˆμ‹œ:

Last updated