Tokens restritos

Um token restrito é um token deacesso primário ou de representação que foi modificado pela função CreateRestrictedToken . Um processo ou representação de thread em execução no contexto de segurança de um token restrito é restrito em sua capacidade de acessar objetos protegíveis ou executar operações privilegiadas. A função CreateRestrictedToken pode restringir um token das seguintes maneiras:

  • Remova os privilégios do token.
  • Aplique o atributo somente negação aos SIDs no token para que eles não possam ser usados para acessar objetos protegidos. Para obter mais informações sobre o atributo somente negação, consulte Atributos sid em um token de acesso.
  • Especifique uma lista de SIDs restricionais, que podem limitar o acesso a objetos protegíveis.

O sistema usa a lista de SIDs restritos quando verifica o acesso do token a um objeto protegível. Quando um processo ou thread restrito tenta acessar um objeto protegível, o sistema executa duas verificações de acesso: uma usando SIDs habilitados para o token e outra usando a lista de SIDs restritos. O acesso será concedido somente se ambas as verificações de acesso permitirem os direitos de acesso solicitados. Para obter mais informações sobre verificações de acesso, consulte Como os DACLs controlam o acesso a um objeto.

Você pode usar um token primário restrito em uma chamada para a função CreateProcessAsUser . Normalmente, o processo que chama CreateProcessAsUser deve ter o privilégio SE_ASSIGNPRIMARYTOKEN_NAME, que geralmente é mantido apenas pelo código do sistema ou pelos serviços em execução na conta LocalSystem. No entanto, se a chamada CreateProcessAsUser especificar uma versão restrita do token primário do chamador, esse privilégio não será necessário. Isso permite que aplicativos comuns criem processos restritos.

Você também pode usar um token primário ou de representação restrito na função ImpersonateLoggedOnUser .

Para determinar se um token tem uma lista de SIDs restritivos, chame a função IsTokenRestricted .

Observação

Os aplicativos que usam tokens restritos devem executar o aplicativo restrito em áreas de trabalho diferentes da área de trabalho padrão. Isso é necessário para evitar um ataque por um aplicativo restrito, usando SendMessage ou PostMessage, para aplicativos irrestritos na área de trabalho padrão. Se necessário, alterne entre áreas de trabalho para fins de aplicativo.