Тесты на проникновение (основы устройств)
Фундаментальные тесты устройств на проникновение выполняют различные формы вводных атак, которые являются критически важным компонентом тестирования безопасности. Тестирование атак и проникновений может помочь выявить уязвимости в программных интерфейсах.
Проникновение
Тесты на проникновение включают две категории тестов: фазз-тесты и тесты I/O Spy и I/O Attack. Тесты fuzz также были частью средства тестирования Device Path Exerciser.
Тест | Описание |
---|---|
отключить мониторинг ввода-вывода |
Отключите шпион ввода-вывода на одном или нескольких устройствах. Test binary: Devfund_IOSpy_DisableSupport.wsc Метод тестирования : DisableIoSpy Параметры : — см. раздел Параметры тестирования основных устройств DQ |
устройство с поддержкой I/O Spy |
Устройства отображения с включенной функцией шпиона ввода-вывода. Тестовое бинарное: Devfund_IOSpy_DisplayEnabledDevices.wsc Метод испытания : DisplayIoSpyDevices |
Включить I/O Spy |
Включите I/O Spy на одном или нескольких устройствах. Test binary: 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 Выдавать себя за FillZeroPageWithNull |
API fuzz Misc с проверкой запроса нулевой длины |
Этот тест выполняет те же тесты, что и тест API Fuzz Misc, и этот раз передает пустой (нулевой длины) запрос и недопустимый адрес буфера драйверу при попытке получить расширенные атрибуты файла. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод тестирования : DoMiscAPIWithZeroLengthTest Параметры : — см. раздел Параметры тестирования основных устройств DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Войти от имени FillZeroPageWithNull |
тест фаззинга открытия и закрытия |
Этот тест выполняет тысячи последовательностей create-open-close. Подробные сведения об этом тесте см. в разделе О тестах на открытие и закрытие Fuzz. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод тестирования : DoOpenCloseTest Параметры : — см. раздел Параметры тестирования основных устройств DoPoolCheck DQ Тестовые циклы ChangeBufferProtectionFlags Имитировать FillZeroPageWithNull |
тест запроса с нечетким совпадением и установки сведений о файлах |
Этот тест выдает запросы для получения и изменения информации об объекте, файле и томе устройств. Во время теста "Запрос и задание сведений о файлах"тест "нечетким" вызывает функции для получения и изменения информации об объектах, файлах и томах устройств, открытых через базовые операции открытия и другие операции открытия, включая действия, выполняемые тестом "Нечеткое открытие подпроцессов". Тест fuzz выдает каждый запрос или задает по крайней мере 1024 раз с допустимым буфером и различными длинами буфера и классами сведений о файлах. Один запрос каждого типа также отправляется с недопустимым указателем буфера и нулевой длиной буфера. Если вы используете параметр ChangeBufferProtectionFlags, который задает параметр защиты, фазз-тест изменяет настройки безопасности буфера в каждом запросе и на каждом вызове установки параметров. Этот тест также выполняет тест "Fuzz Sub-opens" (Нечеткое открытие). Этот тест использует ZwQueryInformationFile, ZwSetInformationFile, ZwQueryVolumeInformationFileи функции ZwSetVolumeInformationFile. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll метод тестирования : DoQueryAndSetFileInformationTest Параметры : — см. раздел Параметры тестирования основных устройств DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Выдавать себя за FillZeroPageWithNull |
нечёткий запрос и тест настройки безопасности |
Этот тест выдает вызовы для получения дескриптора безопасности и изменения состояния безопасности устройств. Во время теста запроса и установки безопасности тест Fuzz вызывает вызовы для извлечения дескриптора безопасности и изменения состояния безопасности устройств, открытых базовыми операциями и другими открытыми операциями, включая операции, выполняемые тестом Fuzz Sub-opens. Тест на устойчивость выполняет каждый запрос или вызов установки как минимум 1024 раза с допустимым буфером, различными длинами буферов и типами сведений о безопасности (OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION и без типа информации). Один запрос каждого типа также отправляется с недопустимым указателем буфера и нулевой длиной буфера. Если вы используете параметр ChangeBufferProtectionFlags, который устанавливает опцию защиты, тест Fuzz изменяет настройки безопасности буфера в каждом запросе и вызове установки. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll метод тестирования : DoQueryAndSetSecurityTest Параметры : — см. раздел Параметры тестирования основных устройств DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags выдавать себя за FillZeroPageWithNull |
нечеткое случайное FSCTL-тест / нечеткий случайный тест IOCTL |
Этот тест выдает ряд вызовов функции DeviceIoControl с кодами функций, типами устройств, методами передачи данных и требованиями к доступу, выбранными случайным образом из заданного диапазона значений. Вызовы включают входные и выходные буферы с допустимыми и недопустимыми указателями буфера и длиной, а также случайным образом созданным содержимым. Во время случайных тестов Fuzz-тест выполняет серию вызовов функции DeviceIoControl с кодами функций, типами устройств, методами передачи данных и требованиями к доступу, выбранными случайным образом из заданного диапазона значений. Вызовы включают входные и выходные буферы с допустимыми и недопустимыми указателями буфера и длиной, а также случайным образом созданным содержимым. Тест Fuzz выполняет случайные тесты на всех устройствах, открытых во время базовых открытых операций и дополнительных открытых тестов. Этот тест можно настроить с помощью следующих параметров:
Функция, используемая тестом Fuzz для генерации случайных чисел, использует начальное число , стартовое значение для алгоритма генерации случайных чисел. Чтобы воспроизвести условия тестирования, используйте параметр начального номера, чтобы указать начальное число, которое использовалось в исходном тестовом испытании. Специализированный случайный тест включается в состав случайного теста. Специализированный случайный тест использует результаты случайного теста для изучения ответов драйверов на запросы IOCTL или FSCTL более подробно. Специализированные тесты исследуют области, которые случайные тесты упустили, а также те, на которые драйвер не ответил должным образом, основываясь на статусе, возвращаемом случайными вызовами теста. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Тестовые методы : DoRandomIOCTLTest, DoRandomFSCTLTest Параметры : — см. раздел Параметры тестирования основных устройств MinInBuffer MaxInBuffer MinOutBuffer MaxOutBuffer MaxRandomCalls MaxTailoredCalls SeedNumber MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Имитация ЗаполнитьНулевуюСтраницуНулями |
тест Fuzz Sub-open |
Тест выполняет быстрый ряд вызовов для открытия объектов в пространстве имен устройства. В этих вызовах он передает путь, который начинается с устройства и включает произвольные имена и бессмысленные строки различной длины и содержания. Во время относительного открытого теста(также известного как подоткрытый тест) фазз-тест пытается открыть объекты в пространстве имен устройства . Во время этого теста тест Fuzz выполняет серию быстрых вызовов для открытия объектов в пространстве имен устройств, открытых с использованием базовых операций открытия и других открытых операций. В этих вызовах тест Fuzz передает путь, который начинается с устройства и содержит произвольные имена и бессмысленные строки разной длины и содержания. Этот тест определяет, как драйвер или файловая система управляет открытыми запросами в пространстве имен. В частности, если драйвер не поддерживает открытые запросы в своем пространстве имен, он должен предотвратить несанкционированный доступ либо путем отказа в их выполнении, либо путем установки характеристики устройства FILE_DEVICE_SECURE_OPEN при использовании IoCreateDevice или IoCreateDeviceSecure для создания объекта устройства. Для получения дополнительной информации о пространстве имен устройства см. Управление доступом к пространству имен устройств. Тестовый двоичный файл: Devfund_DevicePathExerciser.dll Метод тестирования : DoSubOpensTest Параметры : — см. раздел Параметры тестирования основных устройств DoPoolCheck DQ Тестовые циклы ChangeBufferProtectionFlags олицетворения FillZeroPageWithNull |
откроется вложенный объект Fuzz с помощью теста Streams |
Этот тест пытается открыть различные именованные потоки данных на устройстве. Тест использует ряд произвольных имен потоков с содержимым и символами, которые могут быть допустимыми для других устройств. Во время теста потоков фазз-тестпытается открыть именованные потоки различных данных на устройстве. Тесты используют ряд произвольных имен потоков с содержимым и символами, которые могут быть допустимыми для других устройств. Этот тест определяет, может ли драйвер правильно обрабатывать запросы потока данных, особенно если драйвер экспортирует устройство, которое не поддерживает или не предусматривает работу с потоками данных. именованный поток данных является атрибутом объекта файла. Укажите именованный поток данных путем записи имени файла, двоеточия и имени потока данных, например "File01.txt:AccessDate", где AccessDate является именованным потоком данных, то есть атрибутом файла File01.txt. Тест fuzz записывает имена потоков, используемые в тесте. Тестовый бинарный: Devfund_DevicePathExerciser.dll Метод тестирования : DoSubOpensWithStreamsTest Параметры : — см. раздел Параметры тестирования основных устройств DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Выдать себя за FillZeroPageWithNull |
Fuzz тест буфера FSCTL Zero-Length / Fuzz тест буфера IOCTL Zero-Length |
Этот тест выполняет серию вызовов функции DeviceIoControl с параметрами , и с длиной входных и/или выходных буферов, равной 0. Тест создает различные коды управления файловой системой с помощью различных кодов функций, типов устройств, методов передачи данных и требований к доступу. Во время теста Zero-Length буфера, фазз-тест вызывает серию вызовов функции DeviceIoControl с длиной входного или выходного буфера 0. Тест создает различные коды управления ввода-вывода с помощью различных кодов функций, типов устройств, методов передачи данных и требований к доступу. Сведения о содержимом кодов управления ввода-вывода см. в определении кодов управления I/O. Чтобы проверить, как драйвер обрабатывает недопустимые указатели буфера, указатели буфера в этих вызовах пользовательского режима указывают адреса высоко в виртуальном адресном пространстве ядра, например, 0xFFFFFC00). Тест Fuzz выполняет тест буфера Zero-Length на всех устройствах, которые были открыты во время основных и дополнительных тестов открытия. Этот тест можно настроить с помощью параметров команды MinFunctionCode и MaxFunctionCode, чтобы указать диапазон кодов функций IOCTL или FSCTL, используемых в вызовах и MinDeviceType и MaxDeviceType, чтобы указать диапазон типов устройств, используемых в вызовах. Тест двоичный: Devfund_DevicePathExerciser.dll методы тестирования : DoZeroLengthBufferIOCTLTest, DoZeroLengthBufferFSCTLTest Параметры : — см. раздел Параметры тестирования основных устройств MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck ТестовыеЦиклы ChangeBufferProtectionFlags Притворяться ЗаполнитьНулевуюСтраницуНулями |
запуск атаки ввода-вывода |
Выполняет атаку на вход/выход на указанном устройстве или устройствах. Тест бинарный: Devfund_IOAttack_DeleteDataFile.wsc Метод тестирования : RunIoAttack Параметры : — см. раздел Параметры тестирования основных устройств DQ |
Обзор тестов фаззинга на открытие и закрытие
Тест на открытие и закрытие использует несколько различных способов открытия и закрытия экземпляров указанного устройства или устройств: базовые операции открытия, прямые операции открытия устройства, а также тест на открытие и закрытие.
Основные операции с открытыми файлами
Во время базовых открытых операцийфазз-тест неоднократно открывает (создает) экземпляры указанных устройств или устройств, экспортируемых указанным драйвером, с использованием различных методов и параметров.
Тест Fuzz всегда выполняет базовые операции открытия. Вам не нужно выбирать их и их нельзя исключить из тестового сеанса.
Тест Fuzz выполняет все открытые операции в пользовательском режиме, вызывая системные службы (подпрограммы ZwXxx), соответствующие устройству. Если открытый вызов возвращает дескриптор устройству, тест fuzz использует дескриптор для выполнения других тестов устройств, выбранных для тестового сеанса.
Существует пять типов базовых открытых операций:
Стандартный открытый режим. Тест fuzz открывает устройство асинхронно и задает только собственное имя устройства.
Откройте с добавленной обратной косой чертой. Тест "Фаззинг" выдает открытый вызов имени устройства, за которым следует обратная косая черта (), например \device\cdrom\, как если бы вызов открывал корневой каталог на устройстве.
Эта операция определяет, как драйвер или файловая система управляет открытыми запросами в пространстве имен. В частности, если устройство не поддерживает открытые запросы в своем пространстве имен, драйвер должен предотвратить несанкционированный доступ либо путем сбоя запросов, либо задав характеристику устройства FILE_DEVICE_SECURE_OPEN при вызове IoCreateDevice или IoCreateDeviceSecure для создания объекта устройства.
Открыть как именованный канал. Тест Fuzz открывает устройство и устанавливает именованный канал связи на устройстве. Параметр доступа (ShareAccess) изначально устанавливается для чтения и записи, но корректируется, если запрос завершается сбоем. Если устройство не поддерживает именованные каналы, запрос должен завершиться ошибкой.
Откройте как почтовую щель. Тест на нечеткость открывает устройство как mailslot. Если устройство не поддерживает этот тип подключения, запрос должен завершиться ошибкой.
Откройте в виде древовидной структуры. Тест Fuzz открывает устройство как "дерево подключения" для использования в удаленном доступе к сети. Параметр доступа (ShareAccess) изначально устанавливается для чтения и записи, но корректируется, если запрос завершается сбоем. Если устройство не поддерживает этот тип подключения, запрос должен завершиться ошибкой.
Параметры, используемые в открытых вызовах, зависят от характеристик устройства и делают его вероятным, что вызовы будут выполнены успешно. Например, если основная операция открытия завершается ошибкой, так как вызов не соответствует требованиям безопасности устройства, Fuzz-тест повторяет операцию открытия с запросом на меньший доступ. Например, если открытая операция, запрашивающая доступ на запись, возвращает ошибку нарушения безопасности, открытие повторяется с запросом на доступ на чтение.
Открытые операции с прямым устройством
Во время операций прямого открытия устройства фазз-тест открывает устройство непосредственно как устройство, а не в виде файла в файловой системе. Операции непосредственного открытия устройств всегда синхронны. Если вызов выполнен успешно, тест Fuzz использует идентификатор, который предоставлен для выполнения других выбранных тестов.
Открытие и закрытие теста
Во время теста "Открытие и Закрытие"фаззинг создает несколько потоков, каждый из которых выполняет тысячи последовательностей создания, открытия и закрытия. Это проверяет способность водителя обрабатывать чрезвычайный объем других простых и ожидаемых вызовов.
Для теста открытия и закрытия используются те же параметры, которые применяются в тестах базовых операций открытия и открытия с добавлением обратной косой черты, и проводятся непосредственно перед этими тестами.
Связанные разделы
Как протестировать драйвер во время выполнения с помощью Visual Studio
Как выбрать и настроить тесты основных функций устройства
тесты базовых функций устройств
подключаемых модулей простого ввода-вывода WDTF
Как протестировать драйвер во время выполнения из командной строки