Разбираемся в новом API KLoader. Часть 1: Общие сведения
Запись от _lunar_ размещена 25.05.2022 в 00:56
Показов 2734
Комментарии 0
|
Во-первых, сразу уточню, что новый API доступен только в Windows 11. В более старых версиях ОС не ищите, его там нет. Уже и не помню каким образом я наткнулся на ветку реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\KLoaderно результат запроса на открытие меня немного удивил Отказано в доступе с учётом того, что Реестр по умолчанию открывается с правами администратора с соответствующим запросом UAC. "Не на того напал" - подумал я и повысил права на Реестр до системного процесса через KernelExplorer Посмотрев кому разрешён туда доступ снова был немного удивлён Только TrustedInstaller имеет полный доступ к этой ветке Реестра, и даже СИСТЕМА ограничена на ReadOnly Стало интересно что это за Kernel_Loader такой (KLoader видимо расшифровывается именно так). В каталоге {9C0B898D-6275-48EC-81B4-E5EDBE44B535} есть только один строковый ключ с именем сервиса - ExecutionContext.Находим этот сервис в KernelExplorer и смотрим что это такое Информации немного: данный сервис лишь только взводит одноимённый драйвер ExecutionContext.sys Примечательно, что драйвер не запускается вместе с системой (SERVICE_NEVER_STARTED), и никаких триггеров запуска тоже нет. Есть только его SID S-1-5-80-3864825158-175547187-713465520-1238131867-1407735089Идём дальше. Берём драйвер ExecutionContext.sys и скармливаем его дизассемблеру IDA. Переходим на точку входа DriverEntry и видимо вот такую красоту Интерес здесь вызывают две функции - internal (внутренняя) функция WppLoadTracingSupport и импортируемая из драйвера ndis.sys KLoaderRegisterModuleВнутри WppLoadTracingSupport вызывается очень интересная процедура ядра ОС MmGetSystemRoutineAddress Эту процедуру может экспортировать только ядро или HAL (в старых версиях Windows 10, когда HAL ещё не переехал в ядро). Суть этой функции очень проста - она возвращает указатель на функции внутри ntoskrnl.exe (как GetProcAddress в юзермоде)
Теперь есть понимание, что API KLoader находится в драйвере ndis.sys Открываем его в дизассемблере IDA и видим, что программный интерфейс включает в себя три экспортируемые internal функции и одну не экспортируемую Я составил их прототипы
KLOADER_MODULE_CHARACTERISTICS и KLOADER_REFERENCE_MODULE_CONFIG пока сказать не могу.API KLoader появился в Windows 11 (возможно даже только в свежих сборках) и никакой информации в интернете нет. Символы тоже картины не проясняют ни в IDA, ни в WinDbg. Относительно лёгкое понимание есть по двум функциям: KLoaderReferenceModule - на вход подаётся сконфигурированная информация, а на выходе инициализируется дескриптор.KLoaderDereferenceModule - здесь всё просто: процедура KLoaderDereferenceModule уменьшает количество ссылок объекта на единицу.KLoaderRegisterModule - функция оперирует объектом драйвера и некоторыми атрибутами.KLoaderQueryDispatchTable - это внутренняя процедура, которая получает доступ к таблице guid'ов.В классе ExecutionContextLibrary инициализируется KLoaderReferenceModule через GUID
![]() То, что я описал очень поверхностно и многое требует так называемого deep internal исследования, которое будет в следующей части. Разбираемся в новом API KLoader. Часть 2: Deep Internal Research | ||||||||||||||||||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии



