시스템 보안 · 취약점 › D. 권한 변경 이상 징후 · 39/50편 (전체 189/450)
학습 단계: 권한 변경 감사·로그 분석
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
6단계는 권한 변경 로그의 분석·정규화·상관을 다룹니다. 첫 번째는 auditd 권한 변경 이벤트의 레코드 구조입니다. 하나의 chmod/chown은 여러 레코드로 쪼개져 기록되며, 이를 연결해야 완전한 맥락이 나옵니다.
하나의 권한 변경 = 여러 auditd 레코드
SYSCALL: syscall 번호·결과·auid·uid·euid·key·session
PATH: 대상 파일·이전 mode·ouid/ogid(변경 전)
PROCTITLE: 실제 명령줄(chmod 4755 ...)
CWD: 실행 디렉터리(상대경로 해석)
모두 같은 timestamp:serial(이벤트 ID)로 연결
ausearch가 자동으로 묶어주지만, 각 레코드의 역할을 알아야 "누가·무엇을·어떻게" 완전히 재구성됩니다.
| 레코드 | 핵심 필드 | 역할 |
|---|---|---|
| SYSCALL | syscall,auid,euid,key,ses | 주체·결과 |
| PATH | name,mode,ouid,ogid | 대상·이전상태 |
| PROCTITLE | proctitle | 실제 명령 |
| CWD | cwd | 상대경로 해석 |
| EXECVE | a0,a1.. | 인자(선택) |
# auditd 권한 변경 이벤트 구조 분석 (분석 방법)
# 하나의 이벤트를 레코드별로 보기
sudo ausearch -k perm_change --start recent 2>/dev/null | tail -20
# 핵심 필드만 추출(주체·대상·명령)
sudo ausearch -k perm_change -i --start recent 2>/dev/null | grep -E 'type=(SYSCALL|PATH|PROCTITLE)' | grep -E 'auid=|name=|proctitle=' | tail
type=SYSCALL ... syscall=268 success=yes auid=admin1 euid=0 ses=42 key="perm_change"
type=CWD cwd="/var/www"
type=PATH name="app.sh" mode=0100644 ouid=48 ogid=48
type=PROCTITLE proctitle=chmod 755 app.sh
레코드가 모두 연결돼 "admin1이 /var/www/app.sh를 644→755로 변경"이 완전히 재구성되는 상태입니다.
type=SYSCALL ... syscall=268 success=yes auid=devops euid=0 ses=88 key="perm_suid"
type=CWD cwd="/tmp"
type=PATH name=".sh" mode=0100755 ouid=1002 ogid=1002
type=PROCTITLE proctitle=chmod 4755 .sh
auditd 이벤트 재구성 흐름입니다(가상의 예시).
[SYSCALL] 누가(auid=devops) 어떤 콜(chmod) 결과(success) 세션(88)
+
[CWD]+[PATH] 어디서+무엇을 → 절대경로·이전상태(mode/ouid)
+
[PROCTITLE] 어떻게(chmod 4755)
=
완전한 맥락: devops가 /tmp/.sh를 755→4755(SUID)로, 세션88에서
| 질문 | 레코드 |
|---|---|
| 누가 | SYSCALL auid |
| 무엇을 | CWD+PATH |
| 어떻게 | PROCTITLE |
| 이전상태 | PATH mode/ouid |
레코드를 연결하면 "누가·무엇을·어떻게·이전상태"가 한 맥락으로 완성됩니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_d,perm_change,">
<!-- auditd 권한 변경 콜 정규화(필드 추출) 전제 룰 -->
<rule id="103370" level="5">
<if_sid>103000</if_sid>
<field name="audit.syscall" type="pcre2">^(chmod|fchmod|fchmodat|chown|fchown|lchown|fchownat)$</field>
<description>권한 변경 시스템 콜 정규화(분석 기준)</description>
<mitre><id>T1222</id></mitre>
</rule>
</group>
Wazuh의 audit 디코더가 SYSCALL/PATH/PROCTITLE 필드를 자동 파싱합니다. 필드 추출은 wazuh-logtest로 검증합니다(D43).
| 레코드 | 역할 |
|---|---|
| SYSCALL | 주체·결과·세션 |
| PATH | 대상·이전상태(mode/ouid) |
| PROCTITLE | 실제 명령 |
| CWD | 상대경로 해석 |
| 면접 포인트 | "한 chmod가 여러 레코드 — 연결해야 누가·무엇을·어떻게·이전상태 완성" |
다음 편 190. 권한 변경 이상 — 권한 변경 타임라인 작성 에서는 권한 변경 타임라인을 다루는 권한 변경 타임라인 작성을 다룹니다.
이전 편: 188. 권한 변경 이상 — 권한 변경 기반 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점