Команда, с которой я работаю, недавно столкнулась с проблемой обеспечения совместимости нашего программного обеспечения со сторонним программным обеспечением для виртуализации.Это программное обеспечение использует драйвер ядра для выполнения перехвата API собственного реестра Windows (ZwCreateKey
и т. Д.).Это работает путем перехвата вызовов в Ntdll.Наше программное обеспечение также находится на довольно низком уровне, и в некоторых контекстах требуется доступ к реальному реестру без перехвата.
Мы изучаем возможность использования нашего собственного драйвера ядра для вызова ZwCreateKey
и т. Д. От нашего имени.обойти их зацепками.По сути это означало создание драйвера NT Legacy и библиотеки пользовательского режима, которая обеспечивает собственные функции реестра.Библиотека и драйвер очень просты, мы просто используем IOCTL для передачи всех параметров для ZwCreateKey
и т. Д. В наш драйвер, затем вызываем версию вызова ядра и возвращаем результаты.
Подход имеетсработал хорошо, и у нас, похоже, теперь есть система чтения / записи в реальном реестре при виртуализации.Единственная проблема заключается в том, что наша новая система, по-видимому, обеспечивает безопасность Windows для объектов реестра.
ZwCreateKey
принимает маску доступа примерно так:
NTSTATUS ZwCreateKey(
__out PHANDLE KeyHandle,
__in ACCESS_MASK DesiredAccess,
__in POBJECT_ATTRIBUTES ObjectAttributes,
__reserved ULONG TitleIndex,
__in_opt PUNICODE_STRING Class,
__in ULONG CreateOptions,
__out_opt PULONG Disposition
);
Насколько я понимаю, хотя мы теперь работали в режиме ядра, у нас все еще был контекст токена пользователя.Это должно означать, что версия ядра ZwCreateKey
не будет работать так же, как и пользовательская, если тест с маской доступа не пройден.На самом деле происходит то, что даже с ограниченным токеном, когда вызывается наш драйвер, он может создавать ключи в ограниченных частях HKLM при вызове ограниченным пользователем.Что дает?Должны ли мы сами выполнять проверки ACL?Нужно ли что-то делать, чтобы ограничить наши собственные привилегии в режиме ядра?Любая помощь высоко ценится.