Linux 로그 경로 정리 · 40/50 · Part 4. journald / rsyslog / auditd

선행 학습 → 39. auditd로 execve 추적 · 파일 · 권한 · 사용자 관리 시리즈
이번 글 → auditd로 중요 파일 접근 추적
이어서 → 41. logrotate 이해

1. 들어가며

공격자가 노리는 파일은 정해져 있습니다. 계정(/etc/passwd), 비밀번호 해시(/etc/shadow), 권한(/etc/sudoers), 원격 접속 설정(/etc/ssh/sshd_config), 지속성(cron, systemd), 그리고 흔적(로그). 이 파일들에 감시 규칙을 걸면 "누가, 언제, 어떤 프로그램으로 읽거나 바꿨는지"가 남습니다.

핵심 요약

  • -w <path> -p <rwxa> -k <key> : r 읽기 · w 쓰기 · x 실행 · a 속성 변경
  • 읽기(r) 감시는 /etc/shadow 처럼 읽는 것 자체가 의심스러운 파일에만
  • 로그 디렉터리 감시는 auid!=unset 조건으로 rsyslog 같은 데몬 쓰기를 제외해야 쓸 만하다.

2. 핵심 개념

대상규칙 예keyMITRE
계정-w /etc/passwd -p wa, -w /etc/group -p waidentityT1136
해시-w /etc/shadow -p rwashadowT1003.008
권한-w /etc/sudoers -p wa, -w /etc/sudoers.d/ -p wapriv_escT1548.003
SSH-w /etc/ssh/sshd_config -p wa, -w /root/.ssh/ -p wasshd_confT1098.004
cron-w /etc/crontab -p wa, -w /etc/cron.d/ -p wa, -w /var/spool/cron/ -p wacron_modT1053.003
systemd-w /etc/systemd/system/ -p wasystemd_modT1543.002
감사 설정-w /etc/audit/ -p waaudit_confT1562.001
로그-a always,exit -F dir=/var/log -F perm=wa -F auid>=1000 -F auid!=unsetlog_tamperT1070.002

3. 로그 생성 구조

중요 파일 접근 감사(watch)

프로세스 (auid=1001, uid=0) ── openat("/etc/shadow", O_RDONLY) / rename / write / chmod
                                        ↓
                        kernel audit: 감시 경로·권한 일치? (-w /etc/shadow -p rwa)
                                        ↓ 일치
      SYSCALL(openat, key=shadow, exe=/usr/bin/cat) + PATH(name=/etc/shadow, nametype=NORMAL) + CWD + PROCTITLE
                                        ↓
                             /var/log/audit/audit.log

편집기 주의: vi 는 임시 파일을 만들고 rename으로 교체하므로 PATH 레코드에 nametype=DELETE/CREATE 가 나타납니다. "쓰기"가 파일 교체 형태로 남는 것을 이해해야 합니다.

4. 실제 로그 경로

/etc/audit/rules.d/60-files.rules     파일 감시 규칙 (영구)
/var/log/audit/audit.log              기록

5. 명령어 실습

# 규칙 파일 (변경관리 승인 후)
cat <<'EOF' | sudo tee /etc/audit/rules.d/60-files.rules
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p rwa -k shadow
-w /etc/sudoers -p wa -k priv_esc
-w /etc/sudoers.d/ -p wa -k priv_esc
-w /etc/ssh/sshd_config -p wa -k sshd_conf
-w /etc/crontab -p wa -k cron_mod
-w /etc/cron.d/ -p wa -k cron_mod
-w /var/spool/cron/ -p wa -k cron_mod
-w /etc/systemd/system/ -p wa -k systemd_mod
-w /etc/audit/ -p wa -k audit_conf
-a always,exit -F dir=/var/log -F perm=wa -F auid>=1000 -F auid!=unset -k log_tamper
EOF
sudo augenrules --load && sudo auditctl -l | wc -l
# (Ubuntu 는 /var/spool/cron/crontabs/ 경로)

