Jingle Bells tovarishi!
Залью тулзу на Rust для автоматического сноса av/edr процессов через эксплуатацию уязвимого драйвера.АРХИТЕКТУРА И ПРИНЦИП РАБОТЫ
Тулза эксплуатирует CVE-2025-52915 в драйвере K7RKScan_1516.sys от K7 Computing. Драйвер подписан валидным сертификатом Microsoft, поэтому Driver Signature Enforcement его пропускает без вопросов. Через него можно убивать любые процессы на уровне ядра, включая PPL-защищенные (Protected Process Light), байпасся все хуки юзермода.Цепочка атаки:
1. Usermode (наша тулза) → Service Control Manager API2. Регистрация драйвера как SERVICE_KERNEL_DRIVER с правами SYSTEM
3. StartServiceA() → драйвер загружается в kernel space (Ring 0)
4. CreateFileA("\\\\.\\DosK7RKScnDrv") → получаем хендл на device object драйвера
5. DeviceIoControl() с IOCTL 0x222018 → передача PID целевого процесса
6. Драйвер вызывает PsLookupProcessById() + ZwTerminateProcess() напрямую из кернела
ТЕХНИЧЕСКИЕ ДЕТАЛИ ЭКСПЛУАТАЦИИ
IOCTL интерфейс:
- Control Code: 0x222018 (кастомный IOCTL драйвера K7 для терминации процессов)
- Input Buffer: DWORD с PID процесса
- Output Buffer: отсутствует (драйвер ничего не возвращает)
- Method: METHOD_BUFFERED (безопасная передача данных в kernel)
Device Object драйвера:
При загрузке K7RKScan_1516.sys создает:- Kernel device: \Device\NTK7RKScnDrv
- Symbolic link: \DosDevices\DosK7RKScnDrv → доступен из usermode как \\.\DosK7RKScnDrv
Обход защиты процессов:
Драйвер выполняет терминацию через kernel-mode вызовы:// Внутри драйвера K7RKScan.sys
PEPROCESS TargetProcess;
PsLookupProcessById(PID, &TargetProcess); // Получаем EPROCESS структуру
ZwTerminateProcess(TargetProcess, 0); // Убиваем процесс из Ring 0
Обход EDR/AV хуков:
EDR'ки обычно ставят хуки на:- NtTerminateProcess в ntdll.dll (usermode)
- Kernel callbacks типа PsSetCreateProcessNotifyRoutineEx
Защита PPL (Protected Process Light):
Windows Defender (MsMpEng.exe), SentinelOne, CrowdStrike и другие EDR работают как PPL-процессы. Из usermode их невозможно убить через OpenProcess() - получишь ERROR_ACCESS_DENIED.Но драйвер работает в Ring 0 с привилегиями SYSTEM, поэтому ему похуй на PPL - он напрямую модифицирует структуры ядра. (Если я здесь ошибаюсь, пожалуйста исправьте меня).
Код написан на Rust, значит быстро и без багов с памятью. HashSet для O(1) лукапа процессов, одиночный снапшот системы за итерацию - эффективно и шустро
ВАЖНО
- (DLYA NUBOV) Нужны админ-права для загрузки драйвера (иначе CreateServiceA вернет ERROR_ACCESS_DENIED)
- Только Windows (очевидно)
- Только для пентеста и рисёрча, сами понимаете

Вложения
Последнее редактирование:
