빠른 시작 (30~45분)
지금 바로 검사에 들어가야 할 때 따라가는 30~45분짜리 흐름이다. 동의 확인에서 시작해 스캐너(단서), Ring3 코어 축, 안티포렌식, 환경 노트를 거쳐 소결과 증거 패키지로 닫는다. 도구가 없어도 수동 Ring3만으로 절차는 성립한다.
각 단계의 정상·이상 판별, 도구별 화면, 캡처 항목은 표준 절차와 축별 카드에 있다.
시작 전
아래 아홉 가지가 갖춰져 있어야 검사가 성립한다. 하나라도 빠지면 진행이 불가하거나, 진행하려면 그 사유를 기록해야 한다.
- 동의와 범위를 다시 확인한다. 어디까지 볼지(디스크 범위, 프로세스 목록, 메모리 덤프 허용 여부), 기록·녹화를 할지 정한다.
- 제보를 고정한다. 어떤 매치·시각·행위가 의심인지를 문장으로 적어 둔다. 나중에 타임라인을 정렬할 제보 시간대가 된다.
- 도구 정책을 확인한다. 조직·서버가 승인한 스캐너와 파서만 쓴다. 허용되지 않은 도구의 결과는 증거로 쓰기 어렵다. 도구마다 실행 시각을 적어 도구가 남긴 흔적과 대상자의 흔적을 가른다.
- 증거 루트 폴더를 만든다(증거 패키지 템플릿 복사). 세션 중간에 만들면 초반 산출물이 흩어진다.
- 시계와 타임존을 기록한다. 대상 PC의 로컬 시각, 부팅 시각, 제보 시각의 차이를 메모한다. 대상자를 호출한 시각과 원격 접속한 시각도 적는다. 두 시각 사이는 정리 시도가 들어갈 수 있는 구간이다.
- 몇 가지를 묻는다. 최근 재부팅·업데이트 여부, 2PC·캡처 카드·스트리밍 사용 여부는 직접 질문해야 한다.
- 녹화를 시작한다. 검사 도구를 켜기 전에 시작해 끝까지 녹화한다. 원본은 편집하지 않고 보관하며 해시를 남긴다.
- 검사 대상을 확인한다. msinfo32의 시스템 모델로 VM 게스트인지 보고, PC방·공용 PC인지 확인한다. 둘 다 해석 기준을 바꾼다.
- T+0 스냅샷을 찍는다. 스캐너보다 먼저 프로세스 트리, 서비스 시작 시각, Prefetch 폴더 목록을 캡처한다. 검사 도구를 실행하면 그 도구의
.pf가 새로 생기기 때문이다.
스캐너를 쓰지 않기로 했다면 그 사실만 기록하고 수동 Ring3로 진행한다.
타임라인
시각은 표준 절차의 타임라인과 같다. 각 단계는 산출물이 있어야 완료다. 산출물이 없으면 그 축은 본 것이 아니라 지나친 것이다.
| 시각 | 단계 | 남아야 하는 산출물 | 축을 쓸 수 없을 때 |
|---|---|---|---|
| T+0 | 오리엔테이션 | 빌드·시계·타임존·부팅 시각·호출·접속 시각·진술·동의 범위 메타 기록, 검사 대상 확인(VM·PC방), T+0 스냅샷, 로그 무결성 확인, 증거 폴더 | 이 단계가 없으면 전체가 흔들린다 |
| T+5 | 스캐너(선택) | 스캐너 전체 export(히트만 발췌하지 않는다). 히트 목록은 단서로만 | 미사용 사유 기록 후 수동 축으로 |
| T+10 | Prefetch | 폴더 정렬 캡처 + SysMain 서비스 상태 → 실행·타임라인 후보 | SysMain off면 "비활성"으로 적고 BAM·USN으로 |
| T+14 | USN 파일 저널 | 시간 창 필터 export → 생성·삭제·이름변경 후보 | "비어 있음" 주장은 도구 2종으로 확인. 안 되면 Insufficient |
| T+18 | BAM·레지스트리 실행 흔적 | BAM·실행 레지스트리 export → 실행 주장 교차 | 빌드 미지원(1709 이전)이면 미지원 사유를 기록 |
| T+22 | Recent·LNK·점프리스트 | Recent·LNK 정렬 캡처 → 열람·경로 힌트 | 공유 계정·클라우드 동기화 가능성을 같이 적는다 |
| T+25 | 서명·경로 위생 | 의심 파일의 서명 탭·해시·경로 캡처 | 파일이 이미 삭제됐으면 USN 삭제 흔적으로 대체 |
| T+28 | 프로세스·모듈 | 프로세스 트리 + 모듈 목록 캡처 → 로드 모듈·주입 의심 | 사후 수집 세션이면 라이브 축 자체가 없다. 기록한다 |
| T+30 | 메모리(선택) | 덤프 해시 + 도구 버전 + 플러그인 출력(분기 조건 충족 시에만) | 분기 미충족이면 스킵과 이유 한 줄 |
| T+33 | 안티포렌식 패스 | 체크리스트 결과(공백·와이프 패턴 포함). 호출·접속 사이 구간을 먼저 본다 | 건너뛰면 "너무 깨끗함"을 못 읽는다 |
| T+36 | 매크로 | SW 바인딩 캡처 + 온보드(onboard, 입력 장치 내장 메모리) 2회 테스트 기록 | 장치가 없거나 정책상 불가면 기록 |
| T+38 | 환경 노트 | 환경 스크린샷(HVCI·IOMMU·Secure Boot 상태), VBS·플랫폼 요구 미충족 여부. 가중치로만 | 읽을 수 없으면 unknown으로 적는다 |
| T+40 | Ring3 소결 | 소결 문장, 라벨 초안 + 에스컬레이션 여부 | 없으면 판정 근거가 없다 |
| T+42 | 증거 패키지 | 폴더 정리, 판정 파일 | 없으면 세션이 사실상 무효다 |
| T+45 | 종료 또는 에스컬레이션 | 닫거나 Ring0·DMA 게이트로 | 기록 없이 닫지 않는다 |
Ring3 최소 세트
시간이 부족해도 아래 네 가지는 빼놓지 않는다.
| 축 | 빼놓으면 |
|---|---|
| Prefetch 또는 USN 중 실행·파일 축 하나 이상 | Insufficient로 명시 |
| BAM·실행 레지스트리 또는 동등한 실행 흔적 | 실행 주장이 약하다고 기록 |
| 안티포렌식 패스 1회 | "안 지워진 것처럼 보이는" 착시 위험 |
| 판정 문장 + 증거 인덱스 | 세션이 사실상 무효 |
최소 세트만 수행한 세션에는 Clean(조건부)을 붙이지 않는다. Clean(조건부)에는 스캐너 또는 동등한 수동 확인, Prefetch, USN 조회 시도, BAM, 안티포렌식 패스, 판정과 관련된 서명·프로세스 축이 필요하다. 요건 전체는 판정 루브릭에 있다.
스킵 규칙
축을 건너뛸 수는 있다. 다만 기록하지 않은 스킵은 Clean을 붙일 수 없는 사유가 된다.
| 항목 | 건너뛸 수 있는 조건 | 기록 |
|---|---|---|
| 스캐너 | 정책 금지·미설치 | "수동 Ring3만" |
| 메모리 | 프로세스 분기 미충족 | 이유 한 줄 |
| 일부 축 | 시간 부족 | 해당 축 Insufficient |
| Ring0·DMA | 게이트 미충족 | "Ring3만으로 종료" |
스킵 기록은 세 가지를 담는다. 어떤 축을, 왜, 무엇으로 대신했는지다.
스킵: 메모리 축 (분기 조건 미충족, 프로세스 이상 없음)
스킵: 스캐너 (조직 정책상 미사용, 수동 Prefetch·USN·BAM으로 대체)증거 보존
수집한 것은 즉시 사건 폴더에 넣는다. "나중에 정리"는 먼저 사라지는 증거를 놓치게 한다.
- 스크린샷은 창 전체가 보이게 찍는다. 작업 표시줄 시계가 함께 보이면 시각 증명이 된다.
- 파서 export는 원본 형식(CSV·txt·json) 그대로 보관한다. 요약본만 남기면 다른 검사자가 재검증할 수 없다.
- 메모리 덤프를 만들었다면 해시와 도구 버전을 같이 적는다.
- 스캐너를 썼다면 export 원본을 버리지 않는다. 히트만 발췌하면 FP 재검증이 불가능하다.
- 개인정보와 계정 비밀번호는 패키지에서 제외한다.
폴더 구조와 필수 슬롯은 증거 패키지에 있다.
소결 문장 템플릿
세션 끝에 아래 형식으로 한 문단을 남긴다.
범위: [동의 범위 / 대상 PC]
수행: Ring3 [축 목록] · 스캐너 [예/아니오] · 메모리 [예/생략+이유]
교차: [일치한 축] / [불일치·공백]
환경: HVCI·IOMMU·2PC = [상태] (확정 근거 아님)
라벨: Confirmed | Suspicious | Insufficient | Clean(조건부)
다음: 종료 | Ring0 게이트 | DMA 게이트라벨의 정의는 판정 루브릭에 있다.
어떤 문장이 결론이 되나
소결 문장은 라벨과 함께 무엇을 봤고 무엇이 교차했는지를 담아야 한다. 같은 라벨도 근거가 없으면 무효다.
| 결론 문장 | 평가 |
|---|---|
| "스캐너가 치트 이름에 히트했다. Confirmed" | 무효. 히트는 단서일 뿐이다 |
| "Prefetch와 USN이 같은 파일의 실행·삭제를 제보 시간대에 보여 준다. Confirmed" | 유효. 독립 축 두 개가 교차했다 |
| "IOMMU가 꺼져 있으므로 DMA를 쓴다. Confirmed" | 무효. 환경은 가중치일 뿐이다 |
| "핵심 축 절반을 시간 부족으로 못 봤다. Clean" | 무효. Insufficient가 정직한 라벨이다 |
| "합의한 Ring3 축 검사 완료, 잔여 리드(lead, 조사 실마리) 없음, 게이트 사유 기록. Clean(조건부)" | 유효. 범위 한정 진술이다 |
| "malfind가 RWX 영역을 찾았다. Confirmed" | 무효. 메모리 단독 Confirmed 금지 |
흔한 실수
- 시간이 없다는 이유로 Clean을 붙인다.
- Kernel DMA Protection(무단 핫플러그 디바이스의 메모리 접근을 막는 기능)이나 HVCI가 꺼져 있다는 것만 보고 Confirmed로 올린다.
- 제보자의 감정만으로 Suspicious 이상을 준다.
- 스킵한 축을 기록하지 않는다.
- 스캐너 히트를 검증 없이 판정 문장에 옮긴다.
Sources
- 절차: 표준 절차
- MS Learn — 이벤트 4688 (프로세스 생성 감사)
- MS Learn — fsutil usn (저널 상태 확인 명령)
- Broadcom KB 438099: VMware tools installation failed (VM 게스트의 msinfo32 시스템 모델 값)
