Глубины виртуализации Windows (часть 2) — память, которую не видит даже ядро: как устроены VBS, HVCI и Credential Guard

· Обновлено: · · Windows, Виртуализация, Безопасность, VBS, HVCI, Credential Guard

История изменений (первая версия, опубликована 22 Aug 2026)
Первая публикация
Цитирование статьи(DOI (зарегистрированный архив): 10.5281/zenodo.22176883)

Приведённые ниже DOI относятся к ранее зарегистрированным архивным версиям, которые могут отличаться от текущего текста. Для ссылки на текущий текст используйте URL этой страницы.

Го Комура (2026). Глубины виртуализации Windows (часть 2) — память, которую не видит даже ядро: как устроены VBS, HVCI и Credential Guard. KomuraSoft LLC. https://comcomponent.com/ru/blog/windows-virtualization-internals-vbs-hvci-credential-guard/

DOI (зарегистрированный архив)
10.5281/zenodo.22176883
DOI (последняя зарегистрированная версия)
10.5281/zenodo.22176884

Куда Windows кладёт секреты, которые не прочитать ни администратору, ни ядру? Часть 2 начинается с этого вопроса и следит, как работают VBS, HVCI и Credential Guard.

На традиционном Windows атакующий, который загрузил драйвер ядра от имени администратора и снял дамп памяти процесса LSASS, мог украсть хеши паролей и билеты Kerberos и использовать их для поперечного перемещения на другие машины.

На Windows 11, где работает Credential Guard, хеши защищаемых учётных данных домена нигде не лежат так, чтобы обычное ядро могло их искать. На устройствах, которые удовлетворяют лицензионным требованиям (Enterprise, Education и подобные) и аппаратным требованиям, эта защита по умолчанию включена начиная с 22H2.1 Требования и фактическое состояние работы — разные вещи, поэтому там, где она не работает, прежняя опасность никуда не делась.

Часть 1 показала структуру, в которой хостовый Windows работает в корневом разделе поверх гипервизора. Что разбирает эта статья — ещё одна граница, проведённая уже внутри того же раздела.

«Глубины виртуализации Windows» — все 3 части

Один и тот же гипервизор Windows смотрим в порядке основа → изоляция безопасности → применение к лёгким ВМ.

Часть Центральный вопрос
Часть 1: гипервизор и разделы Где работает хостовый Windows?
Часть 2: VBS, HVCI и Credential Guard (эта статья) Куда кладут секреты, которые не прочитать даже ядру?
Часть 3: WSL2, Windows Sandbox и контейнеры Почему можно сделать лёгким, сохранив изоляцию?

Что предполагает эта статья

Пункт Содержание
Кому Разработчики и эксплуатация, которые хотят понять, чем на деле являются изоляция ядра, целостность памяти и Credential Guard
Среда x64 Windows 10/11 или актуальный Windows Server. Разбор колец и SLAT рассчитан на x64; у Arm64 другой механизм, например уровни исключений
Фоновые знания Понятия разделов и SLAT из части 1
Сложность и охват Средний. Это не инструкция по настройке; объясняется устройство функций безопасности

Как читать эту статью

Что хотите узнать Какие разделы читать
Зачем нужна изоляция сильнее ядра и как она достигается Пределы традиционной модели в главе 2 → VSM, VTL и SLAT в главе 3
Что защищают HVCI и Credential Guard каждый Целостность кода в главе 4 → Учётные данные и область защиты в главе 5
Как отличить экран настроек от фактического состояния работы Как проверить в главе 6 → Ложные прочтения в главе 7

1. Сначала вывод

Windows добавила ось привилегий под названием VTL (Virtual Trust Level) и положила секреты в VTL1. Обычное ядро, которое работает в VTL0, не может прочитать память VTL1. Границу держит не само ядро, а гипервизор, у которого таблицы трансляции SLAT.

Это каркас безопасности на основе виртуализации (VBS). VBS с помощью гипервизора создаёт изолированную среду и размещает там функции безопасности. Замысел такой: даже если ядро скомпрометировано, изолированная среда остаётся защищённой.2

Два мира, которые создаёт VBSВнутри одного раздела есть VTL0 и VTL1; в VTL0 — обычное ядро и приложения, в VTL1 — Secure Kernel и изолированные функции безопасности; границу обеспечивает гипервизорVTL1 (изолированный мир)VTL0 (обычный мир)Читать нельзяИзолированные функции безопасностиSecure KernelПриложения (кольцо 3)Ядро NT и драйверы (кольцо 0)Гипервизор (обеспечивает границу через SLAT)

Рис. 1: Внутри одного Windows два мира, и ядро VTL0 не может обратиться к памяти VTL1.

Важно, что это не «ещё одна виртуальная машина». VTL0 и VTL1 находятся внутри одного раздела, внутри одного Windows. Дальше по шагам — как это разделение устроено.

На схеме сплошная линия обозначает отношение, которое выполняется всегда, а пунктирная — условное отношение (условия указаны в пояснении к каждому отношению на странице сведений). Полный список отношений (всего 22, с доказательствами и степенью уверенности) и определения основных понятий собраны на странице сведений карты знаний (на японском). Данные: JSON-LD / Turtle

2. Пределы модели колец — страж и охраняемое стоят на одной высоте

Традиционная безопасность Windows строилась на лестнице колец (уровней привилегий). Пользовательский режим (кольцо 3) охраняет режим ядра (кольцо 0). Кто тогда охраняет кольцо 0? Никто. Кольцо 0 — высшая привилегия.

У этой структуры две структурные слабости.

  • Ядро — не монолит. В кольце 0 работают не только сам Windows, но и множество сторонних драйверов. Если у любого из них есть уязвимость, атакующий получает выполнение кода в кольце 0.
  • Из кольца 0 видно всё. Как бы хорошо ни защищался пользовательский процесс вроде LSASS, атакующий, захвативший ядро, может свободно читать его память. Атрибуты защиты и таблицы страниц тоже управляются самим ядром.
Путь кражи учётных данных в традиционной модели колецАтакующий, который захватывает кольцо 0 через уязвимый драйвер, может читать память процесса LSASS с полной властью ядра и получить хеши паролейЭксплуатирует уязвимый драйверКод атакующегоЗахватывает кольцо 0Может читать всю физическую памятьПолучает хеши из памяти LSASSИспользуется для поперечного перемещения на другие машины

Рис. 2: Потому что страж (ядро) и охраняемое (секреты) стоят на одной высоте, фундаментальная слабость в том, что если падает кольцо 0, падает всё.

Значит, нужно «место выше кольца 0». Это место уже появилось в части 1. Гипервизор работает с привилегией выше ядра и с самого начала эксклюзивно управляет правами доступа к памяти ЦП (SLAT). Изолированная область, которую охраняет гипервизор, защищена даже от доступа со стороны системного ПО режима супервизора (кольцо 0).3

3. VSM и VTL — добавить ещё одну ось привилегий

Этот раздел идёт в порядке набор функций, который даёт изоляцию (VSM) → уровни изоляции (VTL) → механизм, который держит границу (SLAT) → код, который работает внутри. Имена похожи, но это не одно и то же.

3.1. Виртуальные уровни доверия (VTL)

Набор функций гипервизора, который даёт эту изоляцию, называется VSM (Virtual Secure Mode). VSM — основа для Device Guard, Credential Guard, виртуального TPM и подобных.3

Центральное понятие VSM — VTL (Virtual Trust Level). Ключевые пункты такие.3

  • VTL иерархичны, и чем больше номер, тем выше привилегия. VTL0 — самый низкий; VTL1 привилегированнее VTL0.
  • Архитектурно определено до 16 уровней, но сейчас реализованы два: VTL0 и VTL1.
  • У каждого VTL свои независимые защиты доступа к памяти. Гипервизор управляет этими защитами на физическом адресном пространстве раздела, поэтому системное ПО внутри раздела их не меняет.
  • У виртуального процессора отдельные состояние регистров и механизм прерываний на каждый VTL, и нижний VTL не может подсмотреть состояние верхнего.
Три независимые части, из которых складывается изоляция VTLЗащиты доступа к памяти, состояние регистров виртуального процессора и механизм прерываний независимы на каждый VTL, и нижний VTL не может тронуть ни одно из них в верхнем VTLЧто независимо на каждый VTLЗащиты доступа к памятиСостояние регистров виртуального процессораМеханизм прерыванийНижний VTL не может тронуть верхний VTL

Рис. 3: Сделать отдельным миром не только память, но и состояние ЦП и прерывания — набор из трёх частей, который не оставляет глазка.

Если кольца (0 и 3) — ось, которая отделяет «ОС и приложения», VTL — вторая ось, которая отделяет «обычный мир и изолированный мир». Две оси ортогональны, и внутри VTL1 тоже есть режим ядра и пользовательский режим.

Четыре области, которые создают две оси колец и VTLОсь колец отделяет режим ядра от пользовательского режима, ось VTL отделяет обычный мир от изолированного, и сочетание даёт четыре области: обычные приложения, ядро NT, трастлеты IUM и Secure KernelVTL1 (изолированный мир)VTL0 (обычный мир)Кольцо 3: IUM (трастлеты)Кольцо 0: Secure KernelКольцо 3: обычные приложенияКольцо 0: ядро NT и драйверы

Рис. 4: Теперь две оси привилегий, и «это ядро?» и «это изолированный мир?» стали разными вопросами.

3.2. Суть границы — SLAT

Часть 1 говорила, что таблицы трансляции второго уровня, которые отображают гостевые физические адреса (GPA) на фактическую ОЗУ (SPA), то есть SLAT, держит гипервизор. VSM пользуется именно этим свойством. Изоляция VTL строится с помощью гипервизора Hyper-V и SLAT.4

Когда VTL1 объявляет «эту память VTL0 не показывать», гипервизор снимает право доступа к этой странице из таблиц трансляции VTL0. С тех пор, даже если ядро VTL0 пытается тронуть этот адрес, ему отказывают на этапе трансляции адресов ЦП. Неважно, как ядро переписывает свои собственные таблицы страниц.

Таблицы страниц (GVA→GPA) могут принадлежать ядру, но трансляция за ними (GPA→SPA) и окончательное право доступа принадлежат гипервизору.

Как отказывают в доступе из VTL0 к памяти VTL1Когда ядро VTL0 пытается прочитать память VTL1, оно может пройти свои таблицы страниц, но ему отказывает защита доступа SLAT, и управление переходит гипервизоруНе разрешаетРазрешаетЯдро VTL0 пытается прочитать страницу VTL1Проходит собственные таблицы страниц ядраРазрешает ли защита доступа SLAT?Гипервизор вмешивается и отказывает в доступеОбычный доступ к памятиЗащищено на слое, который ядро не меняет

Рис. 5: Барьер сидит вне ядра, и защиту SLAT программное обеспечение внутри раздела не меняет.

Часть 1 серии про память говорила, что «VAD, PTE и атрибуты защиты решают, разрешён ли доступ». В среде VBS картина становится такой: после того как все они пройдены, всё ещё ждёт контрольная точка SLAT.

3.3. Secure Kernel и IUM

Что работает внутри VTL1 — не обычное ядро NT, а маленькое ядро под названием Secure Kernel. Пользовательский режим в VTL1 называется IUM (Isolated User Mode), а программы, которые там работают, — трастлеты (доверенные процессы).4

Трастлет не может делать что угодно так, как обычный процесс. Большинство его системных вызовов маршализуются ядру NT на стороне VTL0, которому поручают работу.4 VTL1 — не «верхний мир, который может всё»; его нарочно делают маленьким, как хранилище, которое держит секреты. Чем меньше кода можно внести в хранилище, тем меньше поверхность атаки.

Поток системных вызовов трастлетаТрастлет в VTL1 большинство системных вызовов сам не обрабатывает; он маршализует их ядру NT в VTL0 и получает только результат, поэтому VTL1 остаётся маленькимВ большинстве случаевТрастлет (IUM в VTL1)Нужен системный вызовПросит ядро NT в VTL0Получает только результатVTL1 остаётся маленьким и поверхность атаки сужается

Рис. 6: У хранилища нет своих удобств; оно отправляет работу наружу и продолжает охранять только секреты.

4. HVCI — проверять целостность кода ядра в хранилище

Две вещи, которые нужно понять про HVCI, — где выполняется проверка и что разрешено памяти после проверки. Сначала смотрим эту защиту, затем её влияние на совместимость драйверов.

4.1. Что проверяется

Первая характерная функция, которая сидит на VBS, — целостность памяти, то есть HVCI (целостность кода, защищённая гипервизором). У Windows есть механизм целостности кода, который осматривает драйверы режима ядра и двоичные файлы до старта и отказывается загружать неподписанные или недоверенные. HVCI выполняет эту проверку внутри изолированной среды VBS.2

Причина перенести саму логику проверки в VTL1 — как раз слабость главы 2. Если код проверки сидит внутри ядра VTL0, атакующий, захвативший ядро, может подменить проверку. Если он в VTL1, рука подмены до него не дотягивается.

Разница от того, где живёт код проверкиЕсли код проверки сидит внутри ядра VTL0, он отключается, как только ядро захвачено, а если в VTL1, даже атакующий, захвативший ядро, не дотягивается, и проверка остаётся защищённойВнутри ядра VTL0 (традиционно)Изолированная среда в VTL1 (HVCI)Атакующий, захвативший ядроГде живёт проверка целостности кода?Логику проверки можно подменитьПодмена вне досягаемостиНеподписанный код может выполняться в ядреПроверка продолжает работать после компрометации ядра

Рис. 7: Не кладите контрольную точку внутрь стороны, которую могут пробить; это перемещение логики проверки — суть HVCI.

4.2. Правила для исполняемых страниц

Эффект HVCI не ограничивается «осмотром при старте». Он также ограничивает выделение памяти ядра.5

  • Страница ядра становится исполняемой только после того, как прошла проверку целостности кода.
  • Исполняемая страница никогда не становится записываемой (так называемый W^X).

Когда эти два правила на месте, даже если уязвимость вроде переполнения буфера позволяет переписать память ядра, переписанное содержимое выполнить нельзя. Исполняемые страницы переписывать нельзя, а страницы, которые можно переписать, выполнять нельзя.5 Окончательная опора права исполнения — право исполнения на стороне SLAT, которым ядро VTL0 не манипулирует.

Пока страница ядра не станет исполняемой в среде HVCIЗапрос загрузки драйвера получает проверку целостности кода в изолированной среде VBS; если проходит, его допускают как исполняемую незаписываемую страницу, а если нет — блокируют и записывают в журнал CodeIntegrityПрошлаНе прошлаЗапрос загрузить и выполнить код ядраПроверка целостности кода в изолированной средеДопущена как исполняемая страница (запись запрещена)Загрузка заблокированаЗаписано в журнал CodeIntegrity Operational (событие 3087)Записываемые страницы остаются неисполняемыми

Рис. 8: Правило, которое никогда не даёт сосуществовать исполнению и записи, проверяется на стороне VTL1, и ядро VTL0 его не опрокидывает.

Если проследить это с точки зрения атакующего, видно, как правило срабатывает.

Как внедрение кода не срабатывает в среде HVCIДаже если уязвимость позволяет переписать память ядра, страница, в которую можно писать, не исполняема, а исполняемую страницу переписать нельзя с самого начала, поэтому внедрённый код никогда не выполняетсяЗаписываемая страницаИсполняемая страницаПопытаться подменить память ядра через уязвимостьКакая страница цель?Перепись удаётсяСама перепись невозможнаНо эта страница не исполняемаВнедрённый код выполнить нельзя

Рис. 9: Какой бы вход ни взять, упираетесь в тупик; в этом смысл никогда не давать пересекаться записываемым страницам и исполняемым.

4.3. Цена: совместимость драйверов

Это правило сталкивается с драйверами старой конструкции. Драйверы, которые переписывают свой код во время выполнения, не имеют подписи или требуют память, одновременно исполняемую и записываемую, в среде HVCI загрузить нельзя.

Факт блокировки можно подтвердить в Просмотре событий в Applications and Services Logs\Microsoft\Windows\CodeIntegrity\Operational (событие 3087 — характерное).6

Во многих случаях именно это стоит за жалобой «после того как я включил целостность памяти, периферия перестала работать». Правильное исправление — обновить драйвер до версии, совместимой с HVCI; отключение целостности памяти следует считать последним средством, которое целиком сдаёт защиту.

Если вы участвуете в этой проверке со стороны разработки драйверов, см. также статью о драйверах-фильтрах («Минифильтры Windows»).

Разбор, когда периферия перестаёт работать при целостности памятиОпределить заблокированный драйвер в журнале CodeIntegrity Operational; правильное исправление — обновить до версии, совместимой с HVCI, спросить у поставщика, если её нет, и считать отключение последним средством, которое никогда не делают постоянной настройкойДаНетУстройство перестаёт работать после включения целостности памятиОпределить заблокированный драйвер в журнале CodeIntegrityЕсть драйвер, совместимый с HVCI?Обновить и закрыть, оставив HVCI включённымПопросить у поставщика совместимую версиюОтключение — последнее средство, никогда не постоянная настройка

Рис. 10: Первое, на что смотреть, — не экран настроек, а журнал, и событие 3087 знает, какой драйвер заблокировали.

5. Credential Guard — хеши внутри LSAIso

Где HVCI охраняет целостность кода ядра, Credential Guard охраняет учётные данные. Мыслите приёмную, которая принимает аутентификацию, и место, где хранятся секреты, как две разные вещи — и устройство, и область защиты встанут на место.

5.1. LSASS и LSAIso

Вторая характерная функция, которая сидит на VBS, — ответ на загадку вступления: Credential Guard.

Традиционный Windows держал хеши NTLM и билеты Kerberos в памяти процесса LSA (lsass.exe). Когда Credential Guard включён, хранение защищаемых среди них секретов — хешей NTLM учётных данных домена и TGT Kerberos (Ticket Granting Tickets) — переезжает в LSAIso.exe, трастлет, который работает в IUM в VTL1.7

  • lsass.exe (VTL0) продолжает работать как приёмная обработки аутентификации, как раньше.
  • Фактические секреты держит LSAIso.exe (VTL1), и из VTL0 к ним доступа нет.
  • Двое общаются через RPC (Remote Procedure Call).
  • LSAIso не размещает драйверы устройств вовсе и держит только минимальный набор подписанных двоичных файлов. Подписи проверяются по сертификату, которому доверяет VBS.7
Где лежат учётные данные, когда Credential Guard включёнlsass в VTL0 как приёмная аутентификации общается с LSAIso в VTL1 через RPC; фактические хеши и TGT защищаемых учётных данных домена держит LSAIso, поэтому атакующий, который получает права администратора в VTL0 и снимает дамп lsass, всё равно не получает сами защищаемые секретыVTL1VTL0RPCДамп памятиНе дотягиваетсяLSAIso.exe (хранилище секретов)lsass.exe (приёмная аутентификации)Атакующий (права администратора)

Рис. 11: Потому что приёмную и хранилище разделили, дамп lsass больше не даёт фактические хеши защищаемых учётных данных домена.

Условия включения по умолчанию

Начиная с Windows 11 версии 22H2 VBS и Credential Guard по умолчанию включены на устройствах, которые удовлетворяют лицензионным требованиям (Enterprise E3/E5, Education A3/A5) и аппаратным требованиям. На редакциях вроде Pro Credential Guard автоматически не включают (есть исключения, например машина, которую включили под подходящей лицензией в прошлом и затем понизили).1

Эта защита учётных данных — не вопрос особого дополнительного продукта; это стандартное состояние актуального Windows на подходящих редакциях.

Поток учётных данных от входа до аутентификацииПосле входа фактические секреты хранятся в LSAIso в VTL1; каждый раз, когда нужна аутентификация, lsass в VTL0 запрашивает вычисление через RPC, и в VTL0 возвращается только результат обработки аутентификации, без самих защищаемых долгоживущих секретовЗапрашивает вычисление через RPCВозвращает результат (никогда секрет)Пользователь входитlsass обрабатывает как приёмнаяФактические секреты хранятся в LSAIsoПозднейшие запросы аутентификации

Рис. 12: Сами защищаемые долгоживущие секреты никогда не покидают хранилище; что возвращается в VTL0 — результат обработки аутентификации, например билет.

5.2. Точно знать, что не защищается

Учётные данные, которые защищаются

Credential Guard — не универсальный щит. Что он защищает — хеши NTLM учётных данных домена, TGT Kerberos (Ticket Granting Tickets) и всё, что сохранено как учётные данные домена.

Вне области

Следующее в область не входит.8

  • Служебные билеты Kerberos (TGT защищаются)
  • Учётные данные локальных учётных записей и учётных записей Майкрософт
  • Кража ввода кейлоггером и физические атаки
  • Учётные данные на путях, которые используют NTLMv1, MS-CHAPv2, Digest или CredSSP
  • Внутренности стороннего ПО, которое само управляет учётными данными

Отдельно от области защиты проверяйте и совместимость аутентификации

Кроме того, когда Credential Guard включён, NTLMv1, неограниченное делегирование Kerberos и подобное больше нельзя использовать, поэтому бизнес-системам, которые зависят от устаревшей аутентификации, нужна проверка совместимости.8 Это не «включили и готово»; понять, что внутри и вне области защиты, и остальное закрыть другими контролями — правильный способ пользоваться этим на практике.

Область защиты Credential GuardХеши NTLM домена и TGT и сохранённые учётные данные домена защищаются, а служебные билеты, локальные учётные записи, кейлоггеры, физические атаки и учётные данные, которые приложение хранит само, вне областиНа какой стороне области защиты этот секрет?Хеши NTLM домена и TGTСлужебные билеты и локальные учётные записиЗащищены в LSAIsoНе защищены (нужны другие контроли)Нажатия клавиш, физические атаки и частные хранилища приложений тоже вне области

Рис. 13: Область защиты проведена ясной линией, а снаружи линии закрывают многофакторной аутентификацией и проектом на стороне приложения.

6. Посмотрите сами

Состояние работы VBS и каждой функции можно проверить на своей машине. Читайте состояние VBS, основы, отдельно от состояния служб, которые работают поверх неё.

6.1. Проверить VBS и работающие службы в PowerShell

Get-CimInstance -Namespace root/Microsoft/Windows/DeviceGuard `
    -ClassName Win32_DeviceGuard |
    Select-Object VirtualizationBasedSecurityStatus,
                  SecurityServicesConfigured,
                  SecurityServicesRunning

Вывод читайте так.9

  • Если VirtualizationBasedSecurityStatus равен 2, VBS включён и работает.
  • Если SecurityServicesRunning содержит 1, работает Credential Guard; если содержит 2, работает целостность памяти (HVCI).

6.2. Читать msinfo32 и экран настроек по-разному

Чтобы проверить состояние работы в графическом интерфейсе, смотрите поле «Безопасность на основе виртуализации» в msinfo32 (там перечислены работающие службы, например «Целостность кода, принудительно применяемая гипервизором»).

Переключатель «Целостность памяти» в «Безопасность устройства > Изоляция ядра» в приложении «Безопасность Windows» — экран, который отражает настройку. Он может выглядеть включённым, пока HVCI на деле не работает, например пока ждётся перезагрузка сразу после включения или когда при старте есть проблема совместимости, поэтому работаете ли вы судите по msinfo32 или по SecurityServicesRunning в Win32_DeviceGuard.6

6.3. Не судите «работает» только по наличию процесса

Есть и след на вкладке «Подробности» Диспетчера задач. На машине, где работает VBS, вы увидите процесс «Secure System». LsaIso.exe — процесс, который появляется, когда служба Isolated LSA размещена в VTL1, и в конфигурации, где включён только HVCI, он обычно не появляется.

Наличие или отсутствие процесса — только след, поэтому работает ли Credential Guard судите по SecurityServicesRunning (содержит ли 1), как выше. Оба — окна, видимые из VTL0, в мир на стороне VTL1.

Порядок проверки, что функции, связанные с VBS, работаютПодтвердить, что VBS работает, запросом к Win32_DeviceGuard, судить, работают ли Credential Guard и HVCI, по значениям SecurityServicesRunning, и смотреть журнал CodeIntegrity при проблемах с драйверамиНетДаСодержит 1Содержит 2Запросить Win32_DeviceGuardСтатус VBS равен 2?VBS не работает (проверить требования и настройки)Что содержит SecurityServicesRunning?Credential Guard работаетЦелостность памяти (HVCI) работаетПри проблемах с драйверами смотреть журнал CodeIntegrity (3087)

Рис. 14: Проверка состояния идёт тремя этапами: сам VBS, каждая служба поверх него и журнал, когда возникает проблема.

7. Три ложных прочтения, которых избегать на практике

7.1. «Защищать права администратора достаточно. VBS — история для серверов»

Что предотвращает Credential Guard — распространение ущерба после того, как права администратора уже взяты (извлечение хешей и поперечное перемещение). Иными словами VBS — один слой защиты в глубину, который предполагает компрометацию, и окупается он на клиентских ПК. На Windows 11, который удовлетворяет требованиям, включение по умолчанию — норма, поэтому правильная поза — не «это к нам не относится», а «управлять совместимостью из допущения, что оно уже работает».

Этапы компрометации и где срабатывает VBSНачальный доступ закрывают другие контроли вроде многофакторной аутентификации и обучения; HVCI блокирует внедрение кода в ядро, которое следует за повышением привилегий; Credential Guard блокирует кражу защищаемых секретов домена и поперечное перемещение, но не дотягивается до секретов вне своей областиНачальный доступ (фишинг и подобное)Повышение привилегийВнедрение кода в ядроКража защищаемых секретов домена и поперечное перемещениеMFA, обучение и EDR закрывают этоHVCI блокирует этот шагCredential Guard блокирует это (только защищаемые секреты)

Рис. 15: VBS — не технология «не пускать»; это технология «не дать выиграть, когда уже внутри», и этап, который она охраняет, другой.

7.2. «Если целостность памяти создаёт проблему, просто выключите»

Выключение на время заставит вещи работать, но снимает барьер против внедрения кода в ядро целиком. Правильное исправление — сначала определить заблокированный драйвер в журнале CodeIntegrity, затем применить обновлённую версию поставщика. Даже когда выключаете временно для проверки, рекомендуем практику эксплуатации, которая никогда не делает это постоянной настройкой.

7.3. «С Credential Guard пароли украсть нельзя»

Это самоуверенность, рождённая путаницей области защиты. Служебные билеты, локальные учётные записи, сами нажатия клавиш и учётные данные, которые приложение хранит само, вне области.8 Фишинг и кейлоггеры нуждаются в других контролях (многофакторная аутентификация, Windows Hello и пересмотр того, как само приложение управляет учётными данными).

8. Итог

  • VBS с помощью гипервизора создаёт изолированную среду и защищает функции безопасности из допущения, что ядро будет скомпрометировано.2
  • Единица изоляции — VTL; сейчас реализованы два уровня, VTL0 (обычный мир) и VTL1 (Secure Kernel и IUM).3
  • Суть границы — защита доступа к памяти SLAT, которую программное обеспечение внутри раздела, включая ядро, не меняет.3
  • HVCI выполняет проверку целостности кода в изолированной среде и принуждает «не исполняемо, пока проверка не прошла» и «исполняемые страницы не записываемы».5 Цена — нужно управлять совместимостью драйверов.6
  • Credential Guard изолирует хеши NTLM и TGT учётных данных домена в LSAIso в VTL1. Начиная с Windows 11 22H2 он по умолчанию включён на устройствах, которые удовлетворяют лицензионным требованиям (Enterprise, Education) и аппаратным требованиям (используйте это вместе с проверкой состояния работы).71
  • Состояние работы можно проверить по SecurityServicesRunning в Win32_DeviceGuard (1 = Credential Guard, 2 = HVCI).9

Продолжение — часть 3, «Виртуальные машины, которые загружаются за секунды — WSL2, Windows Sandbox и контейнеры».

До сих пор мы смотрели на виртуализацию со стороны «силы изоляции». Финальный выпуск смотрит с противоположной стороны, «лёгкости», и следит, где лёгкие ВМ, которые сбросили вес полной ВМ, срезают углы.

Похожие статьи

Смежные области консультирования

KomuraSoft LLC занимается расследованием совместимости Windows-приложений с функциями безопасности, анализом сбоев, вызванных драйверами, и технической проверкой внутренних ПК-сред.

Справочные ссылки

  1. Microsoft Learn, Credential Guard overview. О том, что Credential Guard по умолчанию включают начиная с Windows 11 версии 22H2 на устройствах, которые удовлетворяют лицензионным, аппаратным и программным требованиям и не были явно отключены; подходящие редакции/лицензии — Enterprise (E3/E5) и Education (A3/A5), Pro вне области; и машина Pro, которую ранее включили под подходящей лицензией, остаётся кандидатом на включение по умолчанию после понижения. ↩ ↩2 ↩3

  2. Microsoft Learn, Virtualization-based Security (VBS). О том, что VBS использует аппаратную виртуализацию и гипервизор Windows, чтобы создать изолированную среду и сделать её корнем доверия ОС из допущения, что ядро может быть скомпрометировано; целостность памяти выполняет проверку целостности кода режима ядра внутри этой изолированной среды; и SLAT — обязательное требование для VBS. ↩ ↩2 ↩3

  3. Microsoft Learn, Virtual Secure Mode. О том, что VSM — основа для Device Guard, Credential Guard, виртуального TPM и подобных; доступ к изолированным областям контролируется только через гипервизор и защищён даже от системного ПО кольца 0; VTL иерархичны, из максимума 16 реализованы 2; и защиты доступа к памяти на каждый VTL системное ПО внутри раздела не меняет. ↩ ↩2 ↩3 ↩4 ↩5

  4. Microsoft Learn, Isolated User Mode (IUM) Processes. О том, что VSM создаёт VTL с помощью гипервизора Hyper-V и SLAT; Secure Kernel и IUM работают в VTL1; трастлеты маршализуют системные вызовы ядру VTL0; и LSAIso работает в VTL1 и общается с lsass через RPC. ↩ ↩2 ↩3

  5. Microsoft Learn, Memory integrity and virtualization-based security. О том, что целостность памяти (HVCI) выполняет проверку целостности кода в изолированной среде, и о том, что страницы памяти ядра становятся исполняемыми только после прохождения проверки, а исполняемые страницы никогда не становятся записываемыми. ↩ ↩2 ↩3

  6. Microsoft Learn, Memory integrity and VBS enablement. О том, что целостность памяти по умолчанию включают при чистой установке Windows 11, когда оборудование совместимо; о проверке состояния в msinfo32 и приложении «Безопасность Windows»; и о подтверждении заблокированного драйвера через событие 3087 в журнале CodeIntegrity Operational. ↩ ↩2 ↩3

  7. Microsoft Learn, How Credential Guard works. О том, что LSA общается с изолированным процессом LSA (LSAIso.exe), чтобы хранить секреты, когда Credential Guard включён; хранимые данные защищены VBS и недоступны из остальной ОС; и изолированный процесс LSA не размещает драйверы устройств и держит только минимальный набор двоичных файлов с проверенной подписью. ↩ ↩2 ↩3

  8. Microsoft Learn, Credential Guard protection limits. О том, что служебные билеты, локальные учётные записи, кейлоггеры, физические атаки и подобное вне области защиты Credential Guard; TGT защищаются, а служебные билеты — нет; и NTLMv1 и неограниченное делегирование становятся непригодными, когда он включён. ↩ ↩2 ↩3

  9. Microsoft Learn, Enable virtualization-based protection of code integrity. О том, как проверить состояние VBS и целостности памяти через класс Win32_DeviceGuard, и о смысле значений SecurityServicesRunning (1 — Credential Guard, 2 — целостность памяти). ↩ ↩2

Недавние статьи с теми же тегами помогут подробнее изучить близкие темы.

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

Статья напрямую связана со следующими услугами.

Частые вопросы

Вопросы, которые часто возникают при консультациях по теме статьи.

Одно и то же ли VBS (безопасность на основе виртуализации) и изоляция ядра?
Строго говоря, нет. VBS — базовая технология, которая с помощью гипервизора создаёт изолированную среду. «Изоляция ядра» в приложении «Безопасность Windows» — название экрана, на котором собраны несколько механизмов защиты, построенных поверх VBS. Главный из них — «Целостность памяти»: так в интерфейсе называется HVCI (целостность кода, защищённая гипервизором). Работает ли конкретная служба, смотрите не по экрану, а запросом к Win32_DeviceGuard.
Память VTL1 действительно нельзя прочитать даже с правами администратора и из драйвера ядра?
Нельзя. Защиту доступа к памяти для каждого VTL задаёт гипервизор на физическом адресном пространстве раздела; программное обеспечение внутри раздела её не меняет. Даже коду, который выполняется в ядре (кольцо 0), доступ из VTL0 к памяти VTL1 запрещён.
Почему после включения целостности памяти (HVCI) драйвер иногда перестаёт работать?
В среде HVCI страница ядра становится исполняемой только после успешной проверки целостности, а запись в исполняемые страницы запрещена. Неподписанный драйвер или драйвер старой конструкции, который патчит исполняемую память, этим правилам не удовлетворяет, и загрузка блокируется. Факт блокировки смотрите в журнале CodeIntegrity Operational (событие 3087 и соседние).
Что защищает Credential Guard и чего не защищает?
В изолированной среде он защищает NTLM-хеши паролей учётных данных домена, TGT Kerberos и то, что приложения сохранили как учётные данные домена. Служебные билеты Kerberos, учётные данные локальных учётных записей и учётных записей Майкрософт, перехват ввода кейлоггером и физические атаки в область защиты не входят.
Где проверить, что VBS работает?
Поле «Безопасность на основе виртуализации» в msinfo32 либо класс Win32_DeviceGuard в пространстве имён root/Microsoft/Windows/DeviceGuard через PowerShell. Если в SecurityServicesRunning есть 1 — работает Credential Guard; если есть 2 — работает целостность памяти (HVCI).

Об авторе

Страница с профилем автора статьи.

Го Комура

Представитель KomuraSoft LLC

Специализируется на разработке программного обеспечения для Windows, техническом консалтинге и расследовании сбоев, особенно в проектах с унаследованными системами и трудно воспроизводимыми ошибками.

Публичные ссылки

Вернуться в блог