Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Windows 10 представила новую функцию безопасности с именем "Виртуальный безопасный режим" (VSM). VSM использует гипервизор Hyper-V и преобразование адресов второго уровня (SLAT) для создания набора режимов, называемых виртуальными уровнями доверия (VT). Эта новая архитектура программного обеспечения создает границу безопасности, чтобы предотвратить выполнение процессов в одном VTL от доступа к памяти другого VTL. Преимущество этой изоляции включает дополнительную защиту от эксплойтов ядра при защите таких ресурсов, как хэши паролей и ключи Kerberos.
На схеме 1 показана традиционная модель режима ядра и код пользовательского режима, выполняемый в кольце ЦП 0 и кольце 3 соответственно. В этой новой модели код, выполняемый в традиционной модели, выполняется в VTL0, и он не может получить доступ к более привилегированным VTL1, где безопасный ядро и изолированный режим пользователя (IUM) выполняют код. Списки виртуальных столов являются иерархиальными, что означает, что любой код, выполняемый в VTL1, является более привилегированным, чем код, выполняемый в VTL0.
Изоляция VTL создается гипервизором Hyper-V, который назначает память во время загрузки с помощью преобразования адресов второго уровня (SLAT). Он продолжает это динамически при запуске системы, защищая память безопасного ядра указывает, что требуется защита от VTL0, так как она будет использоваться для хранения секретов. Так как для двух виртуальных списков выделены отдельные блоки памяти, для VTL1 создается безопасная среда выполнения, назначая монопольные блоки памяти VTL1 и VTL0 с соответствующими разрешениями доступа.
схема 1 — архитектура IUM
схема
Trustlets
Trustlets (также известные как доверенные процессы, безопасные процессы или процессы IUM) — это программы, работающие как процессы IUM в VSM. Они выполняют системные вызовы путем маршаллинга их до ядра Windows, работающего в кольце VTL0 0. VSM создает небольшую среду выполнения, которая включает небольшое безопасное ядро, выполняемое в VTL1 (изолировано от ядра и драйверов, работающих в VTL0). Четкое преимущество безопасности — изоляция страниц пользовательского режима доверия в VTL1 от драйверов, работающих в ядре VTL0. Даже если режим ядра VTL0 скомпрометирован вредоносными программами, он не будет иметь доступа к страницам процесса IUM.
С включенной функцией VSM среда локального центра безопасности (LSASS) выполняется как доверенный объект. LSASS управляет локальной системной политикой, проверкой подлинности пользователей и аудитом при обработке конфиденциальных данных безопасности, таких как хэши паролей и ключи Kerberos. Чтобы использовать преимущества безопасности VSM, доверенный объект с именем LSAISO.exe (LSA Isolated) выполняется в VTL1 и взаимодействует с LSASS.exe работает в VTL0 через канал RPC. Секреты LSAISO шифруются перед отправкой в LSASS, запущенные в обычном режиме VSM, и страницы LSAISO защищены от вредоносного кода, работающего в VTL0.
схема 2 — конструктор доверия LSASS
макета доверия lsass
Последствия изолированного пользовательского режима (IUM)
Невозможно подключиться к процессу IUM, препятствуя отладке кода VTL1. Это включает в себя отладку дампов памяти и подключение средств отладки для динамической отладки. Он также включает попытки привилегированных учетных записей или драйверов ядра загрузить библиотеку DLL в процесс IUM, внедрить поток или доставить APC в режиме пользователя. Такие попытки могут привести к дестабилизации всей системы. API Windows, которые будут компрометации безопасности Trustlet, могут завершиться неожиданной ошибкой. Например, загрузка библиотеки DLL в trustlet сделает ее доступной в VTL0, но не VTL1. QueueUserApc может автоматически завершиться ошибкой, если целевой поток находится в объекте Trustlet. Другие API, такие как CreateRemoteThread, VirtualAllocEx и Read/WriteProcessMemory, также не будут работать должным образом при использовании для Trustlets.
Используйте приведенный ниже пример кода, чтобы предотвратить вызов любых функций, которые пытаются подключить или внедрить код в процесс IUM. К ним относятся драйверы ядра, которые очереди API-интерфейсы для выполнения кода в доверенном объекте.
Замечания
Если состояние возврата IsSecureProcess успешно выполнено, проверьте параметр SecureProcess _Out_, чтобы определить, является ли процесс процессом IUM. Процессы IUM помечены системой как "Безопасные процессы". Логический результат TRUE означает, что целевой процесс имеет тип IUM.
NTSTATUS
IsSecureProcess(
_In_ HANDLE ProcessHandle,
_Out_ BOOLEAN *SecureProcess
)
{
NTSTATUS status;
// definition included in ntddk.h
PROCESS_EXTENDED_BASIC_INFORMATION extendedInfo = {0};
PAGED_CODE();
extendedInfo.Size = sizeof(extendedInfo);
// Query for the process information
status = ZwQueryInformationProcess(
ProcessHandle, ProcessBasicInformation, &extendedInfo,
sizeof(extendedInfo), NULL);
if (NT_SUCCESS(status)) {
*SecureProcess = (BOOLEAN)(extendedInfo.IsSecureProcess != 0);
}
return status;
}
WDK для Windows 10, "Комплект драйверов Windows — Windows 10.0.15063.0", содержит необходимое определение структуры PROCESS_EXTENDED_BASIC_INFORMATION. Обновленная версия структуры определена в ntddk.h с новым полем IsSecureProcess.
typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
SIZE_T Size; // Ignored as input, written with structure size on output
PROCESS_BASIC_INFORMATION BasicInfo;
union {
ULONG Flags;
struct {
ULONG IsProtectedProcess : 1;
ULONG IsWow64Process : 1;
ULONG IsProcessDeleting : 1;
ULONG IsCrossSessionCreate : 1;
ULONG IsFrozen : 1;
ULONG IsBackground : 1;
ULONG IsStronglyNamed : 1;
ULONG IsSecureProcess : 1;
ULONG IsSubsystemProcess : 1;
ULONG SpareBits : 23;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION;