
Расширение для WinDbg в режиме ядра и PoCs для исследования привилегий токенов.
Расширение WinDbg в режиме ядра и PoCs для тестирования работы привилегий токенов.
Существуют известные репозитории и статьи о злоупотреблении привилегиями токенов, например Grzegorz Tworek's Priv2Admin. Код в этом репозитории предназначен для помощи в исследовании работы привилегий токенов.
Этот проект описывает, как получить системные привилегии из оболочки с высоким уровнем целостности. См. README.md для подробностей.
Цель этого проекта — исследовать, как злоумышленники злоупотребляют уязвимостью произвольной записи в ядро. Все PoCs написаны для HackSys Extreme Vulnerable Driver. Большинство этих PoCs выполняют получение уровня целостности SYSTEM, злоупотребляя уязвимостью произвольной записи в ядро и привилегиями токенов. Протестировано на Windows 10 версии 1809/1903, но теоретически должны работать на большинстве Windows 10:
| Имя PoC | Описание |
|---|---|
| CreateAssignTokenVariant | Этот PoC выполняет EoP с помощью SeCreateTokenPrivilege и SeAssignPrimaryTokenPrivilege. |
| CreateImpersonateTokenVariant | Этот PoC выполняет EoP с помощью SeCreateTokenPrivilege и SeImpersonatePrivilege. |
| CreateTokenVariant | Этот PoC выполняет EoP с помощью SeCreateTokenPrivilege. |
| DebugInjectionVariant | Этот PoC выполняет EoP с помощью SeDebugPrivilege. На финальном этапе использует внедрение кода в winlogon.exe. |
| DebugUpdateProcVariant | Этот PoC выполняет EoP с помощью SeDebugPrivilege. На финальном этапе создает системный процесс из winlogon.exe с помощью API UpdateProcThreadAttribute. |
| RestoreServiceModificationVariant | Этот PoC выполняет EoP с помощью SeRestorePrivilege. Используйте HijackShellLib с этим PoC. |
| SecondaryLogonVariant | Этот PoC выполняет EoP с помощью SeCreateTokenPrivilege и SeImpersonatePrivilege. На финальном этапе использует службу вторичного входа в систему. |
| TakeOwnershipServiceModificationVariant | Этот PoC выполняет EoP с помощью SeTakeOwnershipPrivilege. Используйте HijackShellLib с этим PoC. |
| TcbS4uAssignTokenVariant | Этот PoC выполняет EoP с помощью SeTcbPrivilege. Получает оболочку с обязательным уровнем SYSTEM из среднего обязательного уровня. |
| TcbS4uImpersonationVariant | Этот PoC выполняет EoP с помощью SeTcbPrivilege. Выполняет олицетворение потока с помощью входа S4U. Не получает высокий или системный уровень целостности. |
Предупреждение
В некоторых средах отладочная сборка не работает. Предпочтительна сборка Release.
PrivEditor — это расширение WinDbg в режиме ядра для управления привилегиями токена конкретного процесса. Это расширение упрощает настройку привилегий токена для исследования:``` 0: kd> .load C:\dev\PrivEditor\x64\Release\PrivEditor.dll
PrivEditor - Kernel Mode WinDbg extension for token privilege edit.
Commands : + !getps : List processes in target system. + !getpriv : List privileges of a process. + !addpriv : Add privilege(s) to a process. + !rmpriv : Remove privilege(s) from a process. + !enablepriv : Enable privilege(s) of a process. + !disablepriv : Disable privilege(s) of a process. + !enableall : Enable all privileges available to a process. + !disableall : Disable all privileges available to a process.
[*] To see command help, execute "! help" or "! /?".
### Команда getps
Эта команда предназначена для вывода списка процессов в вашей целевой системе:```
0: kd> !getps /?
!getps - List processes in target system.
Usage : !getps [Process Name]
Process Name : (OPTIONAL) Specifies filter string for process name.
Если вы выполните эту команду без аргументов, она выведет список всех процессов в вашей целевой системе следующим образом:``` 0: kd> !getps
PID nt!_EPROCESS nt!_SEP_TOKEN_PRIVILEGES Process Name
======== =================== ======================== ============
0 0xfffff80581233630 0x0000000000000000 Idle
4 0xffffd60fec068380 0xffffaf00cec07a40 System
68 0xffffd60ff1780480 0xffffaf00d3b290a0 svchost.exe
88 0xffffd60fec0db080 0xffffaf00cec0d080 Registry
324 0xffffd60fef342040 0xffffaf00d0416080 smss.exe
348 0xffffd60ff052f100 0xffffaf00d25d30a0 dwm.exe
408 0xffffd60feca8e140 0xffffaf00d21bd930 csrss.exe
480 0xffffd60ff05a8340 0xffffaf00d2568670 svchost.exe
484 0xffffd60fefcd60c0 0xffffaf00d06430e0 wininit.exe
500 0xffffd60fefd130c0 0xffffaf00d23100a0 csrss.exe
580 0xffffd60fefdc0080 0xffffaf00d2266630 winlogon.exe
--snip--
Если вы хотите узнать о конкретных процессах, задайте строковый фильтр следующим образом. Фильтр работает с прямым совпадением и без учета регистра:```
0: kd> !getps micro