SDDL para objetos de dispositivo
A SDDL (Linguagem de Definição do Descritor de Segurança) é usada para representar descritores de segurança. A segurança para objetos de dispositivo pode ser especificada por uma cadeia de caracteres SDDL que é colocada em um arquivo INF ou passada para IoCreateDeviceSecure. A Linguagem de Definição do Descritor de Segurança está totalmente documentada na documentação do SDK do Microsoft Windows.
Embora os arquivos INF ofereçam suporte à gama completa de SDDL, apenas um subconjunto do idioma é compatível com a rotina IoCreateDeviceSecure . Esse subconjunto é definido aqui.
As cadeias de caracteres SDDL para objetos de dispositivo são do formato "D:P" seguidas por uma ou mais expressões do formato "(A;; Access;;; SID)". O valor de SID especifica um identificador de segurança que determina a quem o valor do Access se aplica (por exemplo, um usuário ou grupo). O valor do Access especifica os direitos de acesso permitidos para o SID. Os valores de Acesso e SID são os seguintes.
Nota Ao usar o SDDL para objetos de dispositivo, o driver deve vincular-se a Wdmsec.lib.
Acesso
Especifica um valor ACCESS_MASK que determina o acesso permitido. Esse valor pode ser escrito como um valor hexadecimal no formato "0xhexadecimal" ou como uma sequência de códigos simbólicos de duas letras que representam direitos de acesso.
Os códigos a seguir podem ser usados para especificar direitos de acesso genéricos.
Código | Direito de acesso genérico |
---|---|
GA |
GENERIC_ALL |
GR |
GENERIC_READ |
GW |
GENERIC_WRITE |
GX |
GENERIC_EXECUTE |
Os códigos a seguir podem ser usados para especificar direitos de acesso específicos.
Código | Direito de acesso específico |
---|---|
RC |
READ_CONTROL |
DP |
Delete (excluir) |
WD |
WRITE_DAC |
WO |
WRITE_OWNER |
Observe que GENERIC_ALL concede todos os direitos listados nas duas tabelas acima, incluindo a capacidade de alterar a ACL.
SID
Especifica o SID que recebe o acesso especificado. OS SIDs representam contas, aliases, grupos, usuários ou computadores.
Os SIDs a seguir representam contas no computador.
SID | Descrição |
---|---|
SY |
Sistema Representa o próprio sistema operacional, incluindo seus componentes de modo de usuário. |
LS |
Serviço Local Uma conta predefinida para serviços locais (que também pertence a Authenticated e World). Esse SID está disponível a partir do Windows XP. |
NS |
Serviço de Rede Uma conta predefinida para serviços de rede (que também pertence a Authenticated e World). Esse SID está disponível a partir do Windows XP. |
Os SIDs a seguir representam grupos no computador.
SID | Descrição |
---|---|
BA |
Administradores O grupo administradores internos no computador. |
BU |
Grupo de usuários interno Grupo que abrange todas as contas de usuário local e usuários no domínio. |
BG |
Grupo de convidados interno Grupo que abrange usuários que estão fazendo logon usando a conta de convidado local ou de domínio. |
Os SIDs a seguir descrevem até que ponto um usuário foi autenticado.
SID | Descrição |
---|---|
AU |
Usuários Autenticados Qualquer usuário reconhecido pelo computador local ou por um domínio. Observe que os usuários conectados usando a conta Convidado Interno não são autenticados. No entanto, os membros do grupo Convidados com contas individuais no computador ou no domínio são autenticados. |
AN |
Usuário conectado anônimo Qualquer usuário fez logon sem uma identidade, como uma sessão de rede anônima. Observe que os usuários que fazem logon usando a conta De convidado interno não são autenticados nem anônimos. Esse SID está disponível a partir do Windows XP. |
Os SIDs a seguir descrevem como o usuário fez logon no computador.
SID | Descrição |
---|---|
IU |
Usuários Interativos Usuários que inicialmente fizeram logon no computador "interativamente", como logons locais e logons de Áreas de Trabalho Remotas. |
NU |
Usuário de Logon de Rede Os usuários que acessam o computador remotamente, sem acesso interativo à área de trabalho (por exemplo, compartilhamento de arquivos ou chamadas RPC). |
WD |
World (Mundo) Antes do Windows XP, esse SID cobria todas as sessões, seja usuários autenticados, usuários anônimos ou a conta Convidado Interno. A partir do Windows XP, esse SID não abrange sessões de logon anônimo; ele abrange somente usuários autenticados e a conta De convidado interno. Observe que o código não confiável ou "restrito" também não é coberto pelo SID mundial. Para obter mais informações, consulte a descrição do SID de RC (Código Restrito) na tabela a seguir. |
Os SIDs a seguir merecem menção especiais.
SID | Descrição |
---|---|
RC |
Código Restrito Esse SID é usado para controlar o acesso por código não confiável. A validação de ACL em tokens com RC consiste em duas verificações, uma em relação à lista normal de SIDs do token (contendo WD, por exemplo), e outra em relação a uma segunda lista (normalmente contendo RC e um subconjunto dos SIDs de token originais). O acesso será concedido somente se um token for aprovado em ambos os testes. Dessa forma, o RC realmente funciona em combinação com outros SIDs. Qualquer ACL que especifica RC também deve especificar WD. Quando o RC é emparelhado com o WD em uma ACL, um superconjunto de Todos, incluindo código não confiável, é descrito. O código não confiável pode ser iniciado usando a opção Executar como no Explorer. Por padrão, o Mundo não abrange código não confiável. |
UD |
Drivers User-Mode Esse SID concede acesso a drivers de modo de usuário. Atualmente, esse SID abrange apenas os drivers gravados para o UMDF (User-Mode Driver Framework). Esse SID está disponível a partir do Windows 8. Em versões anteriores do Windows, que não reconhecem a abreviação "UD", você deve especificar a forma totalmente qualificada desse SID (S-1-5-84-0-0-0-0-0-0) para conceder acesso aos drivers UMDF. Para obter mais informações, consulte Controlando o acesso ao dispositivo na documentação do User-Mode Driver Framework. |
Exemplos de SDDL para objetos de dispositivo
Esta seção descreve as cadeias de caracteres SDDL predefinidas encontradas em Wdmsec.h. Você também pode usá-los como modelos para definir novas cadeias de caracteres SDDL para objetos de dispositivo.
SDDL_DEVOBJ_KERNEL_ONLY
"D:P"
SDDL_DEVOBJ_KERNEL_ONLY é a ACL "vazia". O código do modo de usuário (incluindo processos em execução como sistema) não pode abrir o dispositivo.
Um driver de barramento PnP pode usar esse descritor ao criar um PDO. O arquivo INF pode especificar configurações de segurança mais flexíveis para o dispositivo. Ao especificar esse descritor, o motorista do ônibus garantiria que nenhuma tentativa de abrir o dispositivo antes que o INF fosse processado teria êxito.
Da mesma forma, um driver não WDM pode usar esse descritor para tornar seus objetos de dispositivo inacessíveis até que o programa de modo de usuário apropriado (como um instalador) defina o descritor de segurança final no registro.
Em todos esses casos, o padrão é segurança rígida, afrouxada conforme necessário.
SDDL_DEVOBJ_SYS_ALL
"D:P(A;; GA;;; SY)"
SDDL_DEVOBJ_SYS_ALL é semelhante a SDDL_DEVOBJ_KERNEL_ONLY, exceto que, além do código do modo kernel, o código do modo de usuário em execução como Sistema também tem permissão para abrir o dispositivo para qualquer acesso.
Um driver herdado pode usar essa ACL para começar com configurações de segurança rígidas e permitir que seu serviço abra o dispositivo em tempo de execução para usuários individuais usando a função de modo de usuário SetFileSecurity . Nesse caso, o serviço teria que estar em execução como Sistema.
SDDL_DEVOBJ_SYS_ALL_ADM_ALL
"D:P(A;; GA;;; SY)(A;; GA;;; BA)"
SDDL_DEVOBJ_SYS_ALL_ADM_ALL permite que o kernel, o sistema e o administrador controlem o dispositivo. Nenhum outro usuário pode acessar o 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 o kernel e o sistema controlem o dispositivo. Por padrão, o administrador pode acessar todo o dispositivo, mas não pode alterar a ACL (o administrador deve assumir o controle do dispositivo primeiro.)
Todos (o SID mundial) recebem acesso de leitura. O código não confiável não pode acessar o dispositivo (o código não confiável pode ser iniciado usando a opção Executar como no Explorer. Por padrão, o Mundo não abrange código restrito.)
Observe também que o acesso de passagem não é concedido a usuários normais. Dessa forma, esse pode não ser um descritor apropriado para um dispositivo com um namespace.
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 o kernel e o sistema controlem o dispositivo. Por padrão, o administrador pode acessar todo o dispositivo, mas não pode alterar a ACL (o administrador deve assumir o controle do dispositivo primeiro.)
Todos (o SID mundial) recebem acesso de leitura. Além disso, o código não confiável também tem permissão para acessar o código. O código não confiável pode ser iniciado usando a opção Executar como no Explorer. Por padrão, o Mundo não abrange código restrito.
Observe também que o acesso de passagem não é concedido a usuários normais. Dessa forma, esse pode não ser um descritor apropriado para um dispositivo com um namespace.
Observe que as cadeias de caracteres SDDL acima não incluem modificadores de herança. Dessa forma, eles são apropriados apenas para objetos de dispositivo e não devem ser usados para arquivos ou chaves do Registro. Para obter mais informações sobre como especificar a herança usando o SDDL, consulte a documentação do SDK do Microsoft Windows.