시스템 보안 · 취약점 › D. 권한 변경 이상 징후 · 37/50편 (전체 187/450)
학습 단계: sudo·PAM·capability 권한 변경
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
5단계는 권한 변경의 감사·로그 분석을 다룹니다. 첫 번째는 setuid/setgid 시스템 콜입니다. 파일 권한(SUID 비트)이 "상승 경로"라면, setuid() 호출은 실제로 UID를 바꾸는 "상승 실행"입니다. 이 호출을 감사하면 상승이 일어나는 순간을 포착합니다.
setuid/setgid 호출과 상승
setuid(0) → 실행 UID를 root로 변경
setgid(0) → 실행 GID를 root로 변경
setresuid() → real/effective/saved UID 변경
호출 주체: SUID 바이너리·cap_setuid 프로세스
정상: su/sudo/passwd 등이 호출
비정상: 예상 외 프로세스의 setuid(0)
파일 권한 변경(D22·27)이 "경로 생성"이면, setuid 호출은 "경로 사용(실행)"의 직접 증거입니다.
| 호출 | 의미 | 정상 호출자 |
|---|---|---|
setuid(0) | root UID 변경 | su/sudo/passwd |
setgid(0) | root GID 변경 | 로그인·sudo |
setresuid(0,0,0) | 3-UID root | 상승 도구 |
| 예상 외 호출자 | 비정상 상승 | — |
| 비표준 바이너리 | 백도어 상승 | — |
# setuid/setgid 호출 이상 탐지 (분석 방법)
# setuid/setresuid 호출 감사(execve+setuid 규칙 필요, D03)
sudo ausearch -k priv_esc,setuid_call -i --start recent 2>/dev/null | grep -E 'setuid|setresuid|setgid' | tail
# 호출 프로세스별 집계(예상 외 식별)
sudo ausearch -k setuid_call -i --start today 2>/dev/null | grep -oE 'comm="[^"]+"' | sort | uniq -c
$ (setuid 호출)
14:30 comm="sudo" setuid success=yes (정상)
$ (호출 프로세스 집계)
45 comm="sudo" 12 comm="su" 8 comm="crond"
setuid 호출이 정상 호출자(sudo·su·crond)에 집중된 상태가 정상입니다. 예상 목록은 기준선에 등록합니다.
$ (setuid 호출)
04:00 comm="find" setuid(0) success=yes (SUID find)
04:02 comm="python3" setresuid(0,0,0) (cap_setuid python)
$ (호출 프로세스 집계)
45 comm="sudo" 3 comm="find" 2 comm="python3"
find의 setuid(0) → D22에서 설정한 SUID find로 상승 실행python3의 setresuid → D27 cap_setuid 부여 후 상승setuid 호출 흐름입니다(가상의 예시 로그).
type=SYSCALL ... syscall=setuid comm="find" auid=devops euid=0 success=yes key="setuid_call"
→ find가 setuid(0) 호출(SUID find, D22에서 설정)
[연결] D22 SUID 설정 → 여기 setuid 호출 : 경로 생성→사용
| 필드 | 해석 |
|---|---|
| syscall=setuid | UID 변경 호출 |
| comm=find | 예상 외 호출자 |
| euid=0 | root로 상승 |
| auid=devops | 원래 사용자 |
setuid 호출(실행)을 그 바이너리의 권한 변경(D22·27)과 연결하면 "경로 생성→사용"이 완성됩니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_d,privilege,">
<rule id="103350" level="12">
<if_sid>103000</if_sid>
<field name="audit.syscall" type="pcre2">^(setuid|setreuid|setresuid)$</field>
<field name="audit.comm" type="pcre2">^(?!(sudo|su|passwd|login|crond|sshd|systemd)).+</field>
<field name="audit.euid">0</field>
<description>예상 외 프로세스의 setuid(0) 상승 호출</description>
<mitre><id>T1548</id></mitre>
</rule>
</group>
정상 호출자 화이트리스트(sudo·su 등)로 오탐을 줄이고, 예상 외 호출자를 권한 변경 룰과 세션 상관합니다.
| 호출 | 의미 |
|---|---|
| setuid(0) | root UID 변경 |
| setresuid(0,0,0) | 3-UID root |
| 예상 외 호출자 | 비정상 상승 |
| 권한 변경 연결 | 경로 생성→사용 |
| 면접 포인트 | "setuid(0) 호출은 상승 실행의 직접 증거 — 호출자 화이트리스트로 비정상 포착" |
다음 편 188. 권한 변경 이상 — 권한 변경 기반 지속성 탐지 에서는 권한 변경 기반 지속성을 다루는 권한 변경 기반 지속성 탐지를 다룹니다.
이전 편: 186. 권한 변경 이상 — root 권한 획득 경로 종합
📚 시리즈 전체 보기: 시스템 보안 · 취약점