# 조회
ausearch -k shadow -ts today -i | grep -E '^type=(SYSCALL|PATH)' | grep -oE 'auid=[^ ]+|exe=[^ ]+|name=[^ ]+'
ausearch -k identity,priv_esc,sshd_conf -ts today -i     # 여러 key 는 쉼표 대신 개별 조회 권장
aureport -f -i --summary -ts today | head                # 파일별 요약

ausearch -k 는 하나의 key 값을 받습니다. 여러 key는 개별로 조회하거나 aureport -k 로 먼저 분포를 봅니다.

6. 로그 예시

실제 실행 결과 — Rocky Linux 9.8 · root@rocky9-lab — 파일 접근 감사 규칙

위 이미지는 Rocky Linux 9.8 실습 환경의 실제 실행 결과입니다.

아래는 판단 설명용 예시 출력(ausearch -i 형식)입니다.

[예시 출력]
type=PATH msg=audit(09/20/26 02:17:40.101:2061) : item=0 name=/etc/shadow inode=1311 nametype=NORMAL ...
type=SYSCALL msg=audit(09/20/26 02:17:40.101:2061) : syscall=openat success=yes ... auid=deploy uid=root comm=cat exe=/usr/bin/cat key=shadow
type=PATH msg=audit(09/20/26 02:18:02.330:2064) : item=1 name=/etc/ssh/sshd_config nametype=CREATE ...
type=SYSCALL msg=audit(09/20/26 02:18:02.330:2064) : syscall=rename success=yes ... auid=deploy uid=root comm=sed exe=/usr/bin/sed key=sshd_conf

7. 로그 필드 분석

이벤트필드해석
shadow 읽기exe=/usr/bin/cat, auid=deploy해시 덤프 시도 (오프라인 크래킹 준비)
sshd_config 교체syscall=rename, comm=sed, nametype=CREATEsed -i 로 설정 변경 (예: PermitRootLogin yes)
정상 비교exe=/usr/sbin/useradd + identity계정 관리 도구에 의한 변경

8. 보안관점

정상의심
passwd/useradd 가 /etc/shadow 수정cat/cp/python 이 /etc/shadow 읽기
변경관리 시간 sshd_config 수정원격 세션 중 수정 + sshd 재시작
패키지 설치로 /etc/systemd/system 변경로그인 사용자 auid로 유닛 생성
로그 디렉터리 쓰기 없음(auid 조건)sed/truncate/shred 가 /var/log 쓰기

9. SOC 관점

  • Wazuh 연계: audit key별 커스텀 룰(level 10~12)을 만들고, FIM(syscheck)의 파일 해시 변화와 교차한다. FIM은 "무엇이 바뀌었나", audit은 "누가 바꿨나"를 답한다.
  • Investigation: 파일 이벤트의 ses → 같은 세션의 execve 목록(39편) → 인증 로그(18편).
  • Response: 변조된 설정은 원복 전 사본·해시 보존.

10. 실습 체크리스트

[ ] 감시 대상 8개 범주와 key 설계
[ ] -p r / w / x / a 의미 구분
[ ] 로그 디렉터리 감시에 auid 조건 적용
[ ] 편집기 rename 동작과 nametype 이해
[ ] ausearch -k / aureport -f 조회
[ ] FIM(무엇) + audit(누가) 교차 설명

11. 핵심 정리

  • 공격 대상 파일은 계정·해시·권한·SSH·cron·systemd·감사 설정·로그로 정해져 있다.
  • -w 감시는 파일 단위, -a ... -F dir= 는 조건 조합이 가능하다.
  • 읽기 감시는 /etc/shadow 처럼 읽는 것 자체가 의심스러운 파일에만 건다.
  • 로그 디렉터리 감시는 auid 조건으로 데몬 쓰기를 제외한다.
  • FIM과 audit을 함께 써야 "무엇이 바뀌었고 누가 바꿨는지"를 모두 증명할 수 있다.

12. 다음 편 연결

구분글
◀ 이전 글39. auditd로 execve 추적
▶ 다음 글41. logrotate 이해
시리즈Linux 로그 경로 정리 전체 보기
선행 시리즈리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글