156. 권한 변경 이상 — chmod 동작 원리와 로그 흔적

changseop lee·6일 전

시스템 보안 · 취약점

목록 보기
156/450

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

선행 학습

1. 개념

chmod는 권한 변경의 대표 명령입니다. 로그를 정확히 해석하려면 chmod의 입력(8진수/기호 모드)과 그것이 남기는 시스템 콜·인자를 알아야 합니다.

chmod 입력 방식
 8진수: chmod 755 file / chmod 4755 file(SUID)
 기호:  chmod u+s file / chmod o+w file / chmod g-w file
 재귀:  chmod -R 777 dir (디렉터리 전체 — 위험)

auditd 기록
 syscall: chmod(90)/fchmod(91)/fchmodat(268)
 proctitle: 실제 명령줄(8진수/기호 그대로)
 PATH mode: 변경 대상의 이전 모드

로그에서 proctitle이 실제 입력(4755·u+s)을 보여주고, PATH의 mode가 변경 전 상태를 담습니다.

2. 왜 중요한가

  • 로그 해석이 정확해야 "완화인가 강화인가, SUID인가"를 판정할 수 있습니다. 8진수·기호 모드 모두 읽을 수 있어야 합니다.
  • chmod -R 777(재귀 완화)은 디렉터리 전체를 world-writable로 만들어 대규모 노출을 일으킵니다.
  • u+s(SUID)·o+w(world-writable)는 기호 모드라도 위험 판정 대상입니다.

3. 핵심 명령어 / 설정

chmod 입력의미위험
4755/u+sSUID 설정높음(상승)
2755/g+sSGID 설정높음
777/o+wworld-writable높음(변조)
-R 777재귀 완화높음(대규모)
755/u+x실행 권한(정상 범위)낮음

4. 실습 (실습 예시)

# chmod 로그 해석 (분석 방법)
# 권한 변경 중 위험 패턴 추출
sudo ausearch -k perm_change -i --start recent 2>/dev/null | grep -A3 'comm="chmod"' | grep -E 'proctitle|name=' | tail

# proctitle에서 SUID/world-writable/재귀 식별
sudo ausearch -k perm_change -i --start recent 2>/dev/null | grep -oE 'proctitle=chmod [^ ]+ ' | grep -E '4[0-7]{3}|u\+s|o\+w|777|-R'

5. 정상 상태

$ (chmod proctitle)
proctitle=chmod 755 /var/www/html/app.sh
proctitle=chmod 640 /etc/myapp/config

관리자의 chmod가 배포·설정 범위의 정상 권한(755·640)이고, SUID·world-writable·재귀 완화가 없는 상태가 정상입니다.

6. 이상 상태

$ (chmod proctitle)
proctitle=chmod 4755 /usr/bin/find         (SUID)
proctitle=chmod -R 777 /var/www            (재귀 world-writable)
proctitle=chmod o+w /etc/cron.d/backup     (설정 변조 경로)
  • 4755 find → SUID 상승 경로(D25)
  • -R 777 /var/www → 웹루트 전체 world-writable(대규모 변조·웹셸)
  • o+w cron.d → cron 설정 변조로 지속성·상승(D5·F영역)

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

chmod 로그 해석 예시입니다(가상의 예시 로그).

type=SYSCALL ... syscall=268 success=yes auid=devops uid=0 comm="chmod" key="perm_change"
type=PATH ... name="/usr/bin/find" nametype=NORMAL mode=0100755
type=PROCTITLE ... proctitle=chmod 4755 /usr/bin/find
필드해석
proctitlechmod 4755(SUID 설정)
PATH mode=0100755변경 전: 일반 파일 755
변경 후4755(SUID) — before/after(D42)
auid=devops uid=0devops가 root 권한으로

PATH의 mode는 변경 전 상태이고, proctitle로 변경 후 의도를 읽습니다.

8. SOC 관제 포인트

  • chmod 로그는 proctitle(입력)+PATH mode(이전 상태) 로 before/after를 읽습니다.
  • SUID(4xxx/u+s)·world-writable(o+w/777)·재귀(-R) 완화를 위험 패턴으로 봅니다.
  • 8진수와 기호 모드를 모두 해석해 위험을 판정합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_d,perm_change,">
  <rule id="103040" level="10">
    <if_sid>103000</if_sid>
    <field name="audit.proctitle" type="pcre2">chmod\s+.*(o\+w|777|-R\s+[0-7]*7[0-7]{2})</field>
    <description>world-writable 또는 재귀 권한 완화(chmod)</description>
    <mitre><id>T1222.002</id></mitre>
  </rule>
</group>

SUID 설정은 D02(103010), world-writable·재귀는 위 룰로 탐지합니다. proctitle 필드 추출은 wazuh-logtest로 확인합니다.

10. 대응 방법

  1. 초기 확인 — chmod 로그의 proctitle(입력)·PATH mode(이전)로 before/after와 위험을 확인합니다.
  2. 범위 확인 — 위험 변경(SUID·777·재귀)의 대상·주체·세션을 확인합니다.
  3. 증거 확보 — chmod audit 로그와 대상 파일 현재 권한을 보존합니다.
  4. 차단/조치 — 비인가 변경이면 권한 원복(기대값)·세션 종료를 진행합니다.
  5. 재발 방지 — chmod 위험 패턴 탐지를 운영합니다.

11. 핵심 정리

입력위험
4755/u+sSUID(상승)
777/o+wworld-writable(변조)
-R 777재귀 완화(대규모)
755/u+x정상 범위
면접 포인트"proctitle은 변경 후 입력, PATH mode는 변경 전 — 둘로 before/after"

12. 다음 편 예고

다음 편 157. 권한 변경 이상 — chown·chgrp 동작 원리와 로그 흔적 에서는 소유권 변경 명령인 chown·chgrp 동작 원리와 로그 흔적을 다룹니다.


이전 편: 155. 권한 변경 이상 — 권한 상승 경로와 권한 변경의 관계
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글