189. 권한 변경 이상 — auditd 권한 변경 이벤트(chmod/chown) 분석

changseop lee·7일 전

시스템 보안 · 취약점

목록 보기
189/450

시스템 보안 · 취약점 › D. 권한 변경 이상 징후 · 39/50편 (전체 189/450)
학습 단계: 권한 변경 감사·로그 분석
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

6단계는 권한 변경 로그의 분석·정규화·상관을 다룹니다. 첫 번째는 auditd 권한 변경 이벤트의 레코드 구조입니다. 하나의 chmod/chown은 여러 레코드로 쪼개져 기록되며, 이를 연결해야 완전한 맥락이 나옵니다.

하나의 권한 변경 = 여러 auditd 레코드
 SYSCALL:   syscall 번호·결과·auid·uid·euid·key·session
 PATH:      대상 파일·이전 mode·ouid/ogid(변경 전)
 PROCTITLE: 실제 명령줄(chmod 4755 ...)
 CWD:       실행 디렉터리(상대경로 해석)
 모두 같은 timestamp:serial(이벤트 ID)로 연결

ausearch가 자동으로 묶어주지만, 각 레코드의 역할을 알아야 "누가·무엇을·어떻게" 완전히 재구성됩니다.

2. 왜 중요한가

  • 하나의 변경이 여러 레코드로 나뉘므로, 연결해야 완전한 맥락(주체·대상·방법·이전상태)이 나옵니다.
  • PATH의 mode·ouid/ogid가 "변경 전" 상태라, before/after(D42) 분석의 기준입니다.
  • CWD는 상대경로(chmod 4755 x)를 절대경로로 해석하는 데 필요합니다.

3. 핵심 명령어 / 설정

레코드핵심 필드역할
SYSCALLsyscall,auid,euid,key,ses주체·결과
PATHname,mode,ouid,ogid대상·이전상태
PROCTITLEproctitle실제 명령
CWDcwd상대경로 해석
EXECVEa0,a1..인자(선택)

4. 실습 (실습 예시)

# 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

5. 정상 상태

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로 변경"이 완전히 재구성되는 상태입니다.

6. 이상 상태

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
  • CWD(/tmp)+PATH(.sh) → 절대경로 /tmp/.sh 재구성(비표준 경로)
  • PATH mode 0100755 → 이전 755, proctitle 4755 → SUID 설정
  • auid=devops, ses=88 → 주체·세션 식별 → 비표준 SUID 상승 → 정탐

7. 로그 분석 (분석 방법)

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

레코드를 연결하면 "누가·무엇을·어떻게·이전상태"가 한 맥락으로 완성됩니다.

8. SOC 관제 포인트

  • 하나의 권한 변경은 여러 auditd 레코드(SYSCALL·PATH·PROCTITLE·CWD)로 기록됩니다.
  • 레코드를 연결해야 주체·대상·방법·이전상태의 완전한 맥락이 나옵니다.
  • PATH의 mode·ouid/ogid는 변경 전 상태로, before/after(D42)의 기준입니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 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).

10. 대응 방법

  1. 초기 확인 — 하나의 이벤트를 레코드별(SYSCALL·PATH·PROCTITLE·CWD)로 연결해 재구성합니다.
  2. 범위 확인 — 주체(auid·ses)·대상(CWD+PATH)·방법(proctitle)·이전상태(mode/ouid)를 확인합니다.
  3. 증거 확보 — 연결된 전체 레코드를 이벤트 ID 기준으로 보존합니다.
  4. 차단/조치 — 재구성 결과로 정탐/오탐을 판정하고 후속(타임라인 D40)으로 넘깁니다.
  5. 재발 방지 — auditd 이벤트 레코드 연결 분석을 표준 절차로 운영합니다.

11. 핵심 정리

레코드역할
SYSCALL주체·결과·세션
PATH대상·이전상태(mode/ouid)
PROCTITLE실제 명령
CWD상대경로 해석
면접 포인트"한 chmod가 여러 레코드 — 연결해야 누가·무엇을·어떻게·이전상태 완성"

12. 다음 편 예고

다음 편 190. 권한 변경 이상 — 권한 변경 타임라인 작성 에서는 권한 변경 타임라인을 다루는 권한 변경 타임라인 작성을 다룹니다.


이전 편: 188. 권한 변경 이상 — 권한 변경 기반 지속성 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글