큰 압축 파일을 풀거나 프로젝트를 처음 빌드할 때, 노트북 팬이 갑자기 돌기 시작한다. 작업 관리자를 열면 CPU 순위 맨 위에 낯선 영어 이름이 있다. Antimalware Service Executable. 이름에 "Antimalware" 가 들어 있으니 지우기도 겁나고, 그렇다고 그냥 두자니 컴퓨터가 느리다.

이름표는 Defender 엔진이었다

작업 관리자의 프로세스 탭에서 이 항목을 펼치거나 세부 정보 탭으로 가면 실제 이름 MsMpEng.exe 가 나온다. Windows 에 기본으로 들어 있는 Microsoft Defender 바이러스 백신의 검사 엔진이다. 일반 권한의 PowerShell 로 프로세스의 경로를 물으면 빈 값이 돌아오는데, 보호된 프로세스라서 그렇다. 경로는 서비스 설정에서 찾았다.

Get-CimInstance Win32_Service -Filter "Name='WinDefend'" |
    Select-Object Name, DisplayName, StartMode, StartName, ProcessId, PathName

서비스 이름은 WinDefend, 표시 이름은 "Microsoft Defender 바이러스 백신 서비스", 자동 시작에 LocalSystem 계정이었다. 실행 파일 경로가 눈여겨볼 만하다.

C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.26100.4-0\MsMpEng.exe

Program Files 가 아니라 ProgramData 아래, 버전 번호가 붙은 폴더에서 돌고 있었다. C:\Program Files\Windows Defender\MsMpEng.exe 도 있긴 한데 버전이 4.18.25080.5 로 더 오래된 것이었다. Defender 는 Windows 업데이트와 별도로 "플랫폼 업데이트"를 받고, 새 버전을 Platform 아래 폴더에 깔아 그쪽으로 옮겨 간다. 이 PC 의 Platform 폴더에도 4.18.26090.9 와 4.18.26100.4 두 버전이 있었다. 실행 중인 파일의 서명은 Microsoft Windows Publisher 로 유효했다.

곁에 같이 도는 이름도 몇 있다.

프로세스 서비스 메모리(작업 집합 / 개인)
MsMpEng.exe WinDefend (자동) 376.8MB / 403.9MB
MpDefenderCoreService.exe MDCoreSvc (자동) 32.0MB / 17.8MB
NisSrv.exe WdNisSvc (수동, 네트워크 검사) 15.2MB / 6.1MB
SecurityHealthService.exe SecurityHealthService ("Windows 보안" 앱 쪽) —

MsMpEng 의 메모리는 확인한 시점에 작업 집합 377MB 였다. Windows 기본 프로세스 중에서는 큰 편이다. 악성코드 정의(서명) 데이터를 메모리에 올려 두고 파일을 열 때마다 대조해야 하니 어느 정도는 피할 수 없는 값으로 보인다.

CPU 를 쓰는 때는 정해져 있다

같은 시점에 성능 카운터로 3초씩 두 번 재 보니 MsMpEng 의 CPU 는 전체의 0.74%, 0.39% 였다. 아무것도 안 할 때는 이 정도다. 이 엔진이 바빠지는 경우는 크게 셋이다.

첫째, 실시간 보호. 파일이 만들어지거나 열리거나 실행될 때 그 자리에서 검사한다. 압축을 풀어 작은 파일 수만 개가 한꺼번에 생기거나, 빌드 도구가 중간 파일을 쏟아내거나, 큰 폴더를 복사할 때 CPU 가 확 오르는 이유다. Defender 가 느린 게 아니라 검사할 파일이 그만큼 많은 것이다.

둘째, 예약 검사. 기록은 Defender 이벤트 로그에 남는다.

Get-WinEvent -FilterHashtable @{
    LogName='Microsoft-Windows-Windows Defender/Operational'; Id=1000,1001
} -MaxEvents 4 | Select-Object TimeCreated, Id

이 PC 에서는 10월 31일 새벽 2시 45분 49초에 검사가 시작(1000)되고 2시 48분 05초에 끝나(1001) 있었다. 2분 16초짜리 빠른 검사다. Get-MpComputerStatus 로 봐도 마지막 빠른 검사가 같은 시각으로 나왔고, 전체 검사는 한 번도 돈 적이 없었다. 작업 스케줄러의 Windows Defender Scheduled Scan 작업은 유휴 상태에서 도는 작업(-IdleScheduledJob)으로 등록되어 있었다. 새벽 2시의 Windows 자동 유지 관리 시간에 맞춰 PC 가 쉬고 있을 때 돈 것으로 보인다. PC 를 밤에 꺼 두는 사람이라면 이 검사가 낮에 사용 중인 시간으로 밀려 체감이 커질 수 있다.

