Compartir a través de


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 del SDK de Microsoft Windows.

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 del formato "(A;; Access;;;; SID)". El valor de 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.

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 en el formato "0xhex" como un valor hexadecimal, 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

Disponibilidad general

GENÉRICO_TODO

GR

Acceso genérico (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

CONTROL_DE_LECTURA

SD

ELIMINAR

Enana blanca

WRITE_DAC

WO

ESCRIBIR_PROPIETARIO

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.

Las siguientes identificaciones 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 Authenticated y World). 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 Authenticated y World). 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 el equipo.

Unidad de negocio

Grupo de usuarios integrado

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

BG

Grupo de invitados predeterminado

Grupo que cubre 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

UA

Usuarios autenticados

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

UN

Usuario anónimo conectado

Cualquier usuario que haya iniciado sesión sin una identidad, como una sesión de red anónima. 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 inició 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.

NI

Usuario de inicio de sesión de red

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

WD

Mundo

Antes de Windows XP, este SID abarca 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.

El código no confiable o "restringido" tampoco está cubierto por el SID Mundial. 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 mediante código que no es de confianza. La validación de las listas de control de acceso (ACL) contra tokens con RC consta de dos comprobaciones: una contra la lista habitual de identificadores de seguridad (SID) del token (que contiene, por ejemplo, WD) y otra contra una segunda lista (que normalmente contiene RC y un subconjunto de los SID originales del token). Solo se concede acceso si un token supera ambas pruebas. Por lo tanto, RC realmente funciona 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 que incluye el código no confiable.

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

User-Mode Controladores

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 de 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 el INF tuviera éxito.

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 tengan el 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 tengan el control completo sobre el dispositivo. De forma predeterminada, el administrador puede acceder a todo el dispositivo, pero no puede cambiar la ACL (el administrador debe tomar el control del dispositivo primero).

A todos (al SID mundial) se les otorga acceso de lectura. El código que no es de confianza no puede acceder 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 tengan 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 tomar el control del dispositivo primero).

A todos (el SID mundial) se les da acceso de lectura. Además, también se permite que el código que no sea de confianza tenga acceso al código. 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.

Estas cadenas SDDL no incluyen modificadores de herencia. Por lo tanto, solo son adecuados para objetos de dispositivo y no deben usarse para archivos ni 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.