Linux 로그 경로 정리 · 44/50 · Part 5. 로그 관리와 무결성

선행 학습 → 43. Linux 로그 무결성 · 10. Linux 로그를 읽을 때 주의할 점 · 기초 26. sed 활용
이번 글 → 로그 삭제·변조 흔적 분석
이어서 → 45. 로그 보존 정책과 증거 보존

1. 들어가며

"로그가 비어 있다 → 공격자가 지웠다"는 가장 흔하고 가장 위험한 결론입니다. 로그 공백은 로테이션, 재부팅, 서비스 중단, 디스크 부족, 단순한 한가한 시간대 때문일 수도 있습니다. 이번 글은 삭제·변조를 가설로 세우고 증거로 검증하는 방법을 실습합니다.

핵심 요약

  • 판단 3요소: (1) 다른 소스에는 있다 · (2) 변조 행위 기록이 있다 · (3) 대안 가설이 배제된다
  • 교차 소스: 중앙 사본, journal, audit, wtmp/btmp, shell history, 파일 메타데이터
  • 결론 문장은 "무엇이, 어느 구간이, 어떤 근거로" 삭제되었는지 구체적으로 쓴다.

2. 핵심 개념

변조 기법 (T1070)남는 흔적확인 소스
특정 줄 삭제 (sed -i)파일 inode 변경(sed는 새 파일로 교체), 크기 감소audit EXECVE/PATH, stat, 중앙 사본
파일 비우기 (> file, truncate)크기 0, mtime 변경audit, stat
파일 삭제 (rm, shred)rsyslog가 열린 파일에 계속 기록(삭제된 inode)ls -l /proc/<rsyslog pid>/fd
저널 삭제 (--vacuum, rm *.journal)부팅 목록 축소--list-boots, audit
셸 히스토리 삭제.bash_history 없음/축소audit(rm), 파일 시각
로깅 중지서비스 stop 기록journal _PID=1, audit
wtmp/utmp 편집last 와 인증 로그 불일치secure/auth.log, audit USER_LOGIN

3. 로그 생성 구조

로그 삭제·변조 가설 검증 흐름

4. 실제 로그 경로

로컬:  /var/log/secure (또는 auth.log), /var/log/audit/audit.log, /var/log/journal/, /var/log/wtmp
       ~/.bash_history, /root/.bash_history
원격:  중앙 로그 서버 /var/log/remote/<host>/..., SIEM
상태:  /var/lib/logrotate/logrotate.status, /proc/<rsyslog pid>/fd

5. 명령어 실습

모든 비교는 수집한 사본으로 수행합니다(원본에 sed -i·vim 금지).

# 1) 로컬 vs 중앙: 로컬에 없는 줄
comm -13 <(sort local/secure) <(sort central/secure) | wc -l
comm -13 <(sort local/secure) <(sort central/secure) | awk '{print $1,$2,$3}' | sort | sed -n '1p;$p'   # 누락 구간

# 2) 변조 행위 기록 (audit)
ausearch -if audit.log -k log_tamper -i
ausearch -if audit.log -m EXECVE -i | grep -E 'sed|truncate|shred|rm .*log|history|vacuum'

# 3) 대안 가설 배제
cat logrotate.status | grep secure                      # 순환 시각
journalctl -D journal/ --list-boots                      # 재부팅
journalctl -D journal/ -u rsyslog -o short-iso | grep -Ei 'stop|start'   # 로깅 중단
df -h /var/log                                          # (라이브) 디스크 풀

# 4) 논리 모순 찾기: 로그인 기록 없는 sudo
grep 'sudo:' local/secure | awk '{print $6}' | sort -u     # sudo 사용자
grep 'Accepted' local/secure | awk '{print $9}' | sort -u  # 로그인 기록이 있는 사용자

# 5) (라이브) 삭제됐지만 열려 있는 로그 파일
ls -l /proc/$(pidof rsyslogd)/fd 2>/dev/null | grep deleted

6. 로그 예시

실제 실행 결과 — Rocky Linux 9.8 · root@rocky9-lab — 로컬 vs 중앙 사본 비교 (실습 시나리오 데이터)

위 이미지는 이 시리즈의 실습 시나리오 데이터(직접 작성한 가상 로그) 를 대상으로 Rocky Linux 9.8 실습 환경에서 실제로 실행한 비교 결과입니다. 시나리오: 공격자가 sed -i /203.0.113.45/d /var/log/secure 로 자신의 IP가 포함된 줄을 삭제, 중앙 로그 서버에는 전송된 사본이 남아 있음.

7. 로그 필드 분석

증거값의미
줄 수로컬 11 / 중앙 84로컬에서 73줄 누락
누락 구간09-20 02:13:05 ~ 02:15:07무차별 대입 + 로그인 성공 구간
로컬 모순sudo: deploy ... COMMAND=/bin/bash 는 있는데 deploy 로그인 기록 없음선택적 삭제 흔적
audit EXECVEsed -i /203.0.113.45/d /var/log/secure삭제 명령 그 자체
audit SYSCALLauid=deploy uid=root ses=12 tty=pts1탈취 계정 세션에서 root로 실행
대안 가설순환·재부팅·서비스 중단 기록 없음 (시나리오 조건)배제

결론 문장 예: "09-20 02:23:40 KST, deploy 계정(ses=12)으로 로그인한 사용자가 root 권한으로 sed 를 실행해 로컬 /var/log/secure 에서 203.0.113.45 관련 73줄(02:13:05~02:15:07)을 삭제했다. 근거: 중앙 사본 비교, audit log_tamper 레코드, 로컬 로그의 논리 모순."

8. 보안관점

단정하면 안 되는 경우확인 방법
새벽 시간 로그가 적음평소 같은 시간대 건수와 비교
로그 파일이 작아짐순환 시각 확인
특정 기간 전체 공백재부팅·rsyslog 중지·디스크 풀 확인
히스토리 파일 없음셸 설정(HISTFILE, HISTSIZE=0) 확인

9. SOC 관점

  • Detection: Wazuh 커스텀 룰 100210 (audit key log_tamper, level 12, MITRE T1070.002)로 실제 경보 발생을 확인했습니다(47편 wazuh-logtest 실측).
  • Investigation: 변조 확인 시 로컬 로그는 신뢰도 낮음으로 표시하고 중앙 사본을 1차 소스로 전환.
  • Response: 변조 행위 자체를 IOC·Incident 판정 근거에 포함.

10. 실습 체크리스트

[ ] 삭제·변조 기법 7가지와 흔적 매핑
[ ] 로컬 vs 중앙 사본 차이 추출 (comm)
[ ] audit 로 변조 명령·주체 확인
[ ] 대안 가설(순환·재부팅·중단·디스크) 배제
[ ] 로그 내부 논리 모순 찾기
[ ] 근거 3개를 포함한 결론 문장 작성

11. 핵심 정리

  • 로그 공백은 가설이며 결론이 아니다.
  • 다른 소스에 존재 + 변조 행위 기록 + 대안 가설 배제가 갖춰져야 삭제로 판단한다.
  • 중앙 사본은 삭제된 로그를 복원하는 가장 강력한 수단이다.
  • 로그 내부의 논리 모순(로그인 없는 sudo)도 좋은 단서다.
  • 결론은 시각·주체·대상·범위·근거를 갖춘 문장으로 쓴다.

12. 다음 편 연결

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

0개의 댓글