셋째, 정의 업데이트 직후. 이벤트 로그에는 정의 업데이트(2000)가 하루에도 여러 번 찍혀 있었다. 새 정의를 받으면 엔진이 데이터를 다시 올리면서 잠깐 바빠진다.

Get-MpPreference 를 보면 예약 검사의 CPU 상한이 ScanAvgCPULoadFactor 50, 곧 평균 50% 로 잡혀 있었다. 실시간 보호는 이 상한과 별개라서, 파일을 쏟아내는 작업 중에는 체감이 더 크다.

끄는 대신 할 수 있는 것

검색해 보면 레지스트리나 그룹 정책으로 Defender 를 끄는 방법이 많이 나온다. 권하지 않는다. 이 PC 는 Get-MpComputerStatus 의 IsTamperProtected 가 True, 곧 변조 방지가 켜져 있었다. 이 상태에서는 그런 설정이 막히거나 무시되는 것으로 알려져 있고, 다른 백신 없이 Defender 를 끄면 PC 가 무방비가 된다. 다른 백신을 설치하면 Defender 는 알아서 실시간 보호를 내려놓는 것으로 알려져 있으니, 두 백신이 같이 돌며 다툴 일도 보통은 없다.

대신 원인에 맞춰 다룬다.

예약 검사가 일하는 시간에 겹친다면 검사 시간을 옮긴다. 작업 스케줄러에서 \Microsoft\Windows\Windows Defender\Windows Defender Scheduled Scan 의 조건을 보거나, 관리자 PowerShell 의 Set-MpPreference -ScanScheduleQuickScanTime 같은 설정으로 PC 가 켜져 있으면서 쓰지 않는 시간으로 정할 수 있다.

실시간 보호가 특정 작업 때마다 걸린다면, 무엇을 검사하느라 바쁜지부터 확인한다. 관리자 PowerShell 의 New-MpPerformanceRecording 으로 그 작업을 하는 동안 기록을 남기고 Get-MpPerformanceReport 로 열어 보면, 검사 시간이 오래 걸린 파일·확장자·프로세스가 순위로 나온다. 대개 빌드 출력 폴더나 패키지 캐시처럼 짐작이 가는 곳이 위에 올라온다.

그다음이 제외 항목이다. "Windows 보안 → 바이러스 및 위협 방지 → 설정 관리 → 제외 추가 또는 제거"에서 폴더·파일·확장자·프로세스를 뺄 수 있다. 다만 제외 항목은 그대로 악성코드가 숨기 좋은 자리가 된다는 걸 알고 써야 한다. 제외 목록을 읽어 그 폴더에 파일을 떨어뜨리거나, 아예 제외 항목을 추가하려 드는 악성코드도 알려져 있다. 빼더라도 빌드 결과물 폴더처럼 범위가 좁고 내용이 분명한 곳만 빼고, 다운로드 폴더나 드라이브 전체, .exe 같은 확장자, 아무 파일이나 실행하는 프로세스는 빼지 않는다. 제외 목록은 관리자 권한이 있어야 보인다. 일반 권한의 Get-MpPreference 에서는 "관리자여야 볼 수 있다"는 문구만 나왔다. 그만큼 노출되면 곤란한 정보로 다룬다는 뜻이다.

개발용 폴더가 많다면 Windows 11 의 개발 드라이브(Dev Drive)도 방법이다. 이 볼륨에서는 Defender 가 파일을 연 뒤에 검사하는 성능 모드를 쓸 수 있어서, 제외하지 않고도 빌드 속도 손해를 줄일 수 있는 것으로 알려져 있다.

가짜 MsMpEng 구별

이름이 유명한 만큼 흉내 내는 파일도 있다. 확인 기준은 이렇다. 경로가 C:\ProgramData\Microsoft\Windows Defender\Platform\<버전>\ 이나 C:\Program Files\Windows Defender\ 인가, 서비스 WinDefend 의 프로세스 번호와 일치하는가, 서명이 Microsoft 인가. 작업 관리자에서 같은 이름이 두 개 이상 보이거나 사용자 폴더 아래에서 돌고 있다면 의심해야 한다. 정상적인 MsMpEng 은 하나뿐이고, 일반 권한으로는 경로조차 안 보일 만큼 보호되어 있다.

다음 편은 작업 관리자에서 여러 개씩 뜨는 또 하나의 이름, msedgewebview2.exe 다. Edge 를 열지 않았는데도 떠 있는 이유와 어떤 앱이 띄웠는지 찾는 법을 본다.