Тесты на проникновение (основы устройства)
Тесты на проникновение устройств выполняют различные виды входных атак, которые являются критически важным компонентом тестирования безопасности. Тестирование атак и проникновений может помочь выявить уязвимости в интерфейсах программного обеспечения.
Проникновение
Тесты на проникновение включают в себя две категории тестов: тесты нечеткого действия и тесты I/O Spy и I/O Attack . Тесты fuzz также были компонентом средства тестирования Exceriser пути устройства .
Тест | Описание |
---|---|
Отключение spy ввода-вывода |
Отключите spy ввода-вывода на 1 или более устройствах. Тестовый двоичный файл: Devfund_IOSpy_DisableSupport.wsc Метод теста: DisableIoSpy Параметры: см. раздел Тестовые параметры основы устройства. DQ |
Отображение устройства с поддержкой Spy ввода-вывода |
Отображение устройств с включенным шпионом ввода-вывода . Тестовый двоичный файл: Devfund_IOSpy_DisplayEnabledDevices.wsc Метод теста: DisplayIoSpyDevices |
Включение spy ввода-вывода |
Включите I/O Spy на одном или нескольких устройствах. Тестовый двоичный файл: Devfund_IOSpy_EnableSupport.wsc Метод теста: EnableIoSpy Параметры: см. раздел Тестовые параметры основы устройства. DQ DFD — указывает путь к файлу данных IoSpy. Расположение по умолчанию — %SystemDrive%\DriverTest\IoSpy. |
Тест API Fuzz Misc |
Тесты API Fuzz Misc — это тесты, которые определяют, может ли драйвер обрабатывать различные распространенные вызовы из драйверов режима ядра. Тесты включают в себя следующие тесты:
Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод теста: DoMiscAPITest Параметры: см. раздел Тестовые параметры основы устройства. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Нечеткий API Misc с проверкой запроса нулевой длины |
Этот тест выполняет те же тесты, что и тест API Fuzz Misc, и на этот раз передает пустой запрос (нулевой длины) и недопустимый адрес буфера драйверу при попытке получить расширенные атрибуты файла. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод теста: DoMiscAPIWithZeroLengthTest Параметры: см. раздел Тестовые параметры основы устройства. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Тест нечеткого открытия и закрытия |
Этот тест выполняет тысячи последовательностей создания, открытия и закрытия. Подробные сведения об этом тесте см. в разделе Сведения о тесте нечеткого открытия и закрытия. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод теста: DoOpenCloseTest Параметры: см. раздел Тестовые параметры основы устройства. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Тест нечетких запросов и задания сведений о файле |
Этот тест выполняет вызовы для получения и изменения сведений об объектах, файлах и томах устройств. Во время проверки запросов и задания сведений о файле проблема нечеткого теста вызывает получение и изменение сведений об объектах, файлах и томах устройств, открытых базовыми операциями открытия и другими операциями открытия, включая операции, выполняемые тестом нечетких вложенных открытий. Тест fuzz выполняет каждый запрос или вызов set не менее 1024 раз с допустимым буфером и различными длинами буфера и классами сведений о файле. Также отправляется один запрос каждого типа с недопустимым указателем буфера и нулевой длиной буфера. Если вы используете параметр ChangeBufferProtectionFlags , который задает параметр защиты, тест fuzz изменяет параметры безопасности буфера в каждом запросе и вызове set. Этот тест также выполняет тест нечетких вложенных открытий. В этом тесте используются функции ZwQueryInformationFile, ZwSetInformationFile, ZwQueryVolumeInformationFile и ZwSetVolumeInformationFile . Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод теста: DoQueryAndSetFileInformationTest Параметры: см. раздел Тестовые параметры основы устройства. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Нечеткий запрос и установка теста безопасности |
Этот тест выдает вызовы для получения дескриптора безопасности и изменения состояния безопасности устройств. Во время запроса и задания теста безопасности тест нечетких вызовов вызывается для получения дескриптора безопасности и изменения состояния безопасности устройств, открытых с помощью базовых открытых операций и других открытых операций, включая операции, выполняемые тестом нечетких вложенных открытий. Тест fuzz выдает каждый запрос или вызов set не менее 1024 раз с допустимым буфером и различными длинами буферов и типами сведений о безопасности (OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION и без типа информации). Также отправляется один запрос каждого типа с недопустимым указателем буфера и нулевой длиной буфера. Если вы используете параметр ChangeBufferProtectionFlags , который задает параметр защиты, тест fuzz изменяет параметры безопасности буфера в каждом запросе и вызове set. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод теста: DoQueryAndSetSecurityTest Параметры: см . раздел Параметры теста "Основы устройства". DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Тест нечетких случайных FSCTL / Тест нечеткого случайного IOCTL |
Этот тест выполняет ряд вызовов функции DeviceIoControl с кодами функций, типами устройств, методами передачи данных и требованиями к доступу, которые выбираются случайным образом из указанного диапазона значений. Вызовы включают входные и выходные буферы с допустимыми и недопустимыми указателями и длинами буфера, а также случайно созданное содержимое. Во время случайных тестов нечеткий тест выполняет ряд вызовов функции DeviceIoControl с кодами функций, типами устройств, методами передачи данных и требованиями к доступу, выбранными случайным образом из указанного диапазона значений. Вызовы включают входные и выходные буферы с допустимыми и недопустимыми указателями и длинами буфера, а также случайно созданное содержимое. Тест нечетких параметров выполняет случайные тесты на всех устройствах, открытых во время базовых открытых операций и дополнительных открытых тестов. Этот тест можно настроить с помощью следующих параметров:
Функция, которую тест fuzz использует для создания случайных чисел для теста, использует начальное число, начальное число для алгоритма создания случайных чисел. Чтобы воспроизвести условия теста, используйте параметр начального номера , чтобы указать начальный номер, который использовался в исходной тестовой пробной версии. Специализированный случайный тест включается в состав случайного теста. Специализированный случайный тест использует результаты случайного теста для более подробного изучения ответов драйверов на запросы IOCTL или FSCTL. Специализированные случайные пробы тестируют области, пропущенные случайным тестом, и области, на которые драйвер не ответил должным образом на основе состояния, возвращаемого случайными тест-вызовами. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Методы тестирования: DoRandomIOCTLTest, DoRandomFSCTLTest Параметры: см . раздел Параметры теста "Основы устройства". MinInBuffer MaxInBuffer MinOutBuffer MaxOutBuffer MaxRandomCalls MaxTailoredCalls SeedNumber MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Тест нечетких вложенных открытий |
Тест выполняет быструю серию вызовов для открытия объектов в пространстве имен устройства. В этих вызовах он передает путь, начинающийся с устройства, и включает произвольные имена и бессмыслицные строки различной длины и содержимого. Во время относительного открытого теста (также известного как тест подоткрытого) тест нечетких значений пытается открыть объекты в пространстве имен устройства. Во время этого теста тест нечетких параметров выполняет быструю серию вызовов для открытия объектов в пространстве имен устройств, открытых с помощью базовых операций открытия и других открытых операций. В этих вызовах тест fuzz проходит путь, который начинается с устройства и включает произвольные имена и невразумительные строки разной длины и содержимого. Этот тест определяет, как драйвер или файловая система управляет открытыми запросами в своем пространстве имен. В частности, если драйвер не поддерживает открытые запросы в своем пространстве имен, он должен предотвратить несанкционированный доступ либо путем неудачных запросов, либо путем задания характеристики устройства FILE_DEVICE_SECURE_OPEN при использовании IoCreateDevice или IoCreateDeviceSecure для создания объекта устройства. Дополнительные сведения о пространстве имен устройства см. в разделе Управление доступом к пространству имен устройств. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод тестирования: DoSubOpensTest Параметры: см . раздел Параметры теста "Основы устройства". DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Нечеткий вложенный открывается с тестом потоков |
Этот тест пытается открыть различные именованные потоки данных на устройстве. Тест использует ряд произвольных имен потоков с содержимым и символами, которые могут быть допустимыми для других вариантов использования на некоторых устройствах. Во время тестирования потоков тест нечетких параметров пытается открыть различные именованные потоки данных на устройстве. Тесты используют ряд произвольных имен потоков с содержимым и символами, которые могут быть допустимыми для других вариантов использования на некоторых устройствах. Этот тест определяет, может ли драйвер правильно обрабатывать запросы потока данных, особенно если драйвер экспортирует устройство, которое не поддерживает или не ожидает потоков данных. Именованный поток данных является атрибутом объекта файла. Именованный поток данных указывается путем записи имени файла, двоеточия и имени потока данных, например "File01.txt:AccessDate", где AccessDate — это именованный поток данных, то есть атрибут файла File01.txt. Тест "Нечеткое" записывает имена потоков, используемые в тесте. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод тестирования: DoSubOpensWithStreamsTest Параметры: см . раздел Параметры теста "Основы устройства". DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Тест FSCTL нечеткого Zero-Length буфера или тест IOCTL нечеткого Zero-Length буфера |
Этот тест выполняет серию вызовов функции DeviceIoControl с длиной входного и (или) выходного буфера 0. Тест создает различные коды управления файловой системой, используя различные коды функций, типы устройств, методы передачи данных и требования к доступу. Во время теста буфера Zero-Length тест нечетких данных выполняет серию вызовов функции DeviceIoControl с длиной входного и (или) выходного буфера 0. Тест создает различные коды управления вводом-выводом, используя различные коды функций, типы устройств, методы передачи данных и требования к доступу. Сведения о содержимом кодов элементов управления ввода-вывода см. в разделе Определение кодов элементов управления ввода-вывода. Чтобы проверить обработку драйвером недопустимых указателей буфера, указатели буфера в этих вызовах пользовательского режима указывают адреса с высоким уровнем в виртуальном адресном пространстве ядра, например 0xFFFFFC00). Тест нечетких четверок выполняет тест буфера Zero-Length на всех устройствах, открытых во время базовых и дополнительных открытых тестов. Этот тест можно настроить с помощью параметров команд MinFunctionCode и MaxFunctionCode , чтобы указать диапазон кодов функций IOCTL или FSCTL, используемых в вызовах, и MinDeviceType и MaxDeviceType для указания диапазона типов устройств, используемых в вызовах. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Методы тестирования: DoZeroLengthBufferIOCTLTest, DoZeroLengthBufferFSCTLTest Параметры: см . раздел Параметры теста "Основы устройства". MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Атака на выполнение операций ввода-вывода |
Выполняет атаку ввода-вывода на указанном устройстве или устройствах. Тестовый двоичный файл: Devfund_IOAttack_DeleteDataFile.wsc Метод тестирования: RunIoAttack Параметры: см . раздел Параметры теста "Основы устройства". DQ |
Сведения о тесте нечеткого открытия и закрытия
Тест нечеткого открытия и закрытия использует несколько различных способов открытия и закрытия экземпляров указанного устройства или устройств: основные операции открытия, операции прямого открытия устройства и тест "Открыть и закрыть".
Основные открытые операции
Во время базовых открытых операций тест fuzz неоднократно открывает (создает) экземпляры указанных устройств или устройств, экспортированных указанным драйвером с помощью различных методов и параметров.
Тест нечетких параметров всегда выполняет основные открытые операции. Их не нужно выбирать, и их нельзя исключить из тестового сеанса.
Тест fuzz выполняет все открытые операции в пользовательском режиме, вызывая системные службы (подпрограммы ZwXxx), соответствующие устройству. Если открытый вызов возвращает дескриптор устройству, тест Fuzz использует дескриптор для выполнения других тестов устройства, выбранных для тестового сеанса.
Существует пять типов базовых открытых операций:
Стандартный открытый. Тест fuzz открывает устройство асинхронно и задает только собственное имя устройства.
Откройте с добавлением обратной косой черты. Тест нечетких параметров выполняет открытый вызов имени устройства, за которым следует обратная косая черта (), например \device\cdrom\, как будто вызов открывает корневой каталог на устройстве.
Эта операция определяет, как драйвер или файловая система управляет открытыми запросами в своем пространстве имен. В частности, если устройство не поддерживает открытые запросы в своем пространстве имен, драйвер должен предотвратить несанкционированный доступ либо путем сбоя запросов, либо путем задания характеристики устройства FILE_DEVICE_SECURE_OPEN при вызове IoCreateDevice или IoCreateDeviceSecure для создания объекта устройства.
Откройте как именованный канал. Тест нечетких данных открывает устройство и устанавливает именованный канал к устройству. Параметр доступа (ShareAccess) изначально задан для чтения и записи, но корректируется в случае сбоя запроса. Если устройство не поддерживает именованные каналы, запрос должен завершиться ошибкой.
Откройте как почтовый слоот. Тест нечетких параметров открывает устройство в виде почтового слоя. Если устройство не поддерживает этот тип подключения, запрос должен завершиться ошибкой.
Откройте как подключение в виде дерева. Тест "Нечеткое" открывает устройство в виде древовидного подключения для использования при удаленном доступе к сети. Параметр доступа (ShareAccess) изначально задан для чтения и записи, но корректируется в случае сбоя запроса. Если устройство не поддерживает этот тип подключения, запрос должен завершиться ошибкой.
Параметры, используемые в открытых вызовах, зависят от характеристик устройства и делают вызовы успешными. Например, если обычная операция открытия завершается сбоем из-за того, что вызов не соответствует требованиям безопасности устройства, тест Fuzz повторяет операцию открытия с запросом на меньший доступ. Например, если операция открытия, запрашивающая доступ на запись, возвращает ошибку нарушения безопасности, открытие повторяется с запросом на доступ на чтение.
Операции открытия прямого устройства
Во время операций прямого открытия устройства тест fuzz открывает устройство напрямую, как устройство, а не как файл в файловой системе. Операции прямого открытия устройств всегда синхронны. Если вызов выполнен успешно, тест fuzz использует дескриптор, предоставленный для выполнения других выбранных тестов.
Открытие и закрытие теста
Во время теста Open и Close тест нечетких параметров создает несколько потоков, каждый из которых выполняет тысячи последовательностей создания, открытия и закрытия. Это проверяет способность водителя обрабатывать чрезвычайный объем простых и ожидаемых вызовов.
Тесты "Открыть" и "Закрыть" используют те же параметры, что и в тестах "Базовые операции открытия " и "Открыть с добавлением обратной косой черты" и выполняются непосредственно перед этими тестами.
Связанные темы
Как протестировать драйвер во время выполнения с помощью Visual Studio
Выбор и настройка тестов "Основы устройства"
Предоставленные подключаемые модули простого ввода-вывода WDTF
Тестирование драйвера во время выполнения из командной строки