시스템 보안 · 취약점 › H. 방어 회피 · 흔적 삭제 징후 · 11/50편 (전체 361/450)
학습 단계: 로그 삭제·변조
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
셸 히스토리(~/.bash_history)는 공격자가 실행한 명령의 직접 증거입니다. 공격자는 이를 삭제하거나, 아예 기록을 비활성화해 명령 흔적을 남기지 않습니다. ATT&CK T1070.003(Clear Command History)에 해당합니다.
셸 히스토리 흔적 제거
삭제: rm ~/.bash_history, history -c
비우기: cat /dev/null > ~/.bash_history
비활성화: unset HISTFILE, export HISTSIZE=0
HISTFILE=/dev/null, set +o history
심볼릭 링크: ln -sf /dev/null ~/.bash_history
탐지: 히스토리 파일 삭제·HISTFILE 조작·셸 환경 변수 변경
핵심은 "히스토리를 지우거나 끄는 행위"입니다. 삭제는 auditd watch로, 비활성화(HISTFILE 조작)는 환경 변수·셸 설정 변경으로 탐지합니다.
| 방식 | 명령 | 특징 |
|---|---|---|
| 파일 삭제 | rm ~/.bash_history | 사후 제거 |
| 세션 삭제 | history -c | 메모리 기록 삭제 |
| 비활성화 | unset HISTFILE | 기록 중단 |
| /dev/null 링크 | ln -sf /dev/null | 영구 비활성 |
| auditd 보완 | execve 감사 | 히스토리 무관 기록 |
# 셸 히스토리 삭제·비활성화 탐지 (분석 방법)
# 히스토리 파일 삭제·조작
sudo ausearch -k log_tamper,cmd_hist -i --start recent 2>/dev/null | grep -E 'bash_history' | tail
# HISTFILE·HISTSIZE 조작(비활성화)
sudo ausearch -k proc_exec -i --start recent 2>/dev/null | grep -E 'HISTFILE|HISTSIZE=0|set \+o history|history -c' | tail
# /dev/null 심볼릭 링크
ls -la /home/*/.bash_history /root/.bash_history 2>/dev/null | grep -E '\->'
$ (히스토리 삭제·조작) (없음)
$ (HISTFILE 조작) (없음)
$ (심볼릭 링크) (일반 파일)
히스토리 파일이 일반 파일로 유지되고, 삭제·HISTFILE 조작·비활성화 흔적이 없는 상태가 정상입니다.
$ (히스토리 삭제·조작)
comm="rm" ~/.bash_history
proctitle="history -c" (세션 기록 삭제)
$ (HISTFILE 조작)
export HISTFILE=/dev/null (기록 비활성화)
$ (심볼릭 링크)
~/.bash_history -> /dev/null (영구 비활성)
셸 히스토리 흔적 제거 분석입니다(가상의 예시).
[공격자 세션] web01에서 명령 실행
↓ (흔적 차단)
export HISTFILE=/dev/null (기록 끄기 — 선제적)
↓ (명령 실행)
정찰·권한 상승 명령 (히스토리엔 안 남음)
↓ (세션 종료 전)
history -c; rm ~/.bash_history (잔여 삭제)
↕ (보완 탐지)
[auditd execve] 히스토리와 무관하게 모든 명령 기록
= 히스토리를 꺼도 auditd에 명령이 남음 → 정탐
| 관찰 | 해석 |
|---|---|
| HISTFILE 조작 | 기록 비활성화 |
| history -c·rm | 흔적 삭제 |
| auditd execve | 보완 기록 |
auditd execve 감사가 히스토리 비활성화를 무력화합니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_h,defense_evasion,">
<rule id="107100" level="12">
<if_sid>107000</if_sid>
<field name="audit.proctitle" type="pcre2">bash_history|HISTFILE=/dev/null|HISTSIZE=0|history\s+-c|set\s+\+o\s+history</field>
<description>셸 히스토리 삭제·비활성화(명령 흔적 제거)</description>
<mitre><id>T1070.003</id></mitre>
</rule>
</group>
auditd execve 감사를 활성화해 히스토리 비활성화와 무관하게 명령을 기록합니다. HISTFILE 조작은 셸 환경 변수 감사로 포착합니다.
| 방식 | 명령 |
|---|---|
| 파일 삭제 | rm ~/.bash_history |
| 세션 삭제 | history -c |
| 비활성화 | unset HISTFILE |
| /dev/null 링크 | ln -sf /dev/null |
| 면접 포인트 | "히스토리 삭제·비활성화는 명령 흔적 제거 — auditd execve가 무력화" |
다음 편 362. 방어 회피·흔적 삭제 — auditd 감사 로그 조작 탐지 에서는 auditd 감사 로그 조작을 다루는 auditd 감사 로그 조작 탐지를 다룹니다.
이전 편: 360. 방어 회피·흔적 삭제 — 로그 변조·선택적 삭제 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점