361. 방어 회피·흔적 삭제 — 셸 히스토리 삭제·비활성화 탐지

changseop lee·5일 전

시스템 보안 · 취약점

목록 보기
361/450

시스템 보안 · 취약점 › H. 방어 회피 · 흔적 삭제 징후 · 11/50편 (전체 361/450)
학습 단계: 로그 삭제·변조
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

셸 히스토리(~/.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 조작)는 환경 변수·셸 설정 변경으로 탐지합니다.

2. 왜 중요한가

  • 셸 히스토리는 실행 명령의 직접 증거라, 삭제·비활성화는 명확한 방어 회피입니다.
  • 삭제뿐 아니라 HISTFILE 조작·HISTSIZE=0 등 기록 비활성화도 흔적 제거입니다.
  • auditd execve 감사는 히스토리와 무관하게 명령을 기록해 보완 수단이 됩니다.

3. 핵심 명령어 / 설정

방식명령특징
파일 삭제rm ~/.bash_history사후 제거
세션 삭제history -c메모리 기록 삭제
비활성화unset HISTFILE기록 중단
/dev/null 링크ln -sf /dev/null영구 비활성
auditd 보완execve 감사히스토리 무관 기록

4. 실습 (실습 예시)

# 셸 히스토리 삭제·비활성화 탐지 (분석 방법)
# 히스토리 파일 삭제·조작
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 '\->'

5. 정상 상태

$ (히스토리 삭제·조작) (없음)
$ (HISTFILE 조작) (없음)
$ (심볼릭 링크) (일반 파일)

히스토리 파일이 일반 파일로 유지되고, 삭제·HISTFILE 조작·비활성화 흔적이 없는 상태가 정상입니다.

6. 이상 상태

$ (히스토리 삭제·조작)
comm="rm" ~/.bash_history
proctitle="history -c" (세션 기록 삭제)
$ (HISTFILE 조작)
export HISTFILE=/dev/null (기록 비활성화)
$ (심볼릭 링크)
~/.bash_history -> /dev/null (영구 비활성)
  • rm·history -c로 히스토리 삭제 → 명령 흔적 제거
  • HISTFILE=/dev/null로 기록 비활성화 → 선제적 흔적 차단
  • 히스토리 삭제·비활성화 → 방어 회피 → 정탐(auditd로 실제 명령 확인)

7. 로그 분석 (분석 방법)

셸 히스토리 흔적 제거 분석입니다(가상의 예시).

[공격자 세션] web01에서 명령 실행
   ↓ (흔적 차단)
export HISTFILE=/dev/null (기록 끄기 — 선제적)
   ↓ (명령 실행)
정찰·권한 상승 명령 (히스토리엔 안 남음)
   ↓ (세션 종료 전)
history -c; rm ~/.bash_history (잔여 삭제)
      ↕ (보완 탐지)
[auditd execve] 히스토리와 무관하게 모든 명령 기록
   = 히스토리를 꺼도 auditd에 명령이 남음 → 정탐
관찰해석
HISTFILE 조작기록 비활성화
history -c·rm흔적 삭제
auditd execve보완 기록

auditd execve 감사가 히스토리 비활성화를 무력화합니다.

8. SOC 관제 포인트

  • 셸 히스토리 삭제·비활성화(T1070.003)는 실행 명령 흔적을 제거하는 방어 회피입니다.
  • 삭제(rm·history -c)뿐 아니라 HISTFILE 조작·/dev/null 링크 등 비활성화도 포함됩니다.
  • auditd execve 감사가 히스토리와 무관하게 명령을 기록해 핵심 보완 수단이 됩니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 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 조작은 셸 환경 변수 감사로 포착합니다.

10. 대응 방법

  1. 초기 확인 — 히스토리 파일 삭제·HISTFILE 조작·비활성화를 확인합니다.
  2. 범위 확인 — rm·history -c·/dev/null 링크·환경 변수 변경을 확인합니다.
  3. 증거 확보 — 히스토리 조작 이벤트와 auditd execve 명령 기록을 보존합니다.
  4. 차단/조치 — 히스토리 흔적 제거 정탐이면 auditd로 실제 실행 명령 복원·분석을 진행합니다.
  5. 재발 방지 — 셸 히스토리 삭제·비활성화 탐지를 운영합니다.

11. 핵심 정리

방식명령
파일 삭제rm ~/.bash_history
세션 삭제history -c
비활성화unset HISTFILE
/dev/null 링크ln -sf /dev/null
면접 포인트"히스토리 삭제·비활성화는 명령 흔적 제거 — auditd execve가 무력화"

12. 다음 편 예고

다음 편 362. 방어 회피·흔적 삭제 — auditd 감사 로그 조작 탐지 에서는 auditd 감사 로그 조작을 다루는 auditd 감사 로그 조작 탐지를 다룹니다.


이전 편: 360. 방어 회피·흔적 삭제 — 로그 변조·선택적 삭제 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글