
Process Explorer: обход PPL через уязвимый драйвер
Хотя широко известно, что старые версии (до 17.x) драйверов SysInternals Process Explorer (PSEXP152.sys) уязвимы и могут быть использованы для открытия дескрипторов процессов с полным доступом к PPL-процессам (IOCTL: 0x8335003c), более новые версии (начиная с 17.x) по-прежнему уязвимы и способны делать то же самое с помощью другой функции драйвера (IOCTL: 0x83350014).
Эта функция IOCTL дублирует произвольные дескрипторы и также получила патч для фильтрации системного процесса и любого защищённого процесса (PP/PPL) в версии драйвера 17.00. Но в этой функции было серьёзное упущение, так как всё ещё было возможно дублировать любой дескриптор процесса и потока из собственного не-PPL процесса. Достаточно было открыть PPL-процесс с низкими правами, например PROCESS_QUERY_LIMITED_INFORMATION, а затем продублировать этот дескриптор из собственного процесса через драйвер Process Explorer, чтобы обойти фильтр и получить дескриптор с полным доступом к PPL-процессу.
Я использовал этот метод годы назад для обхода защиты PPL-процессов, но Microsoft закрыла этот обход в версии драйвера 17.11, добавив проверку того, является ли целевой дескриптор дескриптором PPL-процесса или потока. Тем не менее, версии драйвера с 17.00 по 17.09 (17.10 не существует) не включены в список блокировки уязвимых драйверов Microsoft, и я подозреваю, что некоторые производители EDR также не помечают эти версии (пока что).
Это всего лишь PoC-реализация для завершения PPL-процессов. Тот же мощный IOCTL дублирования дескрипторов также может быть использован для дублирования других типов дескрипторов, таких как потоки, и для внедрения шелл-кода в другие PPL-процессы.
Использование:
1. Скачайте старую версию SysInternals Process Explorer (17.00–17.10)
2. Запустите procexp64.exe от имени администратора, чтобы загрузить уязвимый драйвер
3. Найдите в Process Explorer PID, например, MsMpEng.exe (например: 3660)
4. Запустите ps_ppl_bypass.exe PID ("ps_ppl_bypass.exe 3660") от имени администратора, чтобы завершить целевой процесс
Также всё ещё возможно получить старую версию драйвера с официального сайта SysInternals, извлекая её из утилиты SysInternals Handles: https://learn.microsoft.com/en-us/sysinternals/downloads/handle