본문으로 건너뛰기

안티포렌식 — 왜 지우고 무엇이 남는가 ​

기록을 없애려는 이유는 SS를 대비해서다. 그런데 없애는 행위 자체가 또 다른 기록을 만든다. 아래는 지우는 방법이 아니라 지운 자리에 남는 공백을 읽는 법이다.

왜 지우려 하나 ​

유저모드 치트는 실행·파일 흔적을 많이 남긴다. 검사자가 Prefetch·USN·BAM을 본다는 사실이 알려진 뒤로 동기는 단순해졌다.

  • 실행 후보를 목록에서 빼기
  • 삭제나 교체를 "원래 없던 것"처럼 보이기
  • 스캐너가 디스크 시그니처를 못 찾게 하기
  • 의심 파일을 정상 파일처럼 위장하기

지우면 남는 것 ​

대상시도가 남기는 것카드
Prefetch.pf DELETE / 읽기전용, EnablePrefetcher=0R3-PF, R3-AF
USNApplication 3079, 저널 생성 시각 > 부팅 시각(CheckDeletedUSN)R3-USN
이벤트1102 Security, 104 SystemR3-AF
BAM키 공백. 미실행과 구분 필요R3-BAM
휴지통$Recycle.Bin 시각이 freeze 시점과 맞음R3-AF
이벤트 채널채널이 비활성 상태라는 사실 자체, 비기본 로그 경로R3-AF
명령 히스토리파일 공백·부분 공백, 저장 설정 변경, 파일 권한(ACL) 거부R3-AF
셸·앱 기록RunMRU·Recent·앱 로그의 공백 또는 새 생성시각R3-REC, R3-AF
파일 교체USN DELETE 직후 같은 이름 CREATE, 현재 파일 생성 시각 > PF 마지막 실행 시각R3-USN, R3-SIG
Defender1013(보호 기록 삭제), 5001(실시간 보호 꺼짐), 5007(예외 추가를 포함한 설정 변경), 예외 레지스트리 값R3-AF
볼륨 섀도 복사본vssadmin list shadows에 남은 목록, 삭제 도구(vssadmin.exe·wmic.exe·PowerShell)의 실행 흔적R3-AF

이름과 위장으로 숨기기 ​

파일을 지우는 대신 정상 파일처럼 보이게 만드는 부류다.

기법하는 일남는 것대응
확장자 위장.exe를 .jpg·.txt로 바꾼다Prefetch는 실제 실행 파일만 기록, USN RENAME.pf와 USN 파일명 대조. "그림 파일인데 Prefetch가 있다"는 모순
유니코드·경로 위장RLO·동형문자·공백으로 이름을 속인다USN에 원래 유니코드 경로가 남음, 바이트 대조 시 다른 이름파서로 원본 경로 확인, hex 뷰로 바이트 비교
ADS(대체 데이터 스트림)파일 뒤에 데이터를 숨긴다USN에 :$DATA 스트림 변경, dir /r·streams로 열거폴더 크기와 파일 크기 불일치, ADS 열거 도구
파일 속성·읽기전용.pf나 로그를 읽기전용으로 건다USN BASIC_INFO_CHANGE, attrib 명령 기록USN에서 속성 변경 플래그 확인
hex·바이너리 교체파일 안의 문자열을 바꿔 스캐너 시그니처를 피한다파일 해시가 공식 배포본과 다름, 서명이 깨짐해시 비교, 서명 검증

이 흔적들에도 정상 설명이 있다. ADS는 정상 프로그램도 쓰고(Zone.Identifier), 읽기전용은 정리 도구나 사용자 습관일 수 있다. 한 가지만 보지 말고 실행 흔적과 교차한다.

삭제와 교체 ​

기법하는 일남는 것대응
삭제파일을 지운다USN DELETE, Prefetch·BAM 잔여저널·레지스트리 교차
교체지우고 같은 이름으로 다시 쓴다USN DELETE→CREATE, 현재 파일 생성 시각 > PF 마지막 실행 시각시각 불일치
휴지통삭제 후 휴지통에 두거나, "즉시 삭제"로 설정해 아예 거치지 않게 한다$Recycle.Bin 메타데이터에 원본 경로와 삭제 시각. 즉시 삭제 설정은 레지스트리 값으로 남고, 휴지통이 비어 있어도 USN DELETE는 그대로다휴지통 파서로 원본 복원, 휴지통 설정 값 확인
타임스탬프 조작파일의 생성·수정 시각을 바꾼다(.pf의 LastWriteTime 포함)USN에 실제 변경 시각이 남아 속성과 불일치, $SI 조작 흔적저널 시각 vs 파일 속성 비교
스테가노·숨김 내용정상 파일 안에 데이터를 숨긴다파일 크기·엔트로피 이상, 추출 도구의 실행 흔적파일 크기 베이스라인 대조, 실행 흔적

파일이 지워져도 "지워졌다"는 기록은 남는다. 그 기록을 지우면 또 다른 기록이 생긴다.

로그와 저널을 지울 때 ​

로그가 있는가보다 로그가 손대지 않았는가가 먼저다. 채널이 활성 상태인가, 저장 경로가 기본인가, 권한이 기본인가, 이벤트 순서와 시각이 맞는가, 공백이 어디 있는가. 이 무결성이 로그의 내용보다 먼저다.

기법하는 일남는 것대응
이벤트 로그 삭제Security·System 로그를 지운다1102 Security, 104 System 이벤트삭제 이벤트 자체가 신호
USN 저널 삭제·재생성저널을 지우고 다시 만든다저널 생성 시각 > 부팅 시각, Application 3079fsutil로 저널 상태 확인, 부팅 시각과 비교
Prefetch 삭제·억제.pf를 지우거나 SysMain을 끈다Prefetch 공백 + SysMain ON/서비스 상태, EnablePrefetcher 레지스트리Prefetch 폴더가 비었는데 서비스는 켜져 있으면 신호
.pf 내용 비우기.pf를 지우지 않고 파일 안의 내용만 지운다파일은 있는데 내용이 빈다. USN에 DATA_TRUNCATION(내용을 잘라낸 변경 플래그), 파일 시각과 내부에 기록된 실행 시각의 불일치파서로 연 .pf가 공백인지 확인, 저널 변경 플래그
BAM 정리BAM 키를 지운다. 수동으로 지우려면 먼저 키 권한을 바꿔야 한다BAM 공백 + 대상 키의 권한 변경(기본에 없는 ACL 항목), regedit 실행 시점. 그러나 미실행과 구분이 어렵다다른 실행 축(PF·USN·4688)과 교차, 키 권한 화면
BAM 시각 편집삭제 대신 실행 시각 값만 바꾸는 도구를 쓴다BAM의 시각과 Prefetch·USN의 시각이 어긋난다. 편집 도구 자체의 실행 흔적축 간 시각 불일치, 도구 실행 기록

뷰어의 날짜·시간 열을 숨기는 시도도 있다. 보기 설정만 바뀔 뿐 로그 파일은 그대로라 실효는 없지만, 시도 자체는 태도의 신호다.

명령 기록을 지울 때 ​

PowerShell은 실행한 명령을 ConsoleHost_history.txt에 남긴다. 스크립트로 치트를 실행한 사용자의 다음 목표는 이 파일이다.

기법하는 일남는 것대응
저장 끄기·경로 변경Set-PSReadLineOption -HistorySavePath 같은 설정으로 저장을 끄거나 다른 경로로 돌린다$PROFILE의 설정 문자열, 히스토리 파일 부재·공백과 PowerShell 사용량의 불일치프로필의 설정 변경, 비기본 히스토리 경로
기록 회피 주석password 같은 단어가 든 줄을 PSReadLine이 기본으로 기록하지 않는 점을 써서, 명령 끝에 그런 주석을 붙인다파일은 있는데 세션 명령 일부만 빠진 패턴, 주석 문자열 자체히스토리의 불연속 구간, 해당 문자열 검색
히스토리 선택 삭제파일을 통째 지우지 않고 명령 일부만 뺀다세션의 특정 구간만 빠진 패턴다른 흔적의 실행 기록과 히스토리 내용의 불일치
다른 호스트 사용이 히스토리를 안 쓰는 호스트(powershell_ise, PowerShell 2.0 등)에서 실행한다. Windows 11 24H2는 2025년 8월 릴리스부터 2.0이 빠져 -Version 2를 붙여도 5.1로 실행된다대체 호스트 자체의 .pf, 호스트별 별개 히스토리 파일. 2.0이 빠진 빌드에서 2.0 엔진이 동작하면 재설치 흔적(ps2DLC.zip·loadGAC.ps1)이 있다powershell 외 호스트의 실행 흔적, 빌드에 맞지 않는 2.0 동작

셸과 앱의 기록을 지울 때 ​

Windows와 각 앱이 따로 남기는 기록이다. OS 로그가 온전해도 이쪽만 비어 있으면 같은 결론이다.

기법하는 일남는 것대응
RunMRU 삭제Win+R 실행 목록(RunMRU)의 값을 지운다최근 실행이 있는데 RunMRU가 비었거나 새 값만 있다레지스트리 값 목록과 실행 흔적의 불일치
최근 문서 끄기최근 문서를 안 남기는 정책을 켜거나 폴더 권한을 막는다정책 레지스트리 값 자체, 폴더의 비정상 권한shell:recent가 비었는데 다른 축엔 열람 흔적이 남는 불일치
게임 로그 삭제.minecraft의 logs 폴더나 계정·모드 json을 통째 지운다폴더가 통째 없거나 생성시각이 새 것, 있어야 할 json 부재, USN 삭제 체인폴더 시각과 USN 교차
원격 도구 기록 삭제AnyDesk 같은 원격 도구의 appdata를 지워 연결 기록과 식별자를 없앤다설정 파일만 골라 남은 선택적 삭제 패턴, trace·연결 로그 부재, 갑자기 바뀐 식별자남은 파일의 선택성, 이전 연결의 다른 축 잔재

안 지우고 동작을 바꿀 때 ​

기법하는 일남는 것대응
채널 비활성화이벤트 채널(로그 종류별 저장소)을 통째로 "사용 안 함"으로 둔다채널이 비활성 상태라는 사실 자체, 비활성 시점 이후의 로그 공백, 재활성화 흔적채널 등록정보의 활성 상태 확인
로그 경로 변경로그 파일의 저장 경로를 바꿨다가 되돌린다채널 등록정보의 비기본 경로, 경로 변경 구간의 타임라인 공백, 로그 디렉터리의 비표준 파일로그 경로가 기본인지 확인
서비스 스레드 억제SysMain·로깅 서비스를 멈추지 않고 스레드만 정지서비스 Running + Suspended 스레드, 기록은 끊김서비스 상태와 로그 공백의 불일치
서비스 비활성화기록을 남기는 서비스를 통째로 끈다System 7040/7036 서비스 상태 변경 이벤트, sc qc의 시작 유형, 비활성 상태 자체, sc config TabletInputService 계열 명령의 실행 흔적서비스 상태와 그 시점 이후의 기록 공백
기록 경로 ACL 거부Prefetch 폴더·히스토리 파일·스캐너가 여는 경로를 icacls …/deny 계열로 쓰기·읽기 거부정상 상태에 없는 Deny 항목, USN의 SECURITY_CHANGE, icacls.exe의 .pf폴더 보안 탭의 Deny 항목 확인
시계 조작부팅 시각으로 되돌리거나 시스템 시계를 바꾼다. 로그 경로 변경과 겹쳐 "예전에 지웠다"로 위장하기도 한다이벤트 4616(시스템 시간 변경)과 Kernel-General 1, USN이 부팅 시각에 몰림, 이벤트 순서와 타임스탬프 불일치이벤트 로그에서 4616, 타임라인 비일관성
설정 변경HVCI·IOMMU·감사 정책을 끈다설정 값 자체가 환경 노트에 남음, CodeIntegrity 이벤트msinfo32·코어 격리·감사 정책 확인
개인정보 설정 끄기활동 기록을 남기는 Windows 개인정보 설정을 끈다설정 값 자체(레지스트리), 기록이 갑자기 끊긴 시점설정 상태와 기록이 끊긴 지점의 대조

커널에서 저널 구조를 직접 고치려는 시도는 PatchGuard에 걸리거나 BSOD로 실패했다는 보고가 있다.

격리된 볼륨과 파일시스템 ​

기법하는 일남는 것대응
VHD·마운트 해제가상 디스크에서 작업하고 분리한다사라진 드라이브 문자, VHD 마운트 도구의 Prefetch·USN드라이브 문자 불일치, 마운트 도구 실행 흔적
FAT32·exFAT저널이 없는 파일시스템을 쓴다저널 자체가 없음. 파일시스템 타입이 기록에 남음볼륨 파일시스템 확인, 다른 축(PF·BAM·이벤트)에 의존
가상 머신치트나 정리 작업을 가상 머신 안에서 하거나, 게임을 게스트에서 돌리고 SS를 게스트에서 받아 호스트를 가린다게스트 안에서 한 일은 게스트 디스크에만 남는다. 호스트에는 가상화 프로그램의 실행 기록과 드라이버·가상 NIC가 남고, 게스트에는 가상 하드웨어가 보인다SS가 도는 쪽이 게스트인지 먼저 확인한다(시스템 정보와 장치 목록의 가상 하드웨어). 가상화 드라이버는 FP 베이스라인에 있다
Windows Sandbox일회용 샌드박스(Windows 10 1903 이상, Pro·Enterprise·Education)에서 실행하고 닫는다샌드박스는 별도 커널로 도는 일회용 가상 환경이라 닫으면 안의 파일·상태가 모두 지워지고, 안에서 실행한 것은 호스트 Prefetch·SRUM에 남지 않는다. 호스트에는 선택적 기능 활성 상태(Containers-DisposableClientVM), .wsb 구성 파일(공유한 HostFolder, LogonCommand), 샌드박스를 띄운 실행 기록이 남는다. 공유한 호스트 폴더의 변경은 호스트 파일시스템에서 일어난다기능 상태와 .wsb 파일 확인. Windows 11 24H2에서 스토어로 받는 새 버전은 wsb 명령을 제공해 wsb list로 실행 중인 샌드박스를 볼 수 있다. Home 에디션에는 이 기능이 없다

너무 깨끗함 ​

정상 PC도 깨끗할 수 있다. 새로 설치했거나, 프라이버시 도구를 쓰거나, 개발용 이미지인 경우다. 그래서 다음을 확인한다.

  1. 게임·런처·Discord의 Prefetch는 있는가? 그것들은 있는데 치트 후보만 없다면 이야기가 다르다.
  2. 제보된 매치 시각에 실행 후보가 전부 비어 있는가?
  3. 서비스나 프리페처가 의도적으로 꺼져 있는가?
  4. 이벤트 채널이 활성 상태이고 로그 경로·권한이 기본인가? 로그가 있는 것과 로그가 온전한 것은 다르다.
  5. 스캐너가 원래 조용한(Silent) 것인가, 아니면 히트를 지운 것인가?

공백을 Clean으로 메우지 않는다. 이런 경우 Insufficient가 정직한 라벨일 때가 많다.

공백을 읽는 법 ​

공백은 데이터다. 다만 읽는 법이 있다.

  • 공백 + 다른 축 정상 = 그 축만 비어 있다는 뜻이다. 왜 비었는지 기록한다.
  • 공백 + 삭제 이벤트 = 지워진 것이다. 안티포렌식 신호다.
  • 공백 + 로그 상태 변경 = 채널 비활성·경로 변경·권한 거부처럼 로그를 건드린 흔적이다. 내용보다 로그의 상태를 먼저 본다.
  • 공백 + 모든 축 공백 = 새 설치, 프라이버시 도구, 또는 매우 철저한 정리다. Insufficient가 맞는 결론이다.
  • 공백 없음 + 치트 없음 = 정상이다.

한 축의 공백은 Suspicious의 재료일 뿐 Confirmed의 근거가 아니다. 공백이 여러 축에 같은 시간 창에 모이고, 삭제 이벤트나 서비스 불일치가 동반될 때 Suspicious가 된다.

Community ​

Community. 아래는 커뮤니티 진술의 의역이며 규범이 아니다.

  • 저널을 지우면 티가 난다는 것을 알기 때문에, 아예 기록을 안 남기거나 시각만 속이려 한다는 이야기가 반복된다.
  • "디스크만 가리면 된다"고 시작했다가, 같은 글에서 BAM·ShimCache·Amcache가 남는다고 스스로 인정하는 경우가 있다.
  • Echo·Napse 같은 도구를 디스크 스캐너로 부르는데, 조용하면 메모리를 봐야 한다는 뜻이다.
  • 흔적 제거 도구가 상품으로 유통되지만, 그 도구 자체의 Prefetch가 남는다.
  • 서비스는 Running인데 스레드가 죽어 있으면 디스크를 안 건드리고 막은 것이라는 이야기가 있다.
  • 원격 도구의 appdata를 지우되 설정 파일 하나만 남기면 서버가 보는 식별자까지 리셋된다는 조언이 있다. 선택적으로 남은 파일과 갑자기 바뀐 식별자가 그대로 흔적이다.
  • 게임 폴더의 logs와 json을 통째 지우라는 조언이 반복된다. 폴더 생성시각이 새 것이면 그대로 드러난다.
  • 게임은 가상 머신 게스트에서 돌리고 치트는 호스트에서 돌려 SS를 게스트에서 받게 하는 우회가 가이드에 소개된다. 대응으로는 msinfo32의 시스템 모델·BIOS 버전, vmtoolsd.exe·VBoxService.exe 같은 게스트 도구 프로세스를 보라고 안내한다.

흔한 실수 ​

  • "공백이 있으니 Confirmed"라고 결론 낸다.
  • 3079 하나만 보고 밴을 단정한다. 서버 정책은 서버의 몫이고, 루브릭은 교차를 요구한다.
  • "스캐너가 조용하니 Clean"이라고 닫는다. Silent는 Clean이 아니다.
  • 새 설치 PC를 "너무 깨끗하니 의심"으로 읽는다. 설치 시각을 먼저 본다.

Sources ​

Next ​