Separación de estado
La separación de estado es un modelo de mantenimiento y seguridad mejorado que usa límites de seguridad más claros para:
- Ayuda para aumentar la seguridad en las áreas clave del sistema
- Habilitación de actualizaciones y restablecimientos del sistema más rápidos y limpios
Este modelo se usa en todas las imágenes del sistema operativo factory. Los límites de seguridad se clasifican mediante los siguientes estados:
Estado | Descripción | Ejemplos |
---|---|---|
Inmutable | Esta área no se puede cambiar de forma permanente, excepto por el propio sistema operativo. |
|
Mutable, valor alto | Puede realizar cambios y esperar que se conserven después de un reinicio o una actualización, pero no después de un restablecimiento del sistema. |
|
Mutable, valor bajo | Puede realizar cambios, pero desaparecerán después de un reinicio o un restablecimiento del sistema. | Es posible que algunos componentes necesiten escribir en los subárboles del Registro, como HKLM\SYSTEM y HKLM\SOFTWARE . Estas áreas del Registro se cargan como volátiles, por lo que los componentes pueden seguir realizando la operación de escritura para un entorno de ejecución determinado. Tras el siguiente reinicio, desaparecerán los cambios. |
Datos de usuario | Se puede cambiar. Cada perfil de datos de usuario se cifra en su propia partición, por lo que los cambios solo afectan al usuario se inicia sesión. |
|
En el caso de las pruebas de fábrica, es correcto almacenar archivos de registro y otros archivos de prueba en la partición de datos o en %PROGRAMDATA%
.
Las infracciones de separación de estado se producen cuando:
- Un componente intenta escribir en el sistema de archivos en el volumen MainOS.
- Un componente escribe en los
HKLM\SYSTEM
subárboles del Registro oHKLM\SOFTWARE
.
Para ayudarle a desarrollar componentes que cumplan estas reglas, Windows puede registrar cada vez que un componente intenta escribir en cualquiera de estas ubicaciones.
Tenga en cuenta que, solo porque Windows realiza un seguimiento de una operación de escritura no significa necesariamente que haya un problema: un componente a veces puede escribir intencionadamente en los HKLM\SYSTEM
subárboles del registro o HKLM\SOFTWARE
esperando que el cambio sea volátil.
Hay algunos métodos para recopilar registros de actividad del registro y del sistema de archivos. Determinar el método adecuado que se va a usar depende del caso de uso y cuando esté activo en la secuencia de arranque del controlador. A continuación se muestra una tabla que resume cuándo usar cada método para buscar infracciones de separación de estado y aislamiento de controladores.
Método | ¿Cuándo ejecutar? | ¿Qué encuentra? |
---|---|---|
Registrador automático de arranque anticipado | Desea buscar infracciones de archivos que no se pueden encontrar con el Comprobador de controladores o desea ver las infracciones de archivo y registro en el mismo seguimiento | Todas las infracciones de archivos y la mayoría de las infracciones del registro |
Registrador a petición | Desea buscar infracciones de archivos que no se pueden encontrar con el Comprobador de controladores o desea ver las infracciones de archivo y registro en el mismo seguimiento | Todas las infracciones de archivos y la mayoría de las infracciones del registro |
Seguimiento de arranque | Desea tener información detallada de la pila que conduce a una infracción | Todas las operaciones de archivo y registro, independientemente de si son una infracción o no |
Comprobaciones de aislamiento del controlador comprobador de controladores | Quiere buscar todas las infracciones del registro durante la puesta en marcha del dispositivo, pruebas de controladores genéricas o pruebas de certificación. | No hay infracciones de archivos ni todas las infracciones del registro |
El método más sencillo de realizar un seguimiento de las infracciones de separación de estado es revisar seguimientos de eventos para Windows (ETW) en tiempo real a través del Portal de dispositivos Windows.
Nota
El controlador de filtro que proporciona esta telemetría puede cargarse después del componente. Si el componente se ejecuta al principio del proceso de arranque, deberá examinar la sección siguiente.
- Inicie sesión en el Portal de dispositivos Windows en el dispositivo en prueba.
- Vaya a la pestaña Registro de ETW de la izquierda.
- En Proveedor personalizado, habilite el siguiente proveedor: d6e1490c-c3a6-4533-8de2-18b16ce47517 .
- Vuelva a reproducir el escenario. Las infracciones aparecerán en la tabla.
- Cuando haya recopilado datos suficientes, haga clic en Guardar en archivo para obtener un archivo de texto (.csv) que contenga las infracciones capturadas. A menudo es más fácil trabajar con los datos descargados que realizar un análisis en tiempo real.
Use un AutoLogger de arranque anticipado para capturar seguimientos ETW para las operaciones realizadas al principio de la ruta de acceso de arranque:
Ejecute Tracelog para configurar el registrador automático para que escuche el GUID del proveedor: d6e1490c-c3a6-4533-8de2-18b16ce47517.
Establezca búferes en 128 kilobytes, con un mínimo de 12 búferes y un máximo de 34 búferes (los valores inferiores pueden provocar que se quiten los eventos).
Para el guid de sesión, puede generar un GUID mediante
uuidgen
y, a continuación, agregar un signo de número (#) antes de él, o puede proporcionar un nombre de archivo que incluya un GUID.Puede guardar el archivo de registro en cualquier lugar, aunque se recomienda usar una ubicación en las carpetas de datos de usuario o aplicación, como
-f %ProgramData%\Fabrikam\log.etl
.Tracelog.exe -addautologger StateSeparationViolationsAutologger -sessionguid #aabbccdd-1234-5678-90ab-a00bb00ccdd -f %ProgramData%\Fabrikam\log.etl -guid #d6e1490c-c3a6-4533-8de2-18b16ce47517 -b 128 -min 12 -max 34
Reinicie el dispositivo para iniciar la sesión de seguimiento de AutoLogger.
Detenga el registrador automático:
Tracelog.exe -stop StateSeparationViolationsAutologger
Obtenga el archivo ETL y revise los datos:
a. Capture el valor del directorio ProgramData del dispositivo (por ejemplo,
E:\ProgramData
).cmd-device -InformationVariable echoInfo echo %ProgramData% $deviceProgramData = $echoInfo[0]
b. Use este valor para copiar el archivo ETL del dispositivo en el equipo local. Ejemplo:
PS C:\> getd E:\ProgramData\Fabrikam\log.etl C:\hostdir\log.etl
Revise los datos de actividad de registro de seguimiento con Windows Performance Analzyer (WPA) u otras herramientas.
Use un registrador a petición para capturar un seguimiento ETW a petición.
Configure una sesión de registro para escuchar el GUID del proveedor d6e1490c-c3a6-4533-8de2-18b16ce47517:
Tracelog.exe -start StateSeparationViolations -f <path to save ETL> -guid #d6e1490c-c3a6-4533-8de2-18b16ce47517
Vuelva a reproducir el escenario o ejecute la prueba (siempre y cuando el dispositivo no se reinicie).
Detenga la sesión de registro.
Tracelog.exe -stop StateSeparationViolations
Copie el archivo ETL fuera del dispositivo.
PS C:\> getd C:\ProgramData\Fabrikam\log.etl C:\hostdir\log.etl
Abra el archivo de registro y revise los datos de actividad de registro de seguimiento mediante Windows Analizador de rendimiento.
Con un seguimiento ETW de arranque anticipado configurado correctamente, todas las operaciones del registro o las operaciones de archivo se pueden capturar en un seguimiento y tienen pilas capturadas para cada operación que detalla la ruta de acceso del código que conduce a esa operación del registro.
Registrar el seguimiento de arranque (ya sea registro, fileio o ambos)
wpr -boottrace -addboot registry wpr -boottrace -addboot fileio
Reinicie el dispositivo para empezar a capturar el seguimiento.
Vuelva a conectarse al dispositivo con TShell.
Detenga el seguimiento:
wpr -boottrace -stopboot <path where to write ETL>
Copie el archivo ETL fuera del dispositivo.
PS C:\> getd C:\<path on device to the>\log.etl C:\hostdir\log.etl
Abra el archivo de registro y abra los datos de actividad de registro de seguimiento mediante Windows Analizador de rendimiento.
En WPA, indique que cargue símbolos para que el archivo binario que se investigue se pueda resolver en los seguimientos de la pila y, a continuación, abra una tabla de resumen del Registro.
Se recomienda filtrar la tabla para que solo muestre las operaciones en los subárboles SYSTEM y SOFTWARE. Si ve la columna "árbol de claves base", expanda REGISTRO y, a continuación , MACHINE. Seleccione varios sistemas y software, haga clic con el botón derecho y seleccione Filtrar a selección.
Se recomienda filtrar la tabla solo a operaciones en las que la pila implica la investigación binaria. Este filtrado se puede realizar sobre el filtrado solo en el subárbol SYSTEM y SOFTWARE recomendado anteriormente. Haga clic en la columna Pila y abra el cuadro de búsqueda. Escriba el nombre del archivo binario que se está investigando y haga clic en Buscar todo. Haga clic con el botón derecho en una de las líneas resaltadas de la pila que contenía el nombre binario y seleccione Filtrar a selección.
El Comprobador de controladores (DV) es una herramienta que se incluye con Windows que se usa para supervisar los controladores de llamadas o acciones de función incorrectas que pueden dañar el sistema. A partir de la compilación 19568 del sistema operativo, el Comprobador de controladores tiene una nueva funcionalidad para admitir a los desarrolladores de controladores de Windows mediante la supervisión de infracciones de los requisitos de aislamiento de paquetes de controladores. El aislamiento del paquete de controladores es el requisito clave que los controladores deben cumplir en los sistemas del sistema operativo factory para cumplir los requisitos de separación de estado.
El comprobador de controladores supervisará las lecturas y escrituras incorrectas del Registro que no están permitidas en los sistemas del sistema operativo factory. Use esta herramienta al principio del desarrollo de controladores para comprender y corregir dónde está infringiendo los requisitos de aislamiento de controladores.
Sintaxis:
Nota
Si habilita en un sistema operativo factory, consulte Conexión mediante SSH para conectarse al sistema operativo factory de forma remota a través de SSH.
verifier /rc 33 36 /driver myDriver.sys
Esto habilitará las comprobaciones de aislamiento del controlador en el controlador de destino (myDriver.sys). También puede seleccionar varios controladores separando la lista con un espacio:
verifier /rc 33 36 /driver myDriver1.sys myDriver2.sys
Se requerirá un reinicio para que se habilite la configuración de comprobación. Para ello, especifique lo siguiente:
shutdown /r /t 0
Comportamiento esperado: modo de telemetría:
Durante las fases iniciales de la presentación del controlador, el comportamiento recomendado para estas comprobaciones es el modo de telemetría. Este es el comportamiento predeterminado y proporcionará una manera para que los desarrolladores vean todas las infracciones sin una comprobación de errores que interrumpa el progreso.
Se recomienda habilitar las comprobaciones de aislamiento del controlador DV mediante la sintaxis especificada en la sección anterior con un depurador de kernel asociado. Una vez que un reinicio ha habilitado la configuración de DV, podrá ver las infracciones en la salida del depurador de kernel.
A continuación se muestran un par de escenarios de ejemplo de un controlador que infringen los requisitos de aislamiento de controladores y el aspecto típico de la salida:
Escenario: ZwCreateKey mediante la ruta de acceso absoluta completa:
"DRIVER_ISOLATION_VIOLATION: <nombre> del controlador: las operaciones del Registro no deben usar rutas de acceso absolutas. Se detectó la creación de una clave del Registro unisolada '\Registry\Machine\SYSTEM'"
Escenario: ZwCreateKey mediante la ruta de acceso relativa a un identificador que no procede de la API aprobada:
"DRIVER_ISOLATION_VIOLATION: <nombre> del controlador: las operaciones del Registro solo deben usar identificadores de clave devueltos desde las API de WDF o WDM. Se detectó la creación de una clave del Registro unisolada '\REGISTRY\MACHINE\SYSTEM\SomeKeyThatShouldNotExist'"
Aproveche el modo de telemetría para establecer una línea base de todas las infracciones del componente y empezar a corregirlas de uno a uno, probando a medida que vaya.
Comportamiento esperado: modo Bucheck:
Más adelante en el proceso de desarrollo del controlador, puede ser útil habilitar las comprobaciones de aislamiento del controlador en un modo que hará evidente una infracción. DV se puede configurar para inducir la comprobación de depuración cuando se produce una infracción.
Esto generará un volcado de memoria que proporciona detalles precisos de dónde se produjo la infracción. Para habilitar DV en modo de comprobación de errores, use la sintaxis siguiente:
verifier /onecheck /rc 33 36 /driver myDriver1.sys
Este modo es útil cuando el controlador está cerca de la preparación de producción y está en fases finales de validación y pruebas.
Maximizar las rutas de acceso de código:
Las reglas de aislamiento de controladores DV se pueden habilitar durante la ejecución de un IHV de sus marcos de pruebas existentes. Esto ayudará a maximizar las rutas de acceso de código que el controlador está probando.
Las pruebas de aspectos básicos del dispositivo a través de la línea de comandos son una buena línea de base de pruebas para ejercer rutas de acceso de código típicas para el controlador. Los desarrolladores pueden habilitar estas pruebas con comprobaciones de aislamiento de controladores DV para maximizar el potencial de detectar infracciones de aislamiento de controladores lo antes posible.
Para fines de desarrollo, puede desactivar la aplicación de la separación de estado mediante la ejecución en modo de desarrollo de separación de estado. Esto le permite desarrollar, probar y ejecutar aplicaciones y controladores (como aplicaciones de prueba de fábrica) que no cumplen los requisitos.
En modo de desarrollo:
- La partición MainOS se puede escribir.
- Los cambios en
HKLM\SYSTEM
yHKLM\SOFTWARE
se conservan en los reinicios. - Windows sigue supervisando las actividades que, de lo contrario, interrumpirían las reglas de separación de estado.
Puede configurar el modo de desarrollo en el momento de la creación de imágenes reemplazando la característica: STATESEPARATION_ON
por STATESEPARATION_DEVMODE
.
En la tabla siguiente se detallan las diferencias entre cada modo.
Modo de separación de estado | Acceso al sistema de archivos inmutable | Acceso inmutable al registro |
---|---|---|
Modo Forzado | Escrituras no permitidas | Los cambios del Registro no se conservan durante el reinicio |
Advertencia de infracción en etw y salida del depurador | Advertencia de infracción en etw y salida del depurador | |
Modo de desarrollo | Lectura y escritura permitidas | Los cambios del Registro persisten durante el reinicio |
Advertencia de infracción en etw y salida del depurador | Advertencia de infracción en etw y salida del depurador |