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


Тесты на проникновение (основы устройств)

Фундаментальные тесты устройств на проникновение выполняют различные формы вводных атак, которые являются критически важным компонентом тестирования безопасности. Тестирование атак и проникновений может помочь выявить уязвимости в программных интерфейсах.

Проникновение

Тесты на проникновение включают две категории тестов: фазз-тесты и тесты 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 — это тесты, определяющие, может ли драйвер обрабатывать различные распространенные вызовы из драйверов режима ядра.

Тесты включают в себя следующие:

  • Вызовы ZwReadFile и ZwWriteFileс указанием допустимых указателей буфера данных, различные длины (включая ноль) и различные смещения байтов, включая нулевые, -1 и 64-разрядные смещения байтов.

  • Вызовы для отмены ввода-вывода и очистки буферов.

  • Ряд вызовов запросов к каталогу с использованием общих классов сведений о файлах с допустимыми указателями буфера данных пользователя и различными длинами буферов (включая ноль).

  • Вызовы запросов к каталогу, аналогичные вызовам, выданным программами, работающими под управлением виртуальной машины DOS (VDM).

  • Вызовы для получения расширенных атрибутов файла с различными размерами буферов и длиной.

  • Вызовы функций для создания и закрытия объектов секций с различными атрибутами защиты страниц секций и атрибутами распределения секций (закреплённая секция, секция файла изображения).

  • Команды блокировки и разблокировки файлов.

  • Вызовы для получения информации о квоте тома.

  • Проверка атрибутов файла – ряд запросов атрибутов файла с допустимыми указателями на структуру ObjectAttributes.

    Тест атрибутов файла имеет необязательный тест нулевой длины. При получении расширенных атрибутов файла Fuzz-тест передает запрос нулевой длины и недопустимый адрес буфера драйверу.

Тестовый двоичный файл: 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 выполняет случайные тесты на всех устройствах, открытых во время базовых открытых операций и дополнительных открытых тестов. Этот тест можно настроить с помощью следующих параметров:

  • Использование MinFunctionCode и MaxFunctionCode для указания диапазона кодов функций IOCTL или FSCTL, используемых в вызовах

  • Используйте MinDeviceType и MaxDeviceType, чтобы указать диапазон типов устройств, используемых в вызовах

  • Используйте seedNumber, чтобы указать начальное число для подпрограммы создания случайных чисел.

Функция, используемая тестом 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

Как протестировать драйвер во время выполнения из командной строки