시스템 보안 · 취약점 › H. 방어 회피 · 흔적 삭제 징후 · 14/50편 (전체 364/450)
학습 단계: 로그 삭제·변조
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
wtmp·utmp·lastlog는 로그인 기록을 담는 바이너리 로그입니다. who·last·lastlog 명령의 근거이며, 공격자는 이를 변조·삭제해 접속 흔적을 지웁니다. 텍스트가 아닌 바이너리라 전용 도구로 조작됩니다.
로그인 기록 로그 조작
utmp(/var/run/utmp): 현재 로그인 세션
wtmp(/var/log/wtmp): 로그인·로그아웃 이력(last)
lastlog(/var/log/lastlog): 계정별 마지막 로그인
조작: 삭제·비우기, 특정 세션 제거(utmpdump 편집),
안티포렌식 도구로 자기 세션만 제거
탐지: 파일 변경(FIM)·크기 급변·last 기록 끊김·중앙 비교
핵심은 "로그인 기록 바이너리의 변조·삭제"입니다. FIM으로 변경을 감시하고, last 기록 끊김·중앙 수집 인증 로그 비교로 탐지합니다.
last·who 결과가 왜곡됩니다.| 로그 | 역할 | 조작 |
|---|---|---|
| utmp | 현재 세션 | 자기 세션 제거 |
| wtmp | 로그인 이력 | last 왜곡·삭제 |
| lastlog | 마지막 로그인 | 기록 변조 |
| 전용 도구 | utmpdump·편집 | 선택 제거 |
| 교차 | secure 로그 | 변조 탐지 |
# wtmp·utmp·lastlog 조작 탐지 (분석 방법)
# 로그인 기록 로그 변경(FIM·auditd watch)
sudo ausearch -k log_tamper -i --start recent 2>/dev/null | grep -E 'wtmp|utmp|lastlog' | tail
# 로그 크기 급변·0(삭제·비우기)
ls -la /var/log/wtmp /var/run/utmp /var/log/lastlog 2>/dev/null
# last 기록 vs secure 로그 교차(불일치=변조)
last -a 2>/dev/null | head; echo '---'; sudo grep Accepted /var/log/secure 2>/dev/null | tail
$ (로그 변경) 정상 로그인·로그아웃만
$ (크기) 정상 증가
$ (last vs secure) 일치
로그인 기록 로그가 정상적으로 갱신되고, last 기록과 secure 인증 로그가 일치하는(변조 없음) 상태가 정상입니다.
$ (로그 변경)
comm="truncate" /var/log/wtmp (로그인 이력 비우기)
proctitle="utmpdump ... | 편집 | utmpdump -r" (세션 선택 제거)
$ (last vs secure)
last: 203.0.113.9 기록 없음
secure: Accepted from 203.0.113.9 존재
→ wtmp에서 공격자 세션만 제거(변조)
로그인 기록 로그 조작 분석입니다(가상의 예시).
[접속 흔적] 203.0.113.9 로그인
├ wtmp/utmp (바이너리) — 공격자가 변조
└ secure (텍스트) + 중앙 수집 — 변조 안 됨
↕ (교차 비교)
[탐지] last(wtmp 기반): 203.0.113.9 없음
secure/중앙: 203.0.113.9 로그인 존재
↓
= wtmp 변조로 last는 속였으나 secure·중앙엔 흔적 → 정탐
| 로그 | 변조 여부 | 역할 |
|---|---|---|
| wtmp/utmp | 변조됨 | last 왜곡 |
| secure | 그대로 | 교차 근거 |
| 중앙 수집 | 그대로 | 복원 |
여러 로그 소스 교차가 바이너리 로그 변조 탐지의 핵심입니다.
last·who가 왜곡됩니다.<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_h,defense_evasion,">
<rule id="107130" level="13">
<if_sid>107000</if_sid>
<field name="audit.file" type="pcre2">/var/log/wtmp|/var/run/utmp|/var/log/lastlog</field>
<field name="audit.comm" type="pcre2">^(rm|truncate|shred|utmpdump|dd)$</field>
<description>로그인 기록 로그(wtmp·utmp·lastlog) 변조·삭제</description>
<mitre><id>T1070.002</id><id>T1070.006</id></mitre>
</rule>
</group>
wtmp·utmp·lastlog를 FIM 감시 대상에 포함합니다. last와 secure/중앙 인증 로그를 교차 비교해 변조를 탐지합니다.
last 기록과 secure·중앙 인증 로그를 교차 비교해 보존합니다.| 로그 | 역할 |
|---|---|
| utmp | 현재 세션 |
| wtmp | 로그인 이력(last) |
| lastlog | 마지막 로그인 |
| 전용 도구 | utmpdump·편집 |
| 면접 포인트 | "로그인 기록은 바이너리 — last vs secure/중앙 교차로 변조 탐지" |
다음 편 365. 방어 회피·흔적 삭제 — 로그 전송 차단·중단 탐지 에서는 로그 전송 차단·중단을 다루는 로그 전송 차단·중단 탐지를 다룹니다.
이전 편: 363. 방어 회피·흔적 삭제 — syslog·journald 조작 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점