SDDL para objetos de dispositivo

El lenguaje de definición de descriptores de seguridad (SDDL) se usa para representar descriptores de seguridad. La seguridad de los objetos de dispositivo se puede especificar mediante una cadena SDDL que se coloca en un archivo INF o se pasa a IoCreateDeviceSecure. El lenguaje de definición de descriptores de seguridad está totalmente documentado en la documentación de Microsoft Windows SDK.

Aunque los archivos INF admiten la gama completa de SDDL, solo un subconjunto del lenguaje es compatible con la rutina IoCreateDeviceSecure . Este subconjunto se define aquí.

Las cadenas SDDL para objetos de dispositivo tienen el formato "D:P" seguido de una o varias expresiones de la forma "(A;; Access;;; SID)". El valor del SID especifica un identificador de seguridad que determina a quién se aplica el valor de Access (por ejemplo, un usuario o grupo). El valor de Access especifica los derechos de acceso permitidos para el SID. Los valores de Access y SID son los siguientes.

Nota Al usar SDDL para objetos de dispositivo, el controlador debe vincularse con Wdmsec.lib.

Acceso
Especifica un valor de ACCESS_MASK que determina el acceso permitido. Este valor se puede escribir como un valor hexadecimal con el formato "0xhexadecimal" o como una secuencia de códigos simbólicos de dos letras que representan derechos de acceso.

Los códigos siguientes se pueden usar para especificar derechos de acceso genéricos.

Código Derecho de acceso genérico

GA

GENERIC_ALL

GR

GENERIC_READ

GW

GENERIC_WRITE

GX

GENERIC_EXECUTE

Los códigos siguientes se pueden usar para especificar derechos de acceso específicos.

Código Derecho de acceso específico

RC

READ_CONTROL

SD

Delete

WD

WRITE_DAC

WO

WRITE_OWNER

Tenga en cuenta que GENERIC_ALL concede todos los derechos enumerados en las dos tablas anteriores, incluida la capacidad de cambiar la ACL.

SID
Especifica el SID al que se concede el acceso especificado. Los SID representan cuentas, alias, grupos, usuarios o equipos.

Los siguientes SID representan cuentas en el equipo.

SID Descripción

SY

Sistema

Representa el propio sistema operativo, incluidos sus componentes en modo de usuario.

LS

Servicio local

Una cuenta predefinida para los servicios locales (que también pertenece a Autenticado y Mundo). Este SID está disponible a partir de Windows XP.

NS

Servicio de red

Una cuenta predefinida para los servicios de red (que también pertenece a Autenticado y Mundo). Este SID está disponible a partir de Windows XP.

Los siguientes SID representan grupos en la máquina.

SID Descripción

BA

Administradores

El grupo administradores integrado en la máquina.

Unidad de negocio

Grupo de usuarios integrado

Grupo que abarca todas las cuentas de usuario locales y los usuarios del dominio.

BG

Grupo invitado integrado

Grupo que abarca a los usuarios que inician sesión con la cuenta de invitado local o de dominio.

Los siguientes SID describen la medida en que se ha autenticado un usuario.

SID Descripción

AU

Usuarios autenticados

Cualquier usuario reconocido por el equipo local o por un dominio. Tenga en cuenta que los usuarios que han iniciado sesión con la cuenta de invitado builtin no se autentican. Sin embargo, los miembros del grupo Invitados con cuentas individuales en el equipo o el dominio se autentican.

AN

Usuario que ha iniciado sesión anónimo

Cualquier usuario que haya iniciado sesión sin una identidad, como una sesión de red anónima. Tenga en cuenta que los usuarios que inician sesión con la cuenta de invitado builtin no se autentican ni son anónimos. Este SID está disponible a partir de Windows XP.

Los siguientes SID describen cómo el usuario ha iniciado sesión en la máquina.

SID Descripción

UI

Usuarios interactivos

Usuarios que iniciaron sesión inicialmente en la máquina "de forma interactiva", como inicios de sesión locales y inicios de sesión de Escritorio remoto.

NU

Usuario de inicio de sesión de red

Los usuarios que acceden a la máquina de forma remota, sin acceso interactivo al escritorio (por ejemplo, uso compartido de archivos o llamadas RPC).

WD

World

Antes de Windows XP, este SID abarcaba todas las sesiones, ya sean usuarios autenticados, usuarios anónimos o la cuenta de invitado builtin.

A partir de Windows XP, este SID no cubre sesiones de inicio de sesión anónimas; solo cubre usuarios autenticados y la cuenta de invitado builtin.

Tenga en cuenta que el SID mundial no es de confianza o "restringido". Para obtener más información, vea la descripción del SID de código restringido (RC) en la tabla siguiente.

Los siguientes SID merecen una mención especial.

SID Descripción

RC

Código restringido

Este SID se usa para controlar el acceso por código que no es de confianza. La validación de ACL con tokens con RC consta de dos comprobaciones, una en la lista normal de SID del token (que contiene WD por ejemplo) y otra en una segunda lista (normalmente que contiene RC y un subconjunto de los SID de token originales). Solo se concede acceso si un token supera ambas pruebas. Por lo tanto, RC funciona realmente en combinación con otros SID.

Cualquier ACL que especifique RC también debe especificar WD. Cuando RC se empareja con WD en una ACL, se describe un superconjunto de Todos, incluido el código que no es de confianza.

Es posible que el código que no sea de confianza se inicie mediante la opción Ejecutar como en el Explorador. De forma predeterminada, World no cubre código que no es de confianza.

UD

controladores de User-Mode

Este SID concede acceso a los controladores en modo de usuario. Actualmente, este SID solo cubre los controladores escritos para User-Mode Driver Framework (UMDF). Este SID está disponible a partir de Windows 8.

En versiones anteriores de Windows, que no reconocen la abreviatura "UD", debe especificar la forma completa de este SID (S-1-5-84-0-0-0-0-0-0) para conceder acceso a los controladores UMDF. Para obtener más información, consulte Control del acceso a dispositivos en la documentación de User-Mode Driver Framework.

Ejemplos de SDDL para objetos de dispositivo

En esta sección se describen las cadenas SDDL predefinidas que se encuentran en Wdmsec.h. También puede usarlos como plantillas para definir nuevas cadenas SDDL para objetos de dispositivo.

SDDL_DEVOBJ_KERNEL_ONLY

"D:P"

SDDL_DEVOBJ_KERNEL_ONLY es la ACL "vacía". El código en modo de usuario (incluidos los procesos que se ejecutan como sistema) no puede abrir el dispositivo.

Un controlador de bus PnP podría usar este descriptor al crear un PDO. Después, el archivo INF podría especificar la configuración de seguridad más flexible para el dispositivo. Al especificar este descriptor, el controlador de bus se aseguraría de que ningún intento de abrir el dispositivo antes de que se procesara INF se realizara correctamente.

Del mismo modo, un controlador que no sea WDM podría usar este descriptor para hacer que sus objetos de dispositivo no sean accesibles hasta que el programa en modo de usuario adecuado (como un instalador) establezca el descriptor de seguridad final en el Registro.

En todos estos casos, el valor predeterminado es una seguridad estricta, flexible según sea necesario.

SDDL_DEVOBJ_SYS_ALL

"D:P(A;; GA;;; SY)"

SDDL_DEVOBJ_SYS_ALL es similar a SDDL_DEVOBJ_KERNEL_ONLY, salvo que además del código en modo kernel, el código en modo de usuario que se ejecuta como Sistema también puede abrir el dispositivo para cualquier acceso.

Un controlador heredado puede usar esta ACL para empezar con una configuración de seguridad estricta y permitir que su servicio abra el dispositivo en tiempo de ejecución a usuarios individuales mediante la función SetFileSecurity en modo de usuario. En este caso, el servicio tendría que ejecutarse como Sistema.

SDDL_DEVOBJ_SYS_ALL_ADM_ALL

"D:P(A;; GA;;; SY)(A;; GA;;; BA)"

SDDL_DEVOBJ_SYS_ALL_ADM_ALL permite que el kernel, el sistema y el administrador control total sobre el dispositivo. Ningún otro usuario puede acceder al dispositivo.

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R

"D:P(A;; GA;;; SY)(A;; GRGWGX;;; BA)(A;; GR;;; WD)"

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R permite que el kernel y el sistema control total sobre el dispositivo. De forma predeterminada, el administrador puede acceder a todo el dispositivo, pero no puede cambiar la ACL (el administrador debe controlar primero el dispositivo).

A todos (el SID del mundo) se les concede acceso de lectura. El código que no es de confianza no puede tener acceso al dispositivo (es posible que el código que no sea de confianza se inicie mediante la opción Ejecutar como en el Explorador. De forma predeterminada, World no cubre el código restringido).

Tenga en cuenta también que el acceso transversal no se concede a los usuarios normales. Por lo tanto, podría no ser un descriptor adecuado para un dispositivo con un espacio de nombres.

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R

"D:P(A;; GA;;; SY)(A;; GRGWGX;;; BA)(A;; GR;;; WD)(A;; GR;;; RC)"

SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R permite que el kernel y el sistema control total sobre el dispositivo. De forma predeterminada, el administrador puede acceder a todo el dispositivo, pero no puede cambiar la ACL (el administrador debe controlar primero el dispositivo).

A todos (el SID del mundo) se les concede acceso de lectura. Además, también se permite el acceso al código que no es de confianza. Es posible que el código que no sea de confianza se inicie mediante la opción Ejecutar como en el Explorador. De forma predeterminada, World no cubre el código restringido.

Tenga en cuenta también que el acceso transversal no se concede a los usuarios normales. Por lo tanto, podría no ser un descriptor adecuado para un dispositivo con un espacio de nombres.

Tenga en cuenta que las cadenas sdDL anteriores no incluyen ningún modificador de herencia. Por lo tanto, solo son adecuados para objetos de dispositivo y no deben usarse para archivos o claves del Registro. Para obtener más información sobre cómo especificar la herencia mediante SDDL, consulte la documentación de Microsoft Windows SDK.