SystemResearch - исследование объектов ядра

Тема в разделе "WASM.PROJECTS", создана пользователем k3rnl, 24 окт 2023.

  1. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    55
    Доброго времени суток!

    Решил создать отдельную тему для своей утилиты SystemResearch
    0.jpg 1.jpg 2.jpg
    Проект на ранней стадии, много чего задумано и реализуется по мере свободного времени.
    Сборки с новым функционалом буду выкладывать в этой теме.

    Основной упор на код и оптимизацию сделан для Windows 10/11, но также тестирую работу программы в Windows 7. Поддерживаются только 64 битные ОС.
    Среда разработки и компилятор - Pelles C (версия 12.00.2)

    Состав программ:
    1. SystemResearch.exe - основная программа
    2. UI0Detect.exe - сервис (служба) для перехода в терминальную сессию (SessionId = 0)
    3. Wls0wndh.dll - вспомогательная подпрограмма для возврата из терминальной сессии
    4. FDUI0Input.sys - драйвер для устройств ввода-вывода в терминальной сессии

    Инструкция по установке для Windows 10/11:
    1. Файлы UI0Detect.exe и Wls0wndh.dll необходимо поместить в папку Windows\System32
    2. В SystemResearch.exe нажать кнопку Create UI0Detect Service
    3. Установить драйвер FDUI0Input.sys через FDUI0Input.inf
    4. Перезагрузить компьютер

    Перечислять все функции думаю смысла нет, всё интуитивно понятно.
    Списки с процессами и сервисами активируются по двойному щелчку мыши. Правой кнопкой мыши осуществляется обновление списков из контекстного меню.
    Также в программе реализованы всплывающие подсказки при наведении на определенные строки с выведенной информацией.
    Язык программы - английский.

    Из необычных особенностей - специально реализовывал открытие дескрипторов с минимально возможным набором прав. Интересно наблюдать как на это реагируют различные процессы.
    Например процесс csrss.exe - единственный процесс, который не показывает идентификатор сессии если не включена привилегия SeDebugPrivilege у вызывающего процесса.
    В свою очередь для юзермодных процессов можно включать привилегию SeSecurityPrivilege (т.к. используется флаг ACCESS_SYSTEM_SECURITY) заместо SeDebugPrivilege.

    Помимо прочего, при включении в Windows 10/11 изоляции ядра, подключаются гипервизор и два безопасных процесса - Secure System и LsaIso.exe с соответствующим уровнем доверия (Virtual Trust Level).
    Если Secure System является защищенным процессом, то LsaIso.exe спокойно отдаёт свои дескрипторы вызывающему процессу уровня системы. Это создаёт некоторое поле для маневра.

    В общем пока так. По мере свободного времени буду обновлять функционал программы.
     

    Вложения:

    • SystemResearch.zip
      Размер файла:
      41,5 КБ
      Просмотров:
      547
    • UI0Detect.zip
      Размер файла:
      22,7 КБ
      Просмотров:
      541
    • ZeroInput.zip
      Размер файла:
      316,4 КБ
      Просмотров:
      545
    R81..., mantissa, Rel и ещё 1-му нравится это.
  2. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    55
    С релизом Windows 11 23H2 (build 22631) драйвер FDUI0Input.sys перестал работать (как и предыдущие на предыдущих обновлениях ОС).
    Проблема ребят из FireDaemon в том, что они продолжают упорно привязывать свой драйвер к рабочему столу Default.
    При этом механизм переключения в терминальную сессию (winsta.dll) устроен таким образом, что переход осуществляется на рабочий стол Winlogon.
    Отсюда и все беды. Ждём следующего обновления драйвера.

    Пришлось переделать сервис UI0Detect под современные реалии: теперь подпрограмма для возврата из терминальной сессии Wls0wndh.dll запускается на рабочем столе Winlogon.
    При переключении в терминальную сессию вы увидите окно с кнопкой, но взаимодействовать с ним не сможете через клавиатуру и мышь.
    Сами клавиатура и мышь активируются ровно через 180 сек. (заложено в самой системе в драйвере win32kfull.sys), но взаимодействовать всё равно нельзя.
    Чтобы вернуться нужно: либо делать хардресет с кнопки и перезагружать ПК, либо написать программу с таймером, по истечение которого автоматически сработает механизм возврата.
    Загрузить такую программу можно через SystemResearch.exe (соответствующие коррективы для создания системных процессов в терминальной сессии я внёс).

    Данное обновление небольшое, немного нового функционала, оптимизация кода и исправление небольших багов.
    Теперь можно добавлять права Sacl и Dacl в вызывающий процесс для получения доступа к информации, содержащийся в этих Acl (будет реализовано позже).
    Также следует учитывать - Dacl для защищённых процессов получить пока что невозможно.
    Доработал механизм снятия защиты с сервисов.
    Обратите внимание: для снятия защиты с сервиса нужно, чтобы владельцем (owner) вызывающего процесса была СИСТЕМА (соответственно запуск с токеном Trusted Installer Token).
    Если у вас Windows 11 22H2 (build 22621) и более старые ОС новый (временный) файл сервиса UI0Detect.exe качать не нужно.
     

    Вложения:

    • SystemResearch.zip
      Размер файла:
      42,8 КБ
      Просмотров:
      535
    • UI0Detect.zip
      Размер файла:
      11,6 КБ
      Просмотров:
      547
    Последнее редактирование: 6 ноя 2023
    Mikl___ и Marylin нравится это.
  3. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    55
    Давно не обновлял свою утилиту SystemResearch (за это время много всего пофиксено, улучшено, добавлено нового функционала).
    Доработал полностью функционал по управлению сервисами\службами
    0.png 1.png 2.png

    Защита с сервиса снимается если утилита запущена с токеном Trusted Installer и после перезапуска сервиса, процесс будет запущен без защиты.
    Но это касается не всех сервисов, а только части:
    3.png

    Разобрался почему не работала терминальная сессия и в частности клавиатура\мышь.
    Оказалось встроенный в Windows 11 SuperVisor (изоляция ядра и памяти) блокировал драйвер FDUI0Input.sys
    Добавил функционал по распознаванию супервизора и последующий запрет на переход в терминальную сессию.
    Соответственно вернул правильные рабочие станции и рабочие столы для утилит UI0Detect.exe и Wls0wndh.dll

    Следующий этап - таблицы SACL и DACL.
     

    Вложения:

    • SystemResearch.rar
      Размер файла:
      40,8 КБ
      Просмотров:
      523
    • UI0Detect.rar
      Размер файла:
      21,7 КБ
      Просмотров:
      526
    • ZeroInput.zip
      Размер файла:
      316,4 КБ
      Просмотров:
      530
    Marylin и alex_dz нравится это.
  4. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    k3rnl, немножко глупый вопрос - а чем Ты дравера подписываешь?
     
  5. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    55
    UbIvItS, драйвер FDUI0Input.sys не мой. Это разработка FireDaemon https://kb.firedaemon.com/support/solutions/articles/4000123189
    Несколько раз я им помогал в тестировании и нахождении багов.

    А так, ещё в 2016 году, был опыт с EV сертификацией на сайте MS (LiveID аккаунт имеется).
    INF-файл, CAT-каталог, набор утилит (signtool, inf2cat, makecab).
    Далее предлагалось скачать файл winqual.exe и подписать его своим сертификатом, загружал на сервак для проверки валидности цифровой подписи.
    Как сейчас это работает не скажу точно, давно уже драйверами не занимаюсь.
     
    UbIvItS нравится это.
  6. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    55
    Обновил утилиту SystemResearch до версии 1.3.3 (переход с dev-билдов на более привычную модель версий). В основу лёг старый проект KernelExplorer (соответственно и наименование изменено).
    1.png 2.png 3.png 4.png 5.png

    Из нового:
    - токен локальной системы теперь берётся из smss.exe (неважно protected процесс или нет)
    - добавлен простой функционал удаления "занятых" файлов (если файл не удаётся удалить, он переименовывается и после перезагрузки ПК его можно удалить окончательно)
    - сводная информация о дескрипторе безопасности объектов ядра (SDDL строка с расшифровкой по таблицам SACL\DACL)
    - оптимизация алгоритмов выборки и перебора (для уменьшения объема кода (веса файла) и ускорения выполнения)
    - значительное сокращение глобальных переменных

    В планах:
    - расширенная информация о дескрипторе безопасности (advapi32.GetSecurityInfoEx)
    - расшифровка всех флагов, масок доступа, типов объектов, SID'ов\RID'ов и прочее
    - реализация функционала добавления ACE в списки управления доступом ACL

    Немного о доступе к SACL\DACL:
    DACL сервисов\служб читается без каких-либо дополнительных прав - просто запускаете (даже не от имени администратора) и получаете DACL.
    SACL сервисов\служб доступен при включенной привилегии SeSecurityPrivilege (соответственно требуется запуск с правами администратора).
    Доступ к SACL\DACL процессов и их токенов зависит от самих процессов. Для системных процессов SystemResearch должна быть запущена как система или выше (токены локальной системы или TrustedInstaller). Также необходимо включить права SACL и DACL в менеджере прав и привилегий.
    Для получения SDDL строки должна быть включена привилегия SeSecurityPrivilege.

    Скачать: SystemResearch.zip
    VirusTotal - Analysing file
     

    Вложения:

    Mikl___ нравится это.
  7. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    55
    Обновление утилиты до версии 1.3.4

    1.png 2.png

    Всю информацию об объекте ядра в списки ACL я занёс, кроме SE_OBJECT_TYPE (пока используемый метод не работает, позже постараюсь решить проблему).
    Из неудобств (временных) - TreeView не выводит строку длиннее 260 символов (касается некоторых списков прав доступа объекта, остальное всё умещается).
    Постарался структурировать TreeView так, чтобы было удобно читать.
    Пришлось повозиться с SACL процесса lsass.exe - в новых ОС он имеет два ACE. При получении структуры EXPLICIT_ACCESS (в частности перечисления ACCESS_MODE) вылетает 87 ошибка.
     

    Вложения:

    Mikl___ нравится это.
  8. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    55
    Обновление утилиты до версии 1.3.5

    1. Добавлена поддержка Windows 11 24H2
    - упорядочены сигнатуры для не экспортируемой функции GetSecurityInfoEx
    - исправлена битовая маска для преобразования номера билда ОС (в некоторых случаях таблицы SACL\DACL могли загружаться по неверному адресу, что приводило к аварийному завершению программы)
    2. Часть строковых переменных убрана из кода в ресурсы (данные)
    3. Разделение списка прав на объектные и общие (GeneralAccess) для более корректного вывода в строку TreeView
    4. Мелкие фиксы кода
     

    Вложения:

    Mikl___ и alex_dz нравится это.
  9. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    55
    Обновление утилиты до версии 1.3.6

    Дальнейшую разработку временно приостанавливаю.

    Из нового:
    - дескриптор токена процесса (любого, даже защищенного) открывается с правами, необходимыми для получения SDDL и таблиц SACL\DACL
    Не понимаю почему SystemInformer этого не умеет делать. Видимо не учли такой параметр как MandatoryLabelPolicy - у дескриптора процесса он NoWriteUp | NoReadUp, а у дескриптора токена NoWriteUp (что абсолютно не мешает читать его с определенным набором прав и привилегий)
    11.jpg
    22.jpg 33.jpg 44.jpg
    - поменял интерфейс (шрифт), заметил что на больших разрешениях (больше FullHD) окно программы слишком маленькое, соответственно переделал текстовые поля - теперь выделяется и копируется только значение, имя параметра статично (да и выравнивание с этим шрифтом делать легче)
    - добавил информацию о выделенном используемом пространстве самого ACL - Space used и Space free (размер заголовка ACL равен 8 байт)
    - доступ к ACL таблицам через SeSecurityPrivilege
    - изменить защиту сервиса через TrustedInstaller Token
    - пофиксил все баги, которые смог найти в коде
     

    Вложения:

    Mikl___, Marylin и alex_dz нравится это.