Linux 시스템 보안 기초 · 22/50편

이 글은 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.

선행 학습

1. 들어가며

SUID root는 '전부 아니면 전무'입니다 — 그 프로그램이 실행 중 완전한 root가 됩니다. 이 위험을 줄이려고 리눅스는 root의 권한을 작은 조각(capability) 으로 나눴습니다. ping이 SUID 없이도 raw 소켓을 쓸 수 있는 이유가 바로 capability입니다.

2. 핵심 개념

root 권한을 기능 단위로 분리한 것이 capability입니다. 주요 예:

capability허용 기능
CAP_NET_RAWraw 소켓(ping 등)
CAP_NET_ADMIN네트워크 설정 변경
CAP_SYS_ADMIN광범위 관리(사실상 준-root)
CAP_DAC_OVERRIDE파일 권한 검사 우회
CAP_SETUIDUID 변경

+ep(effective+permitted)로 파일에 부여하면, 그 실행 파일은 해당 기능만 root처럼 쓰고 나머지는 못 씁니다.

SUID root                        Capability
실행 중 = 완전한 root            실행 중 = 딱 그 기능만 root
  전권한(위험 큼)                  최소 권한(위험 국소화)
  find -exec sh → root쉘          cap_net_raw만 → 쉘 못 뜸

3. 동작 원리

실행 파일에 capability를 setcap으로 부여하면 확장 속성(security.capability)에 저장됩니다. exec 시 커널이 이를 읽어 프로세스에 해당 기능만 부여합니다. 최소 권한 원칙(20편의 선행 개념)에 정확히 부합하는 메커니즘입니다.

다만 capability도 '어떤 것'을 주느냐가 중요합니다. CAP_DAC_OVERRIDE, CAP_SYS_ADMIN, CAP_SETUID 같은 강력한 것은 사실상 root와 다름없어, 잘못 부여하면 권한 상승으로 이어집니다(23편).

4. 명령어 실습

# 파일 capability 부여/확인
sudo setcap cap_net_raw+ep ./myping
getcap ./myping

# 시스템 전체에서 capability를 가진 파일 스캔
sudo getcap -r / 2>/dev/null

5. 실행 결과

실습 환경에서 실제 capability를 부여·확인한 결과입니다. (실제 캡처)

$ sudo setcap cap_net_raw,cap_net_admin+ep ./netcat_demo
$ getcap ./netcat_demo
./netcat_demo cap_net_admin,cap_net_raw=ep

cap_net_admin,cap_net_raw=ep가 부여되었습니다. 시스템 전체 스캔(getcap -r /)으로 이런 파일 목록을 기준선으로 확보해 두면, 새로 부여된 capability를 탐지할 수 있습니다.

6. 보안 관점 — 정상 사용 vs 악용

  • 정상: ping의 cap_net_raw 등 배포판 표준 capability.
  • 위험 징후:
    • 범용 도구/커스텀 바이너리에 강력 capability(cap_dac_override, cap_sys_admin, cap_setuid)
    • 비표준 경로 파일의 capability

capability는 SUID의 안전한 대안이지만, 강력한 것을 남용하면 SUID만큼 위험합니다. '최소한의, 꼭 필요한 capability만'이 원칙입니다.

7. 탐지 방법

  • getcap -r / 기준선 대비 diff
  • 강력 capability(dac_override/sys_admin/setuid) 우선 조사
  • setcap 실행 및 setxattr(security.capability) 감사

8. SOC 관점 — SIEM · Wazuh · IOC

capability는 SUID보다 눈에 덜 띄어 놓치기 쉽습니다. auditd로 setcap 실행과 관련 setxattr를 감사하고, Wazuh FIM으로 확장 속성 변경을 감시하면 은밀한 권한 부여를 탐지할 수 있습니다. 신규 capability 파일은 SUID와 함께 '특수 권한 실행 파일' IOC 인벤토리로 관리합니다.

9. 실습 체크리스트

[ ] getcap -r /로 capability 파일 스캔
[ ] 강력 capability 보유 파일 식별
[ ] 기준선과 diff
[ ] setcap/setxattr 감사 설정

10. 핵심 정리

  • capability는 root 권한을 기능 단위로 쪼갠 것이다.
  • SUID의 '전부 아니면 전무' 위험을 줄이는 대안이다.
  • cap_dac_override/sys_admin/setuid는 사실상 root급이다.
  • 부여는 확장 속성에 저장되어 SUID보다 눈에 덜 띈다.
  • getcap 기준선 대비 신규 capability를 탐지한다.

11. 다음 편

다음 편에서는 23. Capability 기반 권한 상승 위험 를 다룹니다. 이 capability가 실제로 어떻게 권한 상승에 악용되는지, 점검 관점에서 봅니다.


본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글