Pruebas de penetración (aspectos básicos del dispositivo)
Las pruebas de penetración de aspectos básicos del dispositivo realizan diversas formas de ataques de entrada, que son un componente crítico de las pruebas de seguridad. Las pruebas de ataque y penetración pueden ayudar a identificar vulnerabilidades en las interfaces de software.
Penetración
Las pruebas de penetración incluyen dos categorías de pruebas: pruebas aproximadas y pruebas de E /S Spy y ataque de E/S . Las pruebas aproximadas también eran una característica de la herramienta de prueba Device Path Exceriser .
Prueba | Descripción |
---|---|
Deshabilitar spy de E/S |
Deshabilite I/O Spy en 1 o más dispositivos. Binario de prueba: Devfund_IOSpy_DisableSupport.wsc Método de prueba: DisableIoSpy Parámetros: - consulte Parámetros de prueba de aspectos básicos del dispositivo. DQ |
Mostrar dispositivo habilitado para spy de E/S |
Muestra los dispositivos que tienen habilitado Spy de E/S en ellos. Binario de prueba: Devfund_IOSpy_DisplayEnabledDevices.wsc Método de prueba: DisplayIoSpyDevices |
Habilitar spy de E/S |
Habilite I/O Spy en uno o varios dispositivos. Binario de prueba: Devfund_IOSpy_EnableSupport.wsc Método de prueba: EnableIoSpy Parámetros: - consulte Parámetros de prueba de aspectos básicos del dispositivo. DQ DFD : especifica la ruta de acceso al archivo de datos de IoSpy. La ubicación predeterminada es %SystemDrive%\DriverTest\IoSpy |
Prueba de API incorrecta de Fuzz |
Las pruebas Fuzz Misc API son pruebas que determinan si el controlador puede controlar una variedad de llamadas comunes desde controladores de modo kernel. Las pruebas incluyen las siguientes pruebas:
Binario de prueba: Devfund_DevicePathExerciser.dll Método de prueba: DoMiscAPITest Parámetros: - consulte Parámetros de prueba de aspectos básicos del dispositivo. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz Misc API con prueba de consulta de longitud cero |
Esta prueba realiza las mismas pruebas que la prueba Fuzz Misc API y esta vez pasa una consulta en blanco (longitud cero) y una dirección de búfer no válida al controlador al intentar recuperar los atributos extendidos de un archivo. Binario de prueba: Devfund_DevicePathExerciser.dll Método de prueba: DoMiscAPIWithZeroLengthTest Parámetros: - consulte Parámetros de prueba de aspectos básicos del dispositivo. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Prueba de apertura y cierre aproximadas |
Esta prueba realiza miles de secuencias de creación y cierre abierto. Para obtener información detallada sobre esta prueba, consulte Acerca de la prueba de cierre y apertura de Fuzz. Binario de prueba: Devfund_DevicePathExerciser.dll Método de prueba: DoOpenCloseTest Parámetros: - consulte Parámetros de prueba de aspectos básicos del dispositivo. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Prueba de consulta aproximada y establecimiento de información de archivo |
Esta prueba emite llamadas para recuperar y cambiar la información del objeto, el archivo y el volumen de los dispositivos. Durante la consulta y establecer la prueba de información de archivo, el problema de prueba aproximada llama a para recuperar y cambiar la información de objeto, archivo y volumen de los dispositivos abiertos por las operaciones abiertas básicas y otras operaciones abiertas, incluidas las operaciones realizadas por la prueba de apertura aproximada. La prueba Fuzz emite cada consulta o establece una llamada al menos 1024 veces con un búfer válido y una variedad de longitudes de búfer y clases de información de archivo. También se envía una solicitud de cada tipo con un puntero de búfer no válido y una longitud de búfer cero. Si usa el parámetro ChangeBufferProtectionFlags , que establece la opción de protección, la prueba Fuzz varía la configuración de seguridad en el búfer en cada consulta y establece la llamada. Esta prueba también realiza la prueba Fuzz Sub-opens. Esta prueba usa las funciones ZwQueryInformationFile, ZwSetInformationFile, ZwQueryVolumeInformationFile y ZwSetVolumeInformationFile . Binario de prueba: Devfund_DevicePathExerciser.dll Método de prueba: DoQueryAndSetFileInformationTest Parámetros: - consulte Parámetros de prueba de aspectos básicos del dispositivo. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Consulta aproximada y establecimiento de la prueba de seguridad |
Esta prueba emite llamadas para recuperar el descriptor de seguridad y cambiar el estado de seguridad de los dispositivos. Durante la consulta y establecer la prueba de seguridad, la prueba aproximada emite llamadas para recuperar el descriptor de seguridad y cambiar el estado de seguridad de los dispositivos abiertos por las operaciones abiertas básicas y otras operaciones abiertas, incluidas las operaciones realizadas por la prueba Fuzz Sub-opens. La prueba Fuzz emite cada consulta o establece una llamada al menos 1024 veces con un búfer válido y una variedad de longitudes de búfer y tipos de información de seguridad (OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION y ningún tipo de información). También se envía una solicitud de cada tipo con un puntero de búfer no válido y una longitud de búfer cero. Si usa el parámetro ChangeBufferProtectionFlags , que establece la opción de protección, la prueba Fuzz varía la configuración de seguridad en el búfer en cada consulta y establece la llamada. Binario de prueba: Devfund_DevicePathExerciser.dll Método de prueba: DoQueryAndSetSecurityTest Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Prueba aleatoria de FSCTL aproximada /prueba de IOCTL aleatoria aproximada |
Esta prueba emite una serie de llamadas a la función DeviceIoControl con códigos de función, tipos de dispositivo, métodos de transferencia de datos y requisitos de acceso seleccionados aleatoriamente desde un intervalo de valores especificado. Las llamadas incluyen búferes de entrada y salida con punteros y longitudes de búfer válidos y no válidos, y contenido generado aleatoriamente. Durante las pruebas aleatorias, la prueba Fuzz emite una serie de llamadas a la función DeviceIoControl con códigos de función, tipos de dispositivo, métodos de transferencia de datos y requisitos de acceso seleccionados de forma aleatoria a partir de un intervalo de valores especificado. Las llamadas incluyen búferes de entrada y salida con punteros y longitudes de búfer válidos y no válidos, y contenido generado aleatoriamente. La prueba Fuzz realiza las pruebas aleatorias en todos los dispositivos abiertos durante las operaciones abiertas básicas y las pruebas abiertas adicionales. Puede personalizar esta prueba mediante los parámetros siguientes:
La función que usa la prueba de Fuzz para generar números aleatorios para la prueba usa un número de inicialización, un número inicial para el algoritmo de generación aleatoria de números. Para reproducir las condiciones de prueba, use el parámetro de número de inicialización para especificar el número de inicialización que se usó en la prueba de prueba original. Una prueba aleatoria adaptada se incluye como parte de la prueba aleatoria. La prueba aleatoria adaptada usa los resultados de la prueba aleatoria para examinar la respuesta de los conductores a las solicitudes IOCTL o FSCTL con más detalle. Las áreas de sondeos aleatorios personalizados en las que se perdió la prueba aleatoria y aquellas en las que el controlador no respondió según lo esperado en función del estado devuelto por las llamadas de prueba aleatorias. Prueba binaria: Devfund_DevicePathExerciser.dll Métodos de prueba: DoRandomIOCTLTest, DoRandomFSCTLTest Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo. MinInBuffer MaxInBuffer MinOutBuffer MaxOutBuffer MaxRandomCalls MaxTailoredCalls SeedNumber MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Prueba de apertura aproximada |
La prueba realiza una serie rápida de llamadas para abrir objetos en el espacio de nombres del dispositivo. En estas llamadas, pasa una ruta de acceso que comienza con el dispositivo e incluye nombres arbitrarios y cadenas sin sentido de longitud y contenido variables. Durante una prueba abierta relativa, (también conocida como prueba subabrida), la prueba de Fuzz intenta abrir objetos en el espacio de nombres del dispositivo. Durante esta prueba, la prueba Fuzz realiza una serie rápida de llamadas para abrir objetos en el espacio de nombres de los dispositivos abiertos mediante operaciones abiertas básicas y otras operaciones abiertas. En estas llamadas, la prueba Fuzz supera una ruta de acceso que comienza con el dispositivo e incluye nombres arbitrarios y cadenas sin sentido de longitud y contenido variables. Esta prueba determina cómo el controlador o el sistema de archivos administra las solicitudes abiertas en su espacio de nombres. En concreto, si el controlador no admite solicitudes abiertas en su espacio de nombres, debe impedir el acceso no autorizado, ya sea con errores en las solicitudes o estableciendo la característica del dispositivo FILE_DEVICE_SECURE_OPEN cuando usa IoCreateDevice o IoCreateDeviceSecure para crear el objeto de dispositivo. Para obtener más información sobre el espacio de nombres de un dispositivo, consulte Control del acceso al espacio de nombres del dispositivo. Prueba binaria: Devfund_DevicePathExerciser.dll Método de prueba: DoSubOpensTest Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Se abre la subconsulta de Fuzz con la prueba de secuencias |
Esta prueba intenta abrir una variedad de flujos de datos con nombre en el dispositivo. La prueba usa una serie de nombres de secuencia arbitrarios con contenido y caracteres que podrían ser válidos para otros usos en algunos dispositivos. Durante la prueba streams, la prueba Fuzz intenta abrir una variedad de flujos de datos con nombre en el dispositivo. Las pruebas usan una serie de nombres de secuencia arbitrarios con contenido y caracteres que podrían ser válidos para otros usos en algunos dispositivos. Esta prueba determina si el controlador puede controlar correctamente las solicitudes de flujo de datos, especialmente si el controlador exporta un dispositivo que no admite ni prevé flujos de datos. Un flujo de datos con nombre es un atributo de un objeto de archivo. Para especificar un flujo de datos con nombre, escriba el nombre del archivo, dos puntos y el nombre del flujo de datos, por ejemplo, "File01.txt: AccessDate", donde AccessDate es un flujo de datos con nombre, es decir, un atributo del archivo File01.txt. La prueba Fuzz registra los nombres de secuencia usados en la prueba. Prueba binaria: Devfund_DevicePathExerciser.dll Método de prueba: DoSubOpensWithStreamsTest Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo. DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Prueba de Fuzz Zero-Length Buffer FSCTL/Prueba de IOCTL de búfer de Zero-Length de búfer |
Esta prueba emite una serie de llamadas a la función DeviceIoControl con longitudes de búfer de entrada o salida de 0. La prueba genera distintos códigos de control del sistema de archivos mediante diferentes códigos de función, tipos de dispositivo, métodos de transferencia de datos y requisitos de acceso. Durante la prueba de búfer de Zero-Length, la prueba de Fuzz emite una serie de llamadas a la función DeviceIoControl con longitudes de búfer de entrada o salida de 0. La prueba genera distintos códigos de control de E/S mediante diferentes códigos de función, tipos de dispositivo, métodos de transferencia de datos y requisitos de acceso. Para obtener información sobre el contenido de los códigos de control de E/S, vea Definición de códigos de control de E /S. Para probar el control del controlador de punteros de búfer no válidos, los punteros de búfer de estas llamadas en modo de usuario especifican direcciones altas en el espacio de direcciones virtuales del kernel, como 0xFFFFFC00). La prueba Fuzz realiza la prueba de búfer de Zero-Length en todos los dispositivos abiertos durante las pruebas abiertas básicas y adicionales. Puede personalizar esta prueba mediante los parámetros de comando MinFunctionCode y MaxFunctionCode para especificar el intervalo de códigos de función IOCTL o FSCTL usados en las llamadas y MinDeviceType y MaxDeviceType para especificar el intervalo de tipos de dispositivo usados en las llamadas. Prueba binaria: Devfund_DevicePathExerciser.dll Métodos de prueba: DoZeroLengthBufferIOCTLTest, DoZeroLengthBufferFSCTLTest Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo. MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Ejecutar ataque de E/S |
Ejecuta ataque de E/S en el dispositivo o dispositivos especificados. Binario de prueba: Devfund_IOAttack_DeleteDataFile.wsc Método de prueba: RunIoAttack Parámetros: - consulte Parámetros de prueba de aspectos básicos del dispositivo. DQ |
Acerca de la prueba de apertura y cierre de Fuzz
La prueba de apertura y cierre de Fuzz emplea varias maneras diferentes de abrir y cerrar instancias del dispositivo o dispositivos especificados: Operaciones abiertas básicas, Operaciones abiertas de dispositivos directos y una prueba Open y Cerrar.
Operaciones abiertas básicas
Durante las operaciones abiertas básicas, la prueba Fuzz abre repetidamente (crea) instancias de los dispositivos especificados o los dispositivos exportados por el controlador especificado mediante métodos y opciones diferentes.
La prueba Fuzz siempre realiza las operaciones abiertas básicas. No es necesario seleccionarlos y no puede excluirlos de una sesión de prueba.
La prueba Fuzz realiza todas las operaciones abiertas en modo de usuario llamando a los servicios del sistema (rutinas ZwXxx) adecuadas para el dispositivo. Si una llamada abierta devuelve un identificador al dispositivo, la prueba Fuzz usa el identificador para realizar las otras pruebas de dispositivo seleccionadas para la sesión de prueba.
Hay cinco tipos de operaciones abiertas básicas:
Abierto estándar. La prueba Fuzz abre el dispositivo de forma asincrónica y especifica solo el nombre del dispositivo nativo.
Abra con barra diagonal inversa agregada. La prueba Fuzz emite una llamada abierta para el nombre del dispositivo seguida de una barra diagonal inversa (), como \device\cdrom\, como si la llamada fuera a abrir un directorio raíz dentro del dispositivo.
Esta operación determina cómo el controlador o el sistema de archivos administra las solicitudes abiertas en su espacio de nombres. En concreto, si el dispositivo no admite solicitudes abiertas en su espacio de nombres, el controlador debe impedir el acceso no autorizado, ya sea con errores en las solicitudes o estableciendo la característica del dispositivo FILE_DEVICE_SECURE_OPEN cuando llama a IoCreateDevice o IoCreateDeviceSecure para crear el objeto de dispositivo.
Abra como una canalización con nombre. La prueba aproximada abre el dispositivo y establece una canalización con nombre para el dispositivo. El parámetro de acceso (ShareAccess) se establece inicialmente en lectura y escritura, pero se ajusta si se produce un error en la solicitud. Si el dispositivo no admite canalizaciones con nombre, debe producir un error en la solicitud.
Abra como un mailslot. La prueba aproximada abre el dispositivo como un mailslot. Si el dispositivo no admite este tipo de conexión, debe producir un error en la solicitud.
Abra como una conexión de árbol. la prueba Fuzz abre el dispositivo como una conexión de árbol para su uso en el acceso a la red remota. El parámetro de acceso (ShareAccess) se establece inicialmente en lectura y escritura, pero se ajusta si se produce un error en la solicitud. Si el dispositivo no admite este tipo de conexión, debe producir un error en la solicitud.
Los parámetros usados en las llamadas abiertas varían para adaptarse a las características del dispositivo y hacer que las llamadas se realicen correctamente. Por ejemplo, si se produce un error en una operación de apertura básica porque la llamada no cumple los requisitos de seguridad del dispositivo, la prueba Fuzz repite la operación abierta con una solicitud de acceso menor. Por ejemplo, si una operación abierta que solicitó acceso de escritura devuelve un error de infracción de seguridad, la apertura se repite con una solicitud de acceso de lectura.
Operaciones directas de apertura de dispositivos
Durante las operaciones directas de apertura del dispositivo, la prueba Fuzz abre el dispositivo directamente, como un dispositivo, no como un archivo en un sistema de archivos. Las operaciones directas de apertura de dispositivos siempre son sincrónicas. Si la llamada se realiza correctamente, la prueba Fuzz usa el identificador proporcionado para realizar otras pruebas seleccionadas.
Abrir y cerrar prueba
Durante la prueba Open y Close, la prueba Fuzz crea varios subprocesos, cada uno de los cuales realiza miles de secuencias de creación y cierre abierto. Esto prueba la capacidad del conductor para controlar un volumen extraordinario de llamadas simples y anticipadas.
La prueba Abrir y cerrar usa las mismas opciones que se usan en las operaciones abiertas básicas y Abrir con pruebas de barra diagonal inversa agregadas y se realizan justo antes de estas pruebas.
Temas relacionados
Cómo probar un controlador en tiempo de ejecución mediante Visual Studio
Cómo seleccionar y configurar las pruebas de aspectos básicos del dispositivo
Pruebas básicas de dispositivos
Complementos de E/S simples WDTF proporcionados
Cómo probar un controlador en tiempo de ejecución desde un símbolo del sistema