Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Параметр "Проверка безопасности" средства проверки драйверов отслеживает драйвер на наличие распространенных ошибок, которые могут привести к уязвимостям безопасности. Этот параметр доступен начиная с Windows Vista.
В частности, параметр проверки безопасности ищет следующее неправильное поведение драйвера:
Вызов подпрограмм ядра ZwXxx с адресами пользовательского режима в качестве параметров. Когда драйвер вызывает все подпрограммы ZwXxx , средство проверки драйверов проверяет, что ни один из параметров не является адресами пользовательского режима. При вызове любой подпрограммы ZwXxx текущий KPROCESSOR_MODE становится KernelMode, и все параметры, передаваемые этой подпрограмме, рассматриваются как адреса в режиме ядра. Таким образом, драйвер должен проверять все буферы пользовательского режима, полученные от приложений, и помещать его в память в режиме ядра (например, в блоке пула или структуре данных, выделенной в стеке ядра), перед вызовом подпрограммы ZwXxx ядра. Драйвер должен использовать захваченный буфер, а не буфер пользовательского режима в качестве параметра подпрограммы ZwXxx .
Вызов подпрограмм ядра ZwXxx с неправильно сформированными UNICODE_STRINGs в качестве параметров. Когда драйвер вызывает любую подпрограмму ZwXxx , средство проверки драйверов проверяет все параметры, которые являются UNICODE_STRING значениями. Распространенные ошибки, обнаруженные проверятелем драйверов в таких строках, включают:
- Поле буфера указывает на память в пользовательском режиме.
- Параметры Length или MaximumLength некорректны. Например, MaximumLength<Length. Или одно или оба из этих значений — нечетное число. Оба этих значения всегда должны быть чётными, потому что они представляют собой количество байтов, используемых для представления строки Юникода.
Вызов функций ядра ZwXxx с неправильной структурой OBJECT_ATTRIBUTES в качестве параметра. Когда драйвер вызывает любую подпрограмму ZwXxx , средство проверки драйверов проверяет все параметры, которые являются OBJECT_ATTRIBUTE структурами. Члены каждого параметра структуры OBJECT_ATTRIBUTE подвергаются тем же проверкам пользовательских адресов и значений UNICODE_STRING, которые описаны выше.
Несогласованность Irp->RequestorMode и параметров запроса ввода-вывода. Когда для Irp-RequestorMode> задано значение KernelMode, средство проверки драйверов проверяет, что параметры запроса ввода-вывода, такие как Irp-AssociatedIrp.SystemBuffer> или Irp-UserBuffer>, не являются адресами пользовательского режима.
Начиная с Windows 7, если включить любой параметр проверки драйверов, средство проверки драйверов проверяет следующее поведение драйвера:
Счетчик ссылок на объекты изменяется от 0 до 1. Если диспетчер объектов ядра Windows создает объект, например объект File или объект Thread, счетчик ссылок нового объекта имеет значение 1. Вызовы системных функций, таких как ObReferenceObjectByPointer или ObReferenceObjectByHandle увеличивают счетчик ссылок. Каждый вызов ObDereferenceObject для одного объекта уменьшает счетчик ссылок.
Когда счетчик ссылок достигает значения 0, объект становится доступным для освобождения. Диспетчер объектов может немедленно освободить его или освободить его позже. Средство проверки драйверов проверяет наличие последующих вызовов ObReferenceObjectByPointer и ObReferenceObject для одного объекта. Эти вызовы изменяют счетчик ссылок от 0 до 1, что означает, что драйвер увеличил счетчик ссылок уже освобожденного объекта. Это всегда неправильно, так как это может привести к повреждению других выделений памяти.
Активация этого параметра
Вы можете активировать параметр проверки безопасности для одного или нескольких драйверов с помощью диспетчера проверки драйверов или командной строки Verifier.exe. Дополнительные сведения см. в разделе "Выбор параметров средства проверки драйвера".
Использование командной строки
В командной строке параметр проверки безопасности представлен битом 8 (0x100). Чтобы активировать проверки безопасности, используйте значение флага 0x100 или добавьте 0x100 в значение флага. Рассмотрим пример.
verifier /flags 0x100 /driver MyDriver.sysПосле перезагрузки компьютера параметр будет активным.
Начиная с Windows Vista, вы также можете активировать и деактивировать проверки безопасности, не перезагрузив компьютер, добавив параметр /volatile в команду. Рассмотрим пример.
verifier /volatile /flags 0x100 /adddriver MyDriver.sysЭтот параметр действует немедленно, но теряется при завершении работы или перезапуске компьютера. Для получения подробной информации см. Использование изменяемых параметров.
Параметр "Проверки безопасности" также включен в стандартные параметры. Рассмотрим пример.
verifier /standard /driver MyDriver.sysИспользование диспетчера проверки драйверов
- Запустите диспетчер проверки драйверов. В окне командной строки введите средство проверки .
- Выберите "Создать настраиваемые параметры" (для разработчиков кода) и нажмите кнопку "Далее".
- Выберите отдельные параметры из полного списка.
- Выберите проверки безопасности.
Функция проверки безопасности также включена в стандартные параметры. Чтобы использовать эту функцию в диспетчере проверки драйверов, нажмите кнопку "Создать стандартные параметры".