백신이 “위협을 발견했다”고 알리면 가장 먼저 드는 생각은 “내가 방금 뭘 잘못 받았나”다. 그런데 그 알림에 찍힌 날짜를 잘못 읽으면, 멀쩡한 상황에 해킹당했다고 패닉하기 쉽다.
요약
탐지 날짜는 파일을 받거나 실행한 날이 아니다. 백신이 그 파일을 발견한 날일 뿐이다. 탐지 기록에서 파일 경로를 뽑고(Get-MpThreatDetection), 그 파일의 생성 시각과 대조하면 “오래전에 둔 파일을 뒤늦게 발견한 것”인지 “방금 뭔가 실행된 것”인지 5분 만에 가른다. 대부분은 전자다.
무슨 일이 있었나
어느 날 디펜더 보호 기록에 위협 하나가 떠 있었다. 분류는 HackTool, 상태는 “처리됨(격리)”였다.
문제는 그 탐지 날짜에 나는 PC 앞에 없었다는 것이다. 당직이라 집을 비웠다. “내가 안 건드렸는데 왜 그날 잡혔지?” 여기서 많은 사람이 해킹당했다고 패닉한다. 하지만 답은 훨씬 싱거웠다. 이 추적은 AI 짝꿍과 명령어를 같이 짚어가며 했다.
첫 번째 함정: 탐지 날짜 ≠ 받은 날
디펜더는 사람이 없어도 예약 스캔을 자동으로 돌린다. 그래서 화면에 찍힌 “탐지 날짜”는 파일이 시스템에 들어온 날도, 실행된 날도 아니다. 그냥 백신이 그 파일을 발견한 날이다.
비유하면 이렇다. 청소부가 화요일에 창고 구석에서 상한 음식을 발견했다고 해서, 그 음식이 화요일에 들어온 건 아니다. 언제 들어왔는지는 따로 확인해야 한다.
증거 1 — 탐지 기록에서 파일 경로 뽑기
화면 알림은 요약만 보여준다. 실제 파일이 어디 있었는지는 PowerShell로 캔다.
Get-MpThreatDetection | ForEach-Object {
$name = (Get-MpThreat -ThreatID $_.ThreatID).ThreatName
"$($_.InitialDetectionTime) | $name | $($_.Resources)"
}
Resources에 격리된 파일의 전체 경로가 찍힌다. 내 경우엔 이런 식이었다.
2026-06-19 10:43 | HackTool:... | file:D:\projects\_trash\downloads\...\setup.exe
여기서 두 가지가 보인다. 첫째, 파일은 휴지통(_trash) 폴더 안에 있었다. 즉 이미 버리려고 치워둔 것이다. 둘째, 탐지 시각은 오전 10시 43분, 내가 자리에 없던 시간이었다.
증거 2 — 파일 생성 시각과 대조
이제 결정타다. 그 파일이 실제로 언제 거기 생겼는지 본다.
Get-ChildItem 'D:\projects\_trash' -Recurse -Filter setup.exe |
Select-Object FullName, CreationTime, LastWriteTime
생성 시각이 탐지보다 일주일 전이었다. 즉 파일은 일주일 전에 휴지통으로 옮겨졌고, 디펜더 예약 스캔이 그날에야 그 폴더를 훑어 발견하고 격리한 것이다. 그날 새로 실행된 게 아니다. 당직이라 자리를 비운 것과 아무 모순이 없다.
스캔이 자동으로 돈다는 것도 확인할 수 있다.
Get-MpComputerStatus | Select-Object QuickScanStartTime, QuickScanAge
QuickScanAge가 작으면(예: 1일 전) 디펜더가 정기적으로 알아서 스캔하고 있다는 뜻이다.
잔재 점검 — 정말 실행됐다면 흔적이 남는다
“그래도 혹시 실행된 거면?” 그 가설도 확인하고 넘어간다. 멀웨어가 실제로 실행돼 자리를 잡았다면 자동시작 항목이나 서비스에 흔적을 남긴다.
Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location
단, Win32_StartupCommand는 Run 키와 시작프로그램 폴더만 본다. 예약 작업(Get-ScheduledTask)·서비스(Get-CimInstance Win32_Service)·WMI 이벤트 구독 같은 다른 자동실행 통로는 못 잡는다. 더 철저히 보려면 Sysinternals Autoruns로 전체 자동실행 지점을 훑는 게 정석이다(관리자 권한 필요).
자동시작 목록이 전부 아는 프로그램(클라우드 동기화, 메신저, 백신 등)뿐이고 낯선 항목이 없으면 잔재는 없다고 본다. 디펜더가 파일을 격리(제거)했고 자동시작도 깨끗하면 상황 종료다.
백신 알림 받으면 어떻게 조사하나 — 4단계
정리하면, 백신이 뭔가 잡았다고 뜰 때 패닉 대신 이 순서로 본다.
- 탐지 ≠ 실행 — 탐지됐다고 실행된 건 아니다. 격리됐으면 백신이 이미 막은 것이다.
- 날짜 검증 — 탐지 날짜는 발견한 날일 뿐. 파일 생성 시각과 대조한다.
- 경로 확인 —
Get-MpThreatDetection으로 실제 파일 위치를 본다. 휴지통이나 다운로드 폴더면 위험도가 다르다. - 잔재 점검 — 자동시작과 서비스에 낯선 항목이 없으면 실행 흔적 없음이다.
이 네 가지를 5분 보면, 진짜 침해인지 “오래된 파일을 백신이 뒤늦게 청소한 것”인지 거의 가려진다. 대부분은 후자다.
| 신호 | 안전 쪽 (대개 오래된 파일) | 의심 쪽 (추가 조사 필요) |
|---|---|---|
| 파일 위치 | 휴지통·다운로드 폴더 | 시스템 폴더·시작프로그램 |
| 생성 시각 | 탐지보다 며칠~몇 주 전 | 탐지 직전 |
| 상태 | 격리·제거됨 | 활성(active) |
| 자동시작 | 낯선 항목 없음 | 모르는 항목 추가됨 |
한 줄 결론
백신 알림의 날짜는 “발견한 날”이지 “당한 날”이 아니다. 놀라기 전에 경로와 생성 시각부터 본다.
관련 자료와 출처
- Get-MpThreatDetection (Microsoft Learn)
- Get-MpThreat (Microsoft Learn)
- Get-MpComputerStatus (Microsoft Learn)
참고: 위 PowerShell 명령은 내가 직접 돌려서 동작을 확인했다. 경로와 시각은 예시값으로 가렸다. 레지스트리·자동시작 경로는 환경마다 다를 수 있으니 본인 시스템에서 확인하길 권한다.
답글 남기기