Проверки безопасности средства проверки драйверов
Параметр Проверки безопасности средства проверки драйверов отслеживает драйвер на наличие распространенных ошибок, которые могут привести к уязвимостям системы безопасности. Этот параметр доступен, начиная с 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
Использование диспетчера проверки драйверов
- Запустите диспетчер проверки драйверов. Введите Verifier в окне командной строки.
- Выберите Создать пользовательские параметры (для разработчиков кода) и нажмите кнопку Далее.
- Выберите Выбрать отдельные параметры из полного списка.
- Выберите Проверки безопасности.
Функция проверки безопасности также включена в стандартные параметры. Чтобы использовать эту функцию в диспетчере проверки драйверов, щелкните Создать стандартные параметры.