Linux 시스템 보안 기초 · 43/50편

이 글은 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.

선행 학습

1. 들어가며

일반 로그가 '서비스가 남긴 메시지'라면, auditd는 '커널이 기록하는 행위 그 자체'입니다. 어떤 syscall이, 누구에 의해, 어떤 파일에 실행되었는지까지 남기죠. 침해 분석에서 가장 강력한 증거원입니다.

2. 핵심 개념

auditd 규칙의 핵심 요소:

  • watch(-w): 특정 파일/디렉터리 접근 감시 (예: -w /etc/shadow -p rwa)
  • syscall(-a): 특정 시스템 콜 감사 (예: execve, connect)
  • 필드 필터: auid, uid, arch 등으로 범위 지정
  • key(-k): 이벤트에 태그를 붙여 검색 용이하게

특히 auid(로그인 UID) 가 중요합니다. su/sudo로 root가 되어도 auid는 원래 로그인 사용자를 가리켜, '실제 누가 했는가'를 추적할 수 있습니다.

사용자 행위 (파일 열기/명령 실행)
        │ system call
        ▼
     Kernel
        │ audit 규칙 매칭
        ▼
     auditd
        │
        ▼
  /var/log/audit/audit.log  ── ausearch/aureport로 분석
        │
        ▼
     SIEM / Wazuh

3. 동작 원리

커널 감사 서브시스템은 규칙에 매칭되는 이벤트를 auditd로 보냅니다. execve 감사는 실행되는 모든 명령을, watch는 지정 파일 접근을 기록합니다. 각 이벤트에는 auid·uid·euid·pid·ppid·exe·key가 붙어 '누가(auid) 어떤 권한으로(euid) 무엇을(exe)' 했는지 재구성할 수 있습니다.

auid의 힘: 사용자가 로그인하면 PAM(12편)이 auid를 설정합니다. 이후 su로 root가 되어도 auid는 유지되어, root 뒤에 숨은 실제 사용자를 밝혀냅니다(45편). 단, 로그인 세션이 없는 컨텍스트에서는 auid가 unset입니다.

4. 명령어 실습

# 규칙 추가: shadow 접근 감시 + 사용자 명령 감사
sudo auditctl -w /etc/shadow -p rwa -k shadow_watch
sudo auditctl -a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=unset -k user_exec

# 현재 규칙 확인
sudo auditctl -l

# 키로 이벤트 검색(가독 출력)
sudo ausearch -k shadow_watch -i | tail

5. 실행 결과

이 시리즈 실습에서 실제로 규칙을 걸고 cat /etc/shadow를 포착한 결과입니다. (실제 캡처)

$ sudo auditctl -l
-w /etc/shadow -p rwa -k shadow_watch
-a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=-1 -F key=user_exec

$ sudo ausearch -k shadow_watch -i | tail
type=SYSCALL ... syscall=openat success=yes ... comm=cat exe=/usr/bin/cat key=shadow_watch
type=PATH ... name=/etc/shadow inode=... mode=file,640 ouid=root ogid=shadow

cat이 /etc/shadow를 연 사실이 syscall·경로·소유자와 함께 기록됩니다. 이것이 일반 로그에는 없는 auditd만의 정밀함입니다. (참고: 본 컨테이너의 su는 완전한 로그인 세션을 만들지 않아 일부 이벤트의 auid가 unset으로 남습니다 — 실제 서버에서는 로그인 세션의 auid가 채워집니다.)

6. 보안 관점 — 정상 사용 vs 악용

  • 정상: 필요한 감사 규칙이 로드되고 auditd가 동작.
  • 위험/침해 징후:
    • auditd 중지/규칙 삭제(anti-forensics)
    • shadow/sudoers 등 민감 파일 접근 이벤트
    • 일반 사용자(auid≥1000)의 execve 중 위험 명령

auditd는 강력한 만큼 규칙 설계가 중요합니다. 너무 넓으면 로그 폭증, 너무 좁으면 사각지대가 생깁니다. CIS/보안 표준 규칙셋(예: Neo23x0 auditd rules)을 기반으로 조정하는 것이 실무적입니다.

7. 탐지 방법

  • 민감 파일 watch(shadow/passwd/sudoers)
  • execve 감사로 명령 실행 추적
  • auditd 동작·규칙 상태 상시 확인
  • ausearch -k로 키 기반 신속 검색

8. SOC 관점 — SIEM · Wazuh · IOC

auditd는 EDR이 없는 환경에서 호스트 가시성의 핵심입니다. Wazuh는 auditd를 통합해 execve·파일 접근을 MITRE ATT&CK에 매핑하고, auid로 실제 행위자를 추적합니다. 이 시리즈 실습에서 걸어 둔 키(identity, priv_config, sshd_config, cron_persist, user_exec, user_connect)는 앞선 편들의 탐지 포인트(계정·권한·SSH·cron·네트워크)를 auditd로 통합한 것입니다.

9. 실습 체크리스트

[ ] watch/syscall 규칙 작성
[ ] auditctl -l로 규칙 확인
[ ] ausearch -k로 이벤트 검색
[ ] auid로 실제 행위자 추적
[ ] auditd 동작 상태 상시 점검

10. 핵심 정리

  • auditd는 syscall 단위로 '행위 그 자체'를 기록한다.
  • watch(파일)와 syscall(execve/connect) 규칙이 핵심이다.
  • auid는 su/sudo 뒤에 숨은 실제 사용자를 밝힌다.
  • auditd 중지·규칙 삭제는 anti-forensics 신호다.
  • 표준 규칙셋 기반으로 폭증과 사각지대를 조율한다.

11. 다음 편

다음 편에서는 44. 파일 접근 감사 를 다룹니다. auditd로 중요 파일 접근을 추적하는 구체적 감사 규칙을 봅니다.


본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.

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

0개의 댓글