Linux 로그 경로 정리 · 43/50 · Part 5. 로그 관리와 무결성
선행 학습 → 05. 로그 파일의 권한과 소유권 · 36. 원격 Syslog와 중앙 로그 서버 · 42. 로그 로테이션과 보안관제
이번 글 → Linux 로그 무결성
이어서 → 44. 로그 삭제·변조 흔적 분석
로그가 증거가 되려면 "기록된 이후 바뀌지 않았다" 를 보여줄 수 있어야 합니다. 이것이 무결성입니다. 공격자는 흔적을 지우려 하고(T1070), 분석가는 실수로 원본을 바꿀 수 있습니다. 두 위험 모두에 대비해야 합니다.
핵심 요약
- 무결성은 한 가지 기술이 아니라 계층이다: 접근통제 → 변경 감시 → 속성 보호 → 검증 → 원격 사본 → 불변 저장소
- 로컬 보호는 root가 탈취되면 무력화될 수 있다 → 원격 사본이 최종 방어선
- 수집 시 SHA-256 매니페스트를 만들고, 분석은 사본으로 한다.
| 계층 | 수단 | 막는 것 | 한계 |
|---|---|---|---|
| 접근통제 | 0600/0640, 그룹 최소화 | 일반 사용자 변조 | root 무력 |
| 변경 감시 | auditd, FIM | "누가" 기록 | auditd 중지 가능 |
| 속성 보호 | chattr +a (append-only) | 덮어쓰기·삭제 | root가 chattr -a 가능, logrotate와 충돌 |
| 검증 | sha256sum, journal Seal | 변조 검출 | 사전 해시가 있어야 비교 가능 |
| 원격 사본 | rsyslog → 중앙 서버 | 로컬 삭제 대비 | 전송 전 구간 |
| 불변 저장소 | WORM, Object Lock, 분리된 SIEM | 관리자 삭제 | 비용·설계 |

보호 대상 : /var/log/secure|auth.log, /var/log/audit/, /var/log/journal/
감시 설정 : /etc/audit/rules.d/*.rules (log_tamper), Wazuh FIM(/var/ossec/etc/ossec.conf <syscheck>)
원격 전송 : /etc/rsyslog.d/90-forward.conf
수집 증거 : /evidence/<case>/original/, /evidence/<case>/SHA256SUMS
# 1) 권한 점검
stat -c '%a %U:%G %n' /var/log/secure /var/log/auth.log /var/log/audit/audit.log 2>/dev/null
# 2) 속성 확인 (append-only 여부)
lsattr /var/log/secure /var/log/audit/audit.log 2>/dev/null
# 3) 저널 무결성 검사
journalctl --verify 2>&1 | tail -3
# 4) 수집본 해시 매니페스트 작성 / 검증 (45편 collect.sh 에서 자동화)
cd /evidence/case-0920/original && sha256sum * > ../SHA256SUMS
sha256sum -c ../SHA256SUMS
# 5) 로컬 vs 중앙 사본 비교 (44편)
comm -13 <(sort local/secure) <(sort central/secure) | wc -l
chattr +a 적용 시 logrotate의 이름 변경이 실패하므로, 적용한다면 prerotate 에서 해제·postrotate 에서 재설정하는 방식으로 운영 영향을 검토해야 합니다. 이 글에서는 원리만 소개하고 운영 서버 적용은 권장하지 않습니다.

위 이미지는 Rocky Linux 9.8 실습 환경에서 실제로 실행한 해시 검증 결과입니다. 45편의 수집 스크립트로 만든 증거 디렉터리에서, 분석본(work) 에만 한 줄을 추가했을 때 해시 검증이 FAILED 로 바뀌고, 원본(original) 은 그대로 OK 인 것을 확인했습니다.
| 출력 | 해석 |
|---|---|
| 두 파일 해시 동일 | 분석본이 원본의 정확한 사본 |
secure: FAILED | 한 바이트라도 바뀌면 해시가 달라진다 |
ORIGINAL_OK | 원본은 변경 없음 — 분석본 분리의 이유 |
400 root | 원본은 읽기 전용(0400) |
+0000 | 컨테이너 시간대 UTC — 기록 시 시간대 명시 필요 |
| 정상 | 의심 |
|---|---|
| 해시 매니페스트 검증 OK | 수집 후 해시 불일치 → 수집 체인 조사 |
journalctl --verify PASS | FAIL (파일 손상 또는 조작) |
| 로컬·중앙 사본 일치 | 로컬에만 누락 구간 → 로컬 변조 |
| 로그 권한 기본값 | 권한 완화 흔적 |
해시는 "변조되지 않았음"을 증명할 뿐 "처음부터 진실"임을 증명하지 않습니다. 공격자가 수집 이전에 로그를 바꿨다면 해시는 그 바뀐 상태를 봉인할 뿐입니다. 그래서 원격 사본과의 비교가 필요합니다.
log_tamper), rsyslog/auditd 중지, 로그 유입량 급감.[ ] 무결성 6계층 설명
[ ] 로그 파일 권한·속성 점검
[ ] journalctl --verify 실행
[ ] SHA-256 매니페스트 작성·검증
[ ] 분석본 변경 시 FAILED 확인
[ ] 해시의 한계와 원격 사본 필요성 설명
| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 42. 로그 로테이션과 보안관제 |
| ▶ 다음 글 | 44. 로그 삭제·변조 흔적 분석 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |