Linux 로그 경로 정리 · 45/50 · Part 5. 로그 관리와 무결성
선행 학습 → 43. Linux 로그 무결성 · 44. 로그 삭제·변조 흔적 분석 · 20. Rocky Linux 로그 기반 초동조사
이번 글 → 로그 보존 정책과 증거 보존
이어서 → 46. Linux 로그를 SIEM으로 보내는 구조
Part 5의 마지막은 증거 보존입니다. 분석 결과가 아무리 정확해도, 증거가 어떻게 수집되고 보관됐는지 설명할 수 없으면 보고서의 신뢰도가 떨어집니다. 또한 보존 기간 정책이 짧으면 사고를 발견했을 때 이미 로그가 없습니다.
핵심 요약
- 보존 정책(retention) = 평소 얼마나 오래 로그를 남길까 / 증거 보존(preservation) = 사고 증거를 어떻게 봉인할까
- 절차: 원본 보존 → 수집 → 무결성 확인 → 분석본 생성 → 분석 → 타임라인 → IOC → 판정
- 원본 로그를
sed -i,vim,rm으로 직접 다루는 일은 없다.
| 요소 | 원칙 | 구현 |
|---|---|---|
| retention | 로컬·중앙·아카이브 단계별 기간 정의 | logrotate, journald, SIEM 인덱스 수명주기 |
| timestamp | 수집 시각·기준 시간대 기록 | date '+%F %T %Z' |
| 원본 보존 | 원본은 읽기만, 수집본은 쓰기 금지 | cp -a + chmod 0400 |
| 분석본 분리 | 분석은 복사본에서 | original/ ↔ work/ |
| 해시 | 수집 즉시 SHA-256 | SHA256SUMS 매니페스트 |
| 접근권한 | 최소 인원, 기록 | root 전용 디렉터리, 접근 로그 |
| Chain of Custody | 누가·언제·무엇을·어떻게 | 수집 기록서 |
보존 기간 예시(조직 정책에 따라 다름): 로컬 4~5주(logrotate 기본) → 중앙 SIEM 핫 스토리지 수개월 → 콜드 아카이브 1년 이상. 법·규제(예: 개인정보 처리 시스템 접속기록 보관 의무 등)가 요구하는 기간은 조직의 법무·컴플라이언스 기준을 따릅니다.

수집 대상 (Rocky) : /var/log/secure*, /var/log/cron*, /var/log/messages*, /var/log/audit/audit.log*
수집 대상 (Ubuntu) : /var/log/auth.log*, /var/log/syslog*, /var/log/audit/audit.log*
공통 : /var/log/journal/ (또는 journalctl -o export), /var/log/wtmp, /etc/passwd (UID 매핑용)
증거 저장 : /evidence/<case>/original/ (0400), /evidence/<case>/work/, /evidence/<case>/SHA256SUMS
실습에 사용한 수집 스크립트입니다. 원본 로그 경로는 읽기만 하고, 증거 디렉터리에만 씁니다.
#!/usr/bin/env bash
# collect.sh - 증거 보존: 원본 로그 수집 → 해시 → 읽기 전용 → 분석본 분리
set -euo pipefail
CASE=${1:-case-0920}; SRC=/lab/local/var/log; EV=/evidence/$CASE
mkdir -p "$EV/original" "$EV/work"
cp -a "$SRC/secure" "$SRC/cron" "$SRC/messages" "$SRC/audit/audit.log" "$EV/original/"
( cd "$EV/original" && sha256sum * > ../SHA256SUMS )
chmod 0400 "$EV/original/"*; chmod 0444 "$EV/SHA256SUMS"
cp "$EV/original/"* "$EV/work/" && chmod 0600 "$EV/work/"*
echo "[+] collected_at=$(TZ=Asia/Seoul date '+%F %T %Z') by=$(whoami) host=$(hostname)"
cat "$EV/SHA256SUMS"
( cd "$EV/original" && sha256sum -c ../SHA256SUMS )
ls -l "$EV/original"
실제 서버에서는 SRC=/var/log 로 바꾸고, 순환 파일(secure-*, audit.log.*)과 저널(journalctl -o export > journal.export 또는 /var/log/journal 복사), /etc/passwd 사본을 추가합니다. 증거는 가능한 한 외부 저장소(분석 서버, 읽기 전용 매체)로 옮깁니다.

위 이미지는 Rocky Linux 9.8 실습 환경에서 수집 스크립트를 실제로 실행한 결과입니다(수집 대상은 실습 시나리오 데이터).
| 출력 | 증거 보존 관점 의미 |
|---|---|
collected_at=... KST by=root host=... | 수집 시각·수집자·호스트 → Chain of Custody 기록 |
| 해시 4개 | 파일별 SHA-256 — 보고서에 그대로 기재 |
OK ×4 | 복사 직후 원본과 일치 확인 |
-r-------- | 수집본 읽기 전용 |
Sep 26 01:02 (UTC) vs 수집 시각 KST | cp -a 가 원본 mtime을 유지 — 원본 파일 시각이 보존됨 |
수집 기록서 템플릿
Case ID : case-0920
Host : web01 (10.0.0.12)
Collected by : <이름/계정> Collected at : 2026-09-26 10:03:32 KST
Method : collect.sh (cp -a + sha256sum), 대상 목록 첨부
Hash list : SHA256SUMS (파일 4개)
Storage : /evidence/case-0920 (root 0400) → 분석 서버 전송
Access log : <열람자 / 일시 / 목적>
| 올바른 보존 | 잘못된 보존 |
|---|---|
| 수집 즉시 해시 | 분석 후에 해시 |
| 원본·분석본 분리 | 원본에서 직접 grep > 결과 작업 중 실수로 덮어쓰기 |
| 수집 기록서 작성 | 누가 언제 수집했는지 불명 |
| 저널·audit 순환 파일까지 수집 | 현재 파일만 수집 |
[ ] retention 과 preservation 구분
[ ] 수집 대상 목록(순환·저널·passwd 포함) 작성
[ ] collect.sh 실행 및 해시 확인
[ ] 원본 0400 / 분석본 분리 확인
[ ] 수집 기록서 작성
[ ] 보존 기간 3단계(로컬·중앙·아카이브) 정책 설명
| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 44. 로그 삭제·변조 흔적 분석 |
| ▶ 다음 글 | 46. Linux 로그를 SIEM으로 보내는 구조 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |