Форум программистов, компьютерный форум, киберфорум
_lunar_
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Вскрываем защиту ProtectedLite процессов на уровне пользовательского кода

Запись от _lunar_ размещена 20.02.2021 в 12:19
Обновил(-а) _lunar_ 24.02.2021 в 16:12

Начну немного с теории - как это работает и для чего это нужно.
При разработке нового ядра, отличного от ядра Windows XP, в Microsoft придумали такую штуку как изоляция критических процессов.
Следствием этого стали защищенные процессы (Process Protected), которые могли создавать только при наличии соответствующей подписи и сертификата.
Доступ к дескрипторам таких процессов был заблокирован на уровне ядра
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 65
Размер:	29.2 Кб
ID:	6814
и чтобы их получить нужен подписанный драйвер режима ядра.
Именно таким действием Microsoft и изолировала системные процессы от внедрения в них пользовательского кода.
Впервые Process Protected (далее PP) были внедрены в Windows Vista. В купе с тем, что помимо изолированных процессов, Microsoft ввела новую модель изоляции окружения
(Session 0 для системных процессов и служб, и Session 1 для пользовательских процессов), начался невиданный хаос в разработке нового ПО и адаптации старого ПО под новые требования.
PP процессы настолько были защищены, что даже разработчики антивирусов не могли толком адаптировать свои продукты под новое ядро ОС.

Поэтому, с релизом Windows 8.1 в Microsoft решили ввести новый тип процессов - Process ProtectedLite (далее PPL).
PPL это тоже защищенные процессы, требующие подпись и сертификат. Их дескрипторы всё также заблокированы на уровне ядра
Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 56
Размер:	29.6 Кб
ID:	6817
и получить их стандартными методами из пользовательского кода невозможно.

Но чем тогда отличаются PP от PPL?
В основе модели PP лежит исполняемый файл и его родительский процесс. Всё просто и банально - есть подписанный файл, который при запуске создаёт процесс. Именно процесс и управляет тем, что ему предписано.
А вот модель PPL кардинально отличается от PP. В основе всё также лежит исполняемый файл, но его запуск происходит через сервис (если быть точный через менеджер ServiceManager). Поэтому таким процессом управляет сервисная служба.
Вместе с PPL в Microsoft ввели ещё одну защиту - SERVICE_LAUNCH_PROTECTED_INFO и вот такое небольшое пояснение
Цитата:
In order to apply any protection type to a service, the service must be signed with an appropriate certificate.
...
Once the service is launched as protected, other unprotected processes will not be able to call the following APIs on the protected service:
• ChangeServiceConfig
• ChangeServiceConfig2
• ControlService
• ControlServiceEx
• DeleteService
• SetServiceObjectSecurity
Проще говоря, они пишут, что сервис также подписывается соответствующим сертификатом, и что незащищенный (непривилегированный) процесс не может получить доступ к функциям управления сервисом.

Давайте рассмотрим более детально один из процессов svchost.exe (скриншот выше)
Он является PPL процессом. Получить его DACL и оставшуюся часть SACL невозможно, защита процесса не позволяет открыть дескриптор с необходимыми флагами чтения, лишь только некоторую лимитированную информацию и то из-под LocalSystem (обычный пользовательский процесс, запущенный даже с правами администратора, сразу выдаст Отказано в доступе).
Этот процесс имеет сервис управления wscsvc (Центр обеспечения безопасности)
Нажмите на изображение для увеличения
Название: 3.png
Просмотров: 49
Размер:	10.6 Кб
ID:	6818
и как мы видим он подписан сертификатом Windows (как и родительский процесс) и относится к защищенным сервисам. Кроме того он находится в запущенном состоянии, и имеет определенный набор флагов допуска (значение 133).
Эти флаги позволяют управлять его состоянием (останавливать, запускать и удалять сервис).
Остановим этот сервис и посмотрим что произойдёт c родительским процессом
Нажмите на изображение для увеличения
Название: 4.png
Просмотров: 51
Размер:	10.4 Кб
ID:	6819
Итак, сервис остановлен и родительский процесс отсутствует. Именно так и работает модель PPL процессов (управление таким процессом происходит через его сервис).

И вот теперь самое интересное.
В процессе исследования я обнаружил: либо эксплойт в системе защиты сервисов, позволяющий при определенных правах обойти сертификат и подпись, либо специально оставленный Microsoft бекдор.
Elevated процесс, и даже LocalSystem процесс (со стандартным набором прав) не способны изменить защиту сервиса на другой тип.
Я расширил функционал своей программы и дал ей максимальные привилегии, которые только возможны без использования драйвера режима ядра.
В результате была написана функция, способная изменять тип защиты сервиса.
Нажмите на изображение для увеличения
Название: 5.png
Просмотров: 50
Размер:	15.9 Кб
ID:	6820
Как можно видеть я отключил защиту у сервиса wscsvc (None).
Снова запустим сервис и по идентификатору (Process Id) откроем его родительский процесс.
Название: 6.jpg
Просмотров: 69

Размер: 129.5 Кб
И вот - процесс запущен без защиты, его дескрипторы открыты для чтения и записи, выводится полная информация о DACL и SACL.
Можно делать всё что угодно - инжектить свой код в адресное пространство процесса, добавлять DACL и пользователей, которые имеют доступ к процессу, и т.д.

В Windows 10 20H2 есть следующие сервисы, имеющие защиту:
WinDefend (Служба антивирусной программы Microsoft Defender) - защита уровня AntimalwareLight
WdNisSvc (Служба проверки сети антивирусной программы Microsoft Defender) - защита уровня AntimalwareLight
wscsvc (Центр обеспечения безопасности) - защита уровня WindowsLight
WaaSMedicSvc (Служба Medic центра обновления Windows) - защита уровня WindowsLight
DoSvc (Оптимизация доставки) - защита уровня WindowsLight
AppIDSvc (Удостоверение приложения) - защита уровня WindowsLight
AppXSvc (Служба развертывания AppX) - защита уровня WindowsLight
Со всех этих сервисов спокойно снимается защита: сперва сервис останавливается (при этом автоматически уничтожается его родительский процесс), затем меняется защита, и снова запускается сервис (при этом его родительский процесс будет также без защиты).

Но есть сервисы, у которых накручен кое-какой скилл. К примеру:

ClipSVC (Служба лицензий клиента) - защита уровня WindowsLight
Под WindowsLight сервис спокойно запускается и останавливается. Затем меняется его защита, но при попытке запуска сервиса родительский процесс сразу падает.

Sense (Служба Advanced Threat Protection в Защитнике Windows) - защита уровня WindowsLight
По умолчанию сервис находится в остановленном состоянии. Защита спокойно меняется. Но при попытке запуска на любом уровне защиты процесс сразу падает.

sppsvc (Защита программного обеспечения) - защита уровня Windows
Под Windows сервис спокойно запускается и останавливается. Затем меняется его защита, но родительский процесс всегда запускается под защитой уровня Windows вне зависимости от уровня защиты сервиса.

И ещё 2 интересных сервиса:
SecurityHealthService (Служба "Безопасность Windows") - защита уровня WindowsLight
SgrmBroker (Брокер мониторинга среды выполнения System Guard) - защита уровня Windows
Защита спокойно меняется, но оба этих сервиса не останавливаются, выдавая сообщение ERROR_INVALID_SERVICE_CONTROL (The requested control is not valid for this service) - в их accept control банально нет флага SERVICE_CONTROL_STOP
Снятие защиты с обоих сервисов и последующая перезагрузка компьютера не снимает защиту с родительских процессов.

Скачать программу вы можете здесь https://www.cyberforum.ru/blog... g6953.html (в прикрепленных этого блога всегда актуальная версия)
Размещено в Без категории
Просмотров 618 Комментарии 5
Всего комментариев 5
Комментарии
  1. Старый комментарий
    А кому это может быть полезным, кроме как майкрософту?
    Для чего это служит?
    Запись от Hretgir размещена 21.02.2021 в 15:56 Hretgir вне форума
    Обновил(-а) Hretgir 21.02.2021 в 17:02
  2. Старый комментарий
    Аватар для _lunar_
    Цитата:
    Сообщение от Hretgir Просмотреть комментарий
    А кому это может быть полезным, кроме как майкрософту?
    Для чего это служит?
    Если Microsoft это полезно, то ради бога. Пускай латают свои дыры. Но в багрепорт я им точно писать не буду.
    Не совсем понял что значит - для чего это служит?
    Запись от _lunar_ размещена 21.02.2021 в 18:20 _lunar_ вне форума
  3. Старый комментарий
    Это новая версия с ГИ уже ? Ошибки с вводом уже исправлены ? Как я понимаю дополнение для работы в апдейтах выше 17** сделано ?
    Запись от Wadim_Ymniy размещена 21.02.2021 в 22:47 Wadim_Ymniy вне форума
  4. Старый комментарий
    Аватар для _lunar_
    Цитата:
    Сообщение от Hretgir Просмотреть комментарий
    Ну а какой смысл давать программе все привилегии, чтобы потом смотреть как она защиты обходит...
    Причём здесь дать максимум привилегий и считать это взломом?
    Во-первых, я использовал способ повышения привилегий, который никто и никогда не применял.
    Во-вторых, это не просто накидывание прав. Я провёл много исследований ядра и нашёл данную брешь.
    В-третьих, то что сделал я, не может ProcessHacker даже с включенным драйвером ядра (попробуй у того же wscsvc отключить защиту - выставить на None, сразу получишь "Unable to change service information: Отказано в доступе."). Ещё раз напоминаю - никаких драйверов я не использую.
    Запись от _lunar_ размещена 22.02.2021 в 10:51 _lunar_ вне форума
    Обновил(-а) _lunar_ 25.02.2021 в 11:17
  5. Старый комментарий
    Аватар для _lunar_
    Цитата:
    Сообщение от Wadim_Ymniy Просмотреть комментарий
    Это новая версия с ГИ уже ? Ошибки с вводом уже исправлены ? Как я понимаю дополнение для работы в апдейтах выше 17** сделано ?
    Как таковых ошибок с вводом и не было. Если делать всё правильно - команда Enter, ввод значения Enter и т.д., то всё работает как надо. "Защиту от дурака" я не делал.
    Да, сервис UI0Detect работает на всех апдейтах Windows.
    Запись от _lunar_ размещена 22.02.2021 в 10:53 _lunar_ вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.