
Пути эксплуатации, позволяющие (зло)употреблять привилегиями Windows для повышения своих прав в операционной системе.
Идея заключается в "переводе" привилегий Windows OS на путь, ведущий к:
Привилегии перечислены и описаны по адресу: https://learn.microsoft.com/en-us/windows/win32/secauthz/privilege-constants
Если цель может быть достигнута несколькими способами, приоритет следующий:
Вы можете проверить свои привилегии с помощью whoami /priv. Отключенные привилегии так же хороши, как и включенные. Единственное, что важно — есть ли у вас привилегия в списке или нет.
Примечание 1: Всякий раз, когда путь атаки заканчивается созданием токена, можно предположить, что следующим шагом будет создание нового процесса с использованием такого токена и последующий захват контроля над ОС.
Примечание 2:
а. Для прямого вызова NtQuerySystemInformation()/ZwQuerySystemInformation() необходимые привилегии можно найти здесь.
б. Для NtSetSystemInformation()/ZwSetSystemInformation() необходимые привилегии перечислены здесь.
Примечание 3: Я сосредотачиваюсь только на ОС. Если привилегия работает в AD, но не в самой ОС, я описываю её как неиспользуемую в ОС. Было бы неплохо, если бы кто-то глубже изучил сценарии, ориентированные на AD.
Не стесняйтесь вносить свой вклад и/или обсуждать представленные идеи.
Благодарности:
| Привилегия | Влияние | Инструмент | Путь выполнения | Примечания |
|---|
SeAssignPrimaryToken | Администратор | Сторонний инструмент | "Это позволило бы пользователю олицетворять токены и повысить привилегии до nt system с помощью таких инструментов, как potato.exe, rottenpotato.exe и juicypotato.exe" | Спасибо Aurélien Chalot за обновление. Я постараюсь перефразировать это в более похожий на рецепт вид в ближайшее время. |
SeAudit | Угроза | Сторонний инструмент | Запись событий в журнал безопасности для обмана аудита или перезаписи старых событий. | Запись собственных событий возможна с помощью API Authz Report Security Event.- см. PoC от @daem0nc0re |
SeBackup | Администратор | Сторонний инструмент | 1. Сделать резервную копию разделов реестра HKLM\SAM и HKLM\SYSTEM 2. Извлечь хеши локальных учетных записей из базы данных SAM 3. Pass-the-Hash от имени члена локальной группы Администраторы Альтернативно можно использовать для чтения конфиденциальных файлов. | Для получения дополнительной информации обратитесь к файлу SeBackupPrivilege.- см. PoC от @daem0nc0re |
SeChangeNotify | Нет | - | - | Привилегия есть у всех. Её отзыв может сделать ОС (Windows Server 2019) незагружаемой. |
SeCreateGlobal | ? | ? | ? | |
SeCreatePagefile | Нет | Встроенные команды | Создать hiberfil.sys, прочитать его офлайн, найти конфиденциальные данные. | Требует офлайн-доступа, что в любом случае приводит к правам администратора. - См. PoC от @daem0nc0re |
SeCreatePermanent | ? | ? | ? | |
SeCreateSymbolicLink | ? | ? | ? | |
SeCreateToken | Администратор | Сторонний инструмент | Создание произвольного токена, включая права локального администратора, с помощью NtCreateToken.- см. PoC от @daem0nc0re | |
SeDebug | Администратор | PowerShell | Дублировать токен lsass.exe. | Скрипт можно найти на FuzzySecurity. - См. PoC от @daem0nc0re |
SeDelegateSession-UserImpersonate | ? | ? | ? | Имя привилегии разбито для сужения столбца. |
SeEnableDelegation | Нет | - | - | Привилегия не используется в Windows OS. |
SeImpersonate | Администратор | Сторонний инструмент | Инструменты из семейства Potato (potato.exe, RottenPotato, RottenPotatoNG, Juicy Potato, SweetPotato, RemotePotato0), RogueWinRM, PrintSpoofer и т.д. | Аналогично SeAssignPrimaryToken, позволяет по замыслу создавать процесс в контексте безопасности другого пользователя (используя дескриптор токена этого пользователя). Для получения необходимого токена можно использовать множество инструментов и методов. |
SeIncreaseBasePriority | Доступность | Встроенные команды | start /realtime SomeCpuIntensiveApp.exe | Может быть более интересно на серверах. |
SeIncreaseQuota | Доступность | Сторонний инструмент | Изменить лимиты процессора, памяти и кэша на некоторые значения, делающие ОС незагружаемой. | - Квоты не проверяются в безопасном режиме, что делает восстановление относительно лёгким. - Та же привилегия используется для управления квотами реестра. |
SeIncreaseWorkingSet | Нет | - | - | Привилегия есть у всех. Проверяется при вызове функций тонкой настройки управления памятью. |
SeLoadDriver | Администратор | Сторонний инструмент | 1. Загрузить уязвимый драйвер ядра, например szkg64.sys2. Эксплуатировать уязвимость драйвера Альтернативно привилегию можно использовать для выгрузки драйверов безопасности с помощью встроенной команды fltMC, например: fltMC sysmondrv | 1. Уязвимость szkg64 указана как CVE-2018-157322. Код эксплойта для szkg64 создан Parvez Anwar |
SeLockMemory | Доступность | Сторонний инструмент | Истощить системный раздел памяти, перемещая страницы. | PoC опубликован Walied Assar (@waleedassar) |
SeMachineAccount | Нет | - | - | Привилегия не используется в Windows OS. |
SeManageVolume | Администратор | Сторонний инструмент | 1. Включить привилегию в токене 2. Создать дескриптор для \.\C: с SYNCHRONIZE | FILE_TRAVERSE3. Отправить FSCTL_SD_GLOBAL_CHANGE для замены S-1-5-32-544 на S-1-5-32-5454. Перезаписать utilman.exe и т.д. | FSCTL_SD_GLOBAL_CHANGE можно выполнить с помощью этого фрагмента кода. |
SeProfileSingleProcess | Нет | - | - | Привилегия проверяется перед изменением (и в очень ограниченном наборе команд — перед запросом) параметров Prefetch, SuperFetch и ReadyBoost. Влияние может быть скорректировано, так как реальный эффект неизвестен. |
SeRelabel | Угроза | Сторонний инструмент | Модификация системных файлов легитимным администратором | См.: документация по MIC Метки целостности обеспечивают дополнительную защиту поверх известных ACL. Два основных сценария включают: - защиту от атак с использованием эксплуатируемых приложений, таких как браузеры, PDF-ридеры и т.д. - защиту файлов ОС. Наличие SeRelabel в токене позволит использовать доступ WRITE_OWNER к ресурсу, включая файлы и папки. К сожалению, токен с IL ниже High будет иметь отключенную привилегию SeRelabel, что делает её бесполезной для тех, кто уже не является администратором.См. отличный пост в блоге от @tiraniddo для подробностей. |
SeRemoteShutdown | Доступность | Встроенные команды | shutdown /s /f /m \\server1 /d P:5:19 | Привилегия проверяется, когда запрос на выключение/перезагрузку поступает из сети. Сценарий с 127.0.0.1 требуется исследовать. |
SeReserveProcessor | Нет | - | - | Похоже, что эта привилегия больше не используется и появилась только в нескольких версиях winnt.h. Вы можете увидеть её перечисленной, например, в исходном коде, опубликованном Microsoft здесь. |
SeRestore | Администратор | PowerShell | 1. Запустить PowerShell/ISE с присутствующей привилегией SeRestore. 2. Включить привилегию с помощью Enable-SeRestorePrivilege). 3. Переименовать utilman.exe в utilman.old 4. Переименовать cmd.exe в utilman.exe 5. Заблокировать консоль и нажать Win+U | Атака может быть обнаружена некоторым антивирусным ПО. Альтернативный метод основан на замене бинарников служб, хранящихся в "Program Files", с использованием той же привилегии. - см. PoC от @daem0nc0re |
SeSecurity | Угроза | Встроенные команды | - Очистить журнал безопасности: wevtutil cl Security- Уменьшить журнал безопасности до 20 МБ, чтобы события быстро удалялись: wevtutil sl Security /ms:0- Читать журнал безопасности, чтобы иметь информацию о процессах, доступе и действиях других пользователей в системе. - Знать, что регистрируется, чтобы действовать скрытно. - Знать, что регистрируется, чтобы генерировать большое количество событий, эффективно удаляя старые без явных следов очистки. - Просмотр и изменение SACL объектов (на практике: настройки аудита) | См. PoC от @daem0nc0re |
SeShutdown | Доступность | Встроенные команды | shutdown.exe /s /f /t 1 | Позволяет вызывать большинство уровней NtPowerInformation(). Требует исследования. Позволяет вызывать NtRaiseHardError(), вызывающую немедленный BSOD и дамп памяти, что потенциально ведёт к раскрытию конфиденциальной информации - см. PoC от @daem0nc0re |
SeSyncAgent | Нет | - | - | Привилегия не используется в Windows OS. |
SeSystemEnvironment | Неизвестно | Сторонний инструмент | Привилегия разрешает использование NtSetSystemEnvironmentValue, NtModifyDriverEntry и некоторых других системных вызовов для управления переменными UEFI. | Привилегия требуется для запуска sysprep.exe. Дополнительно: |
SeSystemProfile | ? | ? | ? | |
SeSystemtime | Угроза | Встроенные команды | cmd.exe /c date 01-01-01cmd.exe /c time 00:00 | Привилегия позволяет изменять системное время, что потенциально ведёт к проблемам с целостностью журнала аудита, так как события будут храниться с неправильной датой/временем. - Будьте осторожны с форматами даты/времени. Используйте всегда безопасные значения, если не уверены. - Иногда название привилегии пишется с заглавной "T" и упоминается как SeSystemTime. |
SeTakeOwnership | Администратор | Встроенные команды | 1. takeown.exe /f "%windir%\system32"2. icacls.exe "%windir%\system32" /grant "%username%":F3. Переименовать cmd.exe в utilman.exe 4. Заблокировать консоль и нажать Win+U | Атака может быть обнаружена некоторым антивирусным ПО. Альтернативный метод основан на замене бинарников служб, хранящихся в "Program Files", с использованием той же привилегии. - См. PoC от @daem0nc0re |
SeTcb | Администратор | Сторонний инструмент | Манипулировать токенами, чтобы включить права локального администратора. | Пример кода+exe для создания произвольных токенов можно найти в PsBits. |
SeTimeZone | Беспорядок | Встроенные команды | Изменить часовой пояс. tzutil /s "Chatham Islands Standard Time" | |
SeTrustedCredManAccess | Угроза | Сторонний инструмент | Извлечение учётных данных из Диспетчера учётных данных | Отличный пост в блоге от @tiraniddo. - см. PoC от @daem0nc0re |
SeUndock | Нет | - | - | Привилегия включается при отстыковке, но никогда не наблюдалось её проверки для предоставления/отказа в доступе. На практике это означает, что она фактически не используется и не может привести к повышению привилегий. |
SeUnsolicitedInput | Нет | - | - | Привилегия не используется в Windows OS. |