Поделиться через


Проверка целостности кода

Целостность памяти — это функция безопасности на основе виртуализации (VBS), доступная в Windows 10, Windows 11 и Windows Server 2016 и более поздних версиях. Целостность памяти и VBS улучшают модель угроз Windows и обеспечивают более надежную защиту от вредоносных программ, пытающихся использовать ядро Windows. VBS использует гипервизор Windows для создания изолированной виртуальной среды, которая становится корнем доверия операционной системы, предполагающей, что ядро может быть скомпрометировано. Целостность памяти — это критически важный компонент, который защищает и защищает Windows, запуская целостность кода в режиме ядра в изолированной виртуальной среде VBS. Целостность памяти также ограничивает выделение памяти ядра, которое может использоваться для компрометации системы, гарантируя, что страницы памяти ядра становятся исполняемыми только после прохождения проверок целостности кода в безопасной среде выполнения, а сами исполняемые страницы никогда не записываются.

Примечание

Целостность памяти иногда называется защищенной гипервизором целостности кода (HVCI) или принудительной целостностью кода низкоуровневой оболочкой. Изначально она была выпущена как часть Device Guard. Device Guard больше не используется, кроме как для поиска параметров целостности памяти и VBS в групповая политика или реестре Windows.

Проверки целостности кода обеспечивают совместимость с требованиями к использованию памяти ядра и выявляют следующие нарушения:

Код ошибки Проблема целостности кода
0x2000:
  • 2 — адрес в коде драйвера, по которому была обнаружена ошибка.
  • 3 — тип пула.
  • 4 — тег пула (если он указан).

Вызывающий объект указал тип исполняемого пула. (Ожидается: NonPagedPoolNx)
0x2001:
  • 2 — адрес в коде драйвера, по которому была обнаружена ошибка.
  • 3. Защита страниц (WIN32_PROTECTION_MASK).
Вызывающий объект указал защиту исполняемой страницы. (Ожидается: очищенные биты PAGE_EXECUTE*)
0x2002:
  • 2 — адрес в коде драйвера, по которому была обнаружена ошибка.
  • 3 — приоритет страницы (MM_PAGE_PRIORITY логически или с MdlMapping*).
Вызывающий объект указал сопоставление исполняемого файла MDL. (Ожидается: MdlMappingNoExecute).
0x2003:
  • 2 — имя файла изображения (строка Юникода).
  • 3 — адрес заголовка раздела.
  • 4 — имя раздела (строка в кодировке UTF-8).
Изображение содержит исполняемый и записываемый раздел.
0x2004:
  • 2 — имя файла изображения (строка Юникода).
  • 3 — адрес заголовка раздела.
  • 4 — имя раздела (строка в кодировке UTF-8).
Изображение содержит раздел, который не выровнен по страницам.
0x2005:
  • 2 — имя файла изображения (строка Юникода).
  • 3— каталог IAT.
  • 4 — имя раздела (строка в кодировке UTF-8).
Образ содержит IAT, расположенный в разделе исполняемого файла.

Активация этого параметра:

Вы можете активировать проверку целостности кода для одного или нескольких драйверов с помощью диспетчера проверки драйверов или командной строки Verifier.exe. Дополнительные сведения см. в разделе Выбор параметров средства проверки драйверов. Необходимо перезагрузить компьютер, чтобы активировать или отключить параметр проверки целостности кода.

  • В командной строке

    В командной строке проверка целостности кода представлена 0x02000000 (бит 25). Пример:

    verifier /flags 0x02000000 /driver MyDriver.sys

    Функция будет активна после следующей загрузки.

  • Использование диспетчера проверки драйверов

  1. Запустите диспетчер проверки драйверов. Введите Verifier в окне командной строки.
  2. Выберите Создать пользовательские параметры (для разработчиков кода) и нажмите кнопку Далее.
  3. Выберите (проверка) проверку целостности кода.
  4. Перезагрузите компьютер.

Реализация кода, совместимого с целостностью памяти