Como o mecanismo de integridade é implementado no Windows Vista
O mecanismo de integridade do Windows é usado de várias maneiras no Windows Vista. Sua main finalidade é restringir as permissões de acesso de aplicativos em execução na mesma conta de usuário que são menos confiáveis. O mecanismo impede que um código menos confiável modifique objetos em um nível mais alto. A maioria dos objetos sob o controle do grupo Administradores ou do Sistema tem uma DACL (lista de controle de acesso discricionário) que normalmente concede permissão de controle total aos Administradores e ao Sistema e a permissão de leitura e execução para usuários autenticados. Exemplos de recursos sob controle do grupo Administradores e do Sistema são o diretório Arquivos de Programas para aplicativos ou o hive HKEY_LOCAL_MACHINE do registro. O mecanismo de integridade não aprimora a segurança de objetos que já estão configurados corretamente para impedir que diferentes contas de usuário ou grupos os acessem. A principal finalidade do mecanismo de integridade é abordar permissões diferentes para programas acessarem recursos sob o controle total da mesma entidade de segurança do usuário.
Os recursos sob o controle da mesma entidade de segurança de usuário que precisam de proteção adicional estão principalmente sob o perfil do usuário (C:\Users\<username> directory e HKEY_CURRENT_USER hive no registro) e os programas de aplicativo atualmente em execução em nome desse usuário. O Windows Vista usa o mecanismo de integridade das seguintes maneiras.
- No UAC, ele limita o acesso entre processos em execução com privilégio de usuário padrão e processos elevados em execução com direitos administrativos completos no modo de aprovação Administração.
- A segurança COM está ciente dos níveis de integridade e não permite que clientes de integridade inferior se associem a instâncias de classe em execução em um nível de integridade mais alto.
- Nas configurações de segurança padrão, ele restringe o acesso à pasta raiz do volume do sistema.
- No modo Protegido internet Explorer, ele limita a capacidade do código em execução no navegador da Internet para modificar os dados do usuário ou as configurações de perfil do usuário.
- Para permitir que aplicativos em execução com baixa integridade tenham um local de arquivo gravável, ele atribui pastas específicas no perfil do usuário a um nível de integridade baixo.
O mecanismo de integridade faz parte da arquitetura de segurança do Windows Vista. Ao longo do tempo, aplicativos específicos que lidam com entradas não confiáveis (principalmente voltadas para a Internet) são atualizados para aproveitar a capacidade de execução em um nível de integridade baixo. Os aplicativos de produtividade pessoal são executados em um nível de integridade médio, desde que os usuários saibam a origem dos dados de entrada. Para a maioria dos aplicativos, o mecanismo de integridade é completamente transparente e não interfere nos recursos do aplicativo. Os serviços de aplicativos podem ser atualizados para fornecer um melhor isolamento dos recursos do servidor para processos de cliente em diferentes níveis de integridade.
Níveis de integridade e UAC
O UAC no Windows Vista executa vários programas em diferentes níveis de acesso na mesma área de trabalho ao usar Administração Modo de Aprovação. Os programas têm privilégios diferentes com base no token de acesso de segurança atribuído ao processo quando o processo é criado. Os usuários com contas que são usuários padrão têm apenas um token de acesso de segurança criado durante o logon. O token de acesso de usuário padrão recebe um nível de integridade médio. O token de acesso de usuário padrão de integridade média é atribuído a quase todos os processos de aplicativo executados pelo usuário. Aplicativos específicos, como o modo protegido internet Explorer, são uma exceção descrita mais adiante.
Os usuários com contas que são membros do grupo Administradores têm dois tokens de acesso de segurança criados no logon vinculados. Um token de acesso é um token de acesso de usuário padrão atribuído a um nível de integridade médio, que tem o grupo Administradores usado somente para negar verificações de acesso e determinados privilégios administrativos removidos. O segundo token de acesso é um token de acesso elevado com privilégio completo que recebe um alto nível de integridade porque o grupo administradores e os privilégios administrativos estão presentes no token de acesso. Os tokens de acesso são vinculados porque estão relacionados ao mesmo logon interativo para essa conta de usuário. Ambos os tokens de acesso têm o mesmo SID de usuário e os mesmos grupos globais do Active Directory (exceto os grupos filtrados para Domain e Enterprise Administração).
O Windows Explorer (também conhecido como shell) e todas as tarefas não administradores recebem o token de acesso de integridade média e de usuário padrão. Para a conta de usuário que é membro do grupo Administradores, quase todos os aplicativos são executados com o token de acesso de integridade média. A política de integridade NO_WRITE_UP não restringe as permissões de acesso de processos de nível médio para acessar objetos que têm um rótulo obrigatório de objeto médio implícito. O mecanismo de integridade é transparente para aplicativos em nível de integridade média, a menos que eles sejam projetados para controlar outros processos que podem estar em execução em um nível de privilégio mais alto. A Automação da Interface do Usuário do Windows é um exemplo de um aplicativo projetado para controlar outros processos.
O UAC Administração Modo de Aprovação permite que o usuário inicie tarefas administrativas e aplicativos depois de fornecer consentimento com o token de acesso elevado e privilégio completo. O sistema operacional deve restringir a capacidade do processo de privilégio inferior (usuário padrão) de adulterar diretamente o processo de privilégio superior (Administrador) em execução no mesmo SID de usuário. O mecanismo de integridade do Windows limita as permissões de acesso que o processo de integridade média pode ter no processo de alta integridade. O gerenciador de processos (parte do kernel do Windows) atribui as opções de política obrigatórias NO_READ_UP e NO_WRITE_UP para impedir que processos de integridade inferior abram um processo de maior integridade para acesso de leitura ou gravação.
O processo de integridade inferior tem apenas acesso de execução genérico. O acesso de execução genérico inclui o seguinte:
- SYNCHRONIZE, PROCESS_QUERY_LIMITED_INFORMATION
- PROCESS_TERMINATE
O acesso de leitura genérico a um processo de integridade mais alto (PROCESS_VM_READ acesso à memória virtual de um processo e PROCESS_QUERY_INFORMATION) é restrito para impedir que processos de privilégios inferiores obtenham acesso de leitura à memória que possa conter dados de senha ou outro material de chave usado para autenticação. O acesso genérico de gravação ao processo de integridade superior é bloqueado pela política de NO_WRITE_UP. Os direitos de acesso genéricos do processo de gravação incluem:
- PROCESS_CREATE_THREAD
- PROCESS_VM_OPERATION
- PROCESS_VM_WRITE
- PROCESS_DUP_HANDLE
- PROCESS_SET_QUOTA
- PROCESS_SET_INFORMATION
- PROCESS_SET_PORT
Hive do registro de usuário atual
A maioria dos objetos no perfil do usuário não recebe um rótulo obrigatório explícito e, portanto, tem um nível de integridade padrão implícito de média. Isso se aplica ao hive de HKEY_CURRENT_USER (HKCU) do registro. As chaves criadas no HKCU têm um nível implícito de integridade média. Isso significa que, para usuários que são membros do grupo Administradores, o hive HKCU é gravável por aplicativos em execução com um token de acesso de usuário padrão de integridade média ou o token de acesso completo de administrador de alta integridade. Esse deve ser o caso por motivos de compatibilidade do aplicativo. Lembre-se de que o hive do HKEY_LOCAL_MACHINE (HKLM) tem uma política de segurança padrão que concede aos administradores e ao sistema controle total, e os usuários leem e executam o acesso. O hive HKLM é modificável somente por processos elevados que recebem o token de acesso completo do administrador. O hive HKLM não é protegido por um rótulo altamente obrigatório.
Como o nível de integridade padrão para objetos que não têm um rótulo obrigatório explícito é médio, é claro que os usuários que são membros do grupo de administradores podem executar programas em diferentes níveis de privilégio (médio e alto) que compartilham dados de perfil de usuário e HKCU. O Windows Vista não impõe um limite estrito entre processos de integridade média e de alta integridade. O processo de alta integridade tem permissão para "ler". É comum que aplicativos em execução com um token de acesso de alta integridade e privilégio completo leiam informações de configuração do HKCU ou aceitem arquivos de entrada que afetam o comportamento do processo de alta integridade. Os aplicativos executados com privilégio completo devem usar o HKLM para armazenar informações de configuração modificáveis somente por administradores. Aplicativos de privilégio completo também precisam verificar se os dados de entrada do usuário estão bem formados antes de processar arquivos modificáveis pelo usuário.
O COM tem reconhecimento de integridade
COM é a estrutura para a criação de componentes de aplicativo e serviços de objeto. A infraestrutura COM está ciente do nível de integridade de um cliente que chama CoCreateInstance e o processo de servidor que executa uma instância de classe. As áreas da funcionalidade COM em que os níveis de integridade influenciam o comportamento são:
- O moniker de elevação COM permite que os clientes iniciem serviços elevados em um nível de integridade alto depois que o administrador fornece consentimento ou um usuário padrão fornece credenciais explícitas de administrador.
- As classes de servidor que são executadas com privilégios elevados acima do nível médio de integridade devem ter o CLSID definido no hive do registro HKLM.
- O COM impede que os clientes em um nível de integridade inferior se vinculem a instâncias em execução de servidores em um nível de integridade mais alto, a menos que o servidor permita programaticamente o acesso de clientes inferiores.
O moniker de elevação COM permite que aplicativos em um nível de integridade baixo ou médio iniciem serviços COM em um processo em execução com direitos elevados em alta integridade. O moniker de elevação permite tarefas específicas projetadas para serem executadas com privilégios elevados e não destinadas à compatibilidade completa do aplicativo. A elevação COM é integrada à elevação do UAC. O processo de servidor COM com privilégios elevados recebe um token de acesso elevado com privilégio completo com alta integridade. O COM não permite que clientes em um nível inferior se associem a uma instância em execução do servidor em um nível de integridade mais alto.
Se um servidor COM for projetado para dar suporte a conexões de clientes de menor integridade, o servidor poderá modificar programaticamente as permissões de inicialização/ativação no registro para o CLSID para permitir a associação de um cliente de menor integridade. O COM usa o NO_EXECUTE_UP política obrigatória em uma ACE de rótulo obrigatório para controlar se os clientes têm permissão para associar a uma instância de servidor em nível de integridade mais alto. As permissões de acesso de inicialização/ativação COM são mapeadas para direitos de acesso de execução genéricos no GENERIC_MAPPING usado pelo COM para verificar a ativação. O nível de integridade em um rótulo obrigatório associado ao objeto identifica o nível de integridade mais baixo de um cliente que tem permissão para associar ao servidor. Semelhante ao acesso ao sistema de arquivos, a política obrigatória implícita padrão permite que clientes de integridade média se associem a servidores.
Para servidores COM projetados para permitir que um cliente de baixa integridade se associe a uma instância do servidor, as permissões de ativação COM são definidas pelo código do servidor.
Para permitir que um cliente de baixa integridade se associe ao servidor
Defina um rótulo obrigatório com uma política de NO_EXECUTE_UP (NX) para baixo nível de integridade. O SDDL para o descritor de segurança de objeto com a política de rótulo obrigatória para baixa integridade é o seguinte:
O:BAG:BAD:(A;;0xb;;;WD)S:(ML;;NX;;;LW)
Converta o descritor de segurança de cadeia de caracteres em um descritor de segurança binário.
Defina as Permissões de Inicialização para o CLSID para o CLSID do servidor usando o descritor de segurança binário.
A interface do usuário de segurança COM, dcomcfg.exe, não dá suporte a níveis de integridade.
Exemplos de código sobre como definir a política obrigatória de permissão de inicialização COM estão disponíveis em Recursos do Mecanismo de Integridade do Windows para obter mais informações sobre com e suporte no nível de integridade.
Os serviços são atribuídos ao nível de integridade do sistema
O SCM (Service Control Manager) inicia processos de serviço usando uma conta de serviço especial ou um nome de usuário e senha. As contas de serviço especiais são LocalSystem, LocalService e NetworkService. Os serviços em execução em uma dessas contas de serviço têm privilégios especiais, como o privilégio SE_IMPERSONATE_NAME que permite que o serviço execute ações enquanto representa outros usuários. O Windows Vista atribui um nível de integridade do sistema ao objeto de processo para serviços em execução em uma das contas de serviço especiais. A imagem a seguir do Process Explorer mostra o nível de integridade do sistema atribuído ao token de acesso para contas de serviço especiais.
Figura 6 Nível de integridade do sistema para serviços
Embora o processo de serviço tenha um nível de integridade do sistema, os objetos protegíveis criados por essas entidades não recebem um rótulo obrigatório do sistema. Os objetos criados por serviços (exceto processos filho, threads, tokens de acesso e trabalhos) têm um nível implícito de integridade média.
As alterações de serviço do Windows Vista descrevem as alterações nos serviços para melhorar a segurança, a confiabilidade e a capacidade de gerenciamento. As alterações para serviços melhoram a segurança do sistema isolando os serviços na Sessão 0 e isolando os recursos que os serviços podem acessar usando SIDs de serviço. O nível de integridade do sistema para contas de serviço especiais é consistente com os objetivos de isolamento de serviço. Os processos de serviço em execução no nível de integridade do sistema são protegidos contra o acesso de um por processo de integridade inferior. Os direitos de acesso ao processo que estão disponíveis para processos de menor integridade para abrir um processo de serviço são limitados ao seguinte:
- SYNCHRONIZE
- PROCESS_QUERY_LIMITED_INFORMATION
- PROCESS_TERMINATE
Alguns aplicativos são projetados usando vários processos cooperativos que podem estar em execução em uma ou mais contas de serviço. A maioria dos mecanismos de IPC (comunicação entre processos) entre processos e serviços, como RPC, não é restrita pelo nível de integridade. Os serviços precisam ser particularmente cuidadosos para validar a entrada de clientes de baixa integridade.
Identificadores duplicados entre serviços
Os aplicativos de serviço que usam vários processos às vezes são projetados para duplicar identificadores para objetos, como arquivos, entre processos de servidor. Se todos os processos estiverem em execução na mesma conta de serviço especial, a segurança padrão nos processos de serviço não introduzirá restrições. A DACL padrão em processos de serviço em execução em contas de serviço especiais não concede acesso PROCESS_DUP_HANDLE, o que é necessário para chamadas DuplicateHandle. Os designers de serviço de aplicativo precisam implementar a funcionalidade para conceder acesso PROCESS_DUP_HANDLE no objeto de processo de serviço a outra conta de usuário usada por um coprocessamento para compartilhar identificadores entre processos de aplicativo executados em contas de usuário diferentes. Mas se o serviço no qual você deseja duplicar o identificador for uma conta de serviço especial em execução em um nível de integridade do sistema, um coprocessamento em execução em um nível de integridade alto ou médio não poderá obter PROCESS_DUP_HANDLE devido à política de rótulo obrigatória. Mesmo que a DACL conceda acesso PROCESS_DUP_HANDLE, a política de rótulo obrigatória não permite que chamadores de integridade inferior acessem. Se essa situação afetar o design do aplicativo de serviço, o código do serviço de aplicativo precisará ser alterado para que o processo que inicia DuplicateHandle esteja em um nível de integridade superior ao nível de integridade do processo que é a origem do identificador. Ou seja, um serviço de maior integridade pode duplicar um identificador em seu próprio processo como um destino de um processo de integridade inferior como a origem do identificador.
Política de representação
O privilégio SE_IMPERSONATE_NAME permite que um processo de servidor represente o contexto de segurança de um processo de cliente. O privilégio Representar é um privilégio poderoso. O mecanismo de integridade associa o privilégio de representação a tokens de acesso que têm um nível alto ou de integridade do sistema. O mecanismo de integridade impõe a política de que um assunto pode representar um cliente em um nível de integridade mais alto, somente se ele tiver o privilégio Representar.
Um cenário em que essa restrição de política se aplica seria quando um processo de baixa integridade falsifica a interface do usuário para persuadir um usuário administrador a inserir credenciais de administrador. O código mal-intencionado usa as credenciais para chamar LsaLogonUser e ImpersonateLoggedOnUser para tentar iniciar um processo em um nível de privilégio mais alto. A política de mecanismo de integridade para tokens de acesso de representação é que o nível de integridade do token de acesso retornado por LsaLogonUser não deve ser superior ao nível de integridade do processo de chamada.
Pasta raiz em alto nível de integridade
A pasta raiz da partição do sistema, normalmente C:\ tem sido usada historicamente como um local conveniente para armazenar programas ou arquivos temporários, embora a prática não seja incentivada. Programas de instalação que exigem privilégios de administrador geralmente são copiados para a pasta raiz antes de serem iniciados. A política de segurança padrão para a pasta raiz foi projetada para permitir que usuários autenticados criem subpastas na pasta raiz, mas permitem que apenas os administradores criem arquivos na pasta raiz. Além disso, o ideal é que a política não permita que usuários não administrativos modifiquem arquivos na pasta que foram criados pelos administradores. Essa política é difícil de definir usando apenas a ACL para a pasta raiz.
Ao definir um rótulo obrigatório com um alto nível de integridade que se aplica a objetos filho, mas não a contêineres filho, a segurança padrão da pasta raiz atende a essa política. Os usuários padrão que executam programas no nível de integridade média não podem modificar os arquivos criados pelos administradores na pasta raiz, mesmo que a ACL conceda aos usuários acesso de modificação. A pasta raiz tem um rótulo obrigatório herdável em alta integridade que é herdado por objeto e que não se propaga para subpastas.
A imagem a seguir mostra as configurações de segurança padrão no C:\ pasta raiz, incluindo o objeto herda rótulo obrigatório em alta integridade. A Tabela 9 mostra as definições para as abreviações na imagem.
Abreviações de imagem da Tabela 9
Abreviação | Definição |
---|---|
(OI) |
Herdar objeto |
(NP) |
Sem propagação |
(E/S) |
Herdar somente |
(NW) |
Sem gravação |
Figura 7 Rótulo obrigatório na pasta raiz
Modo protegido Explorer internet com baixa integridade
Internet Explorer é um exemplo de um aplicativo projetado para aceitar dados arbitrários e código extensível da Internet. Como a origem do conteúdo da Internet raramente é autenticada (assinada), precisamos supor que toda a entrada da Internet não é confiável. Os ataques contra Explorer da Internet ou contra qualquer outro navegador da Internet demonstram a natureza não confiável do conteúdo dinâmico e dos dados disponíveis na Internet. Do ponto de vista da segurança, assumimos que a Internet Explorer processo em si está comprometida e não confiável e procuramos soluções que limitem os possíveis danos causados por ataques no navegador. Algumas soluções propostas para ataques baseados em navegador tentam isolar completamente o navegador da Web de outros aplicativos e dados. Infelizmente, o isolamento completo do navegador tem um impacto significativo na experiência de navegação do usuário, como a capacidade de iniciar programas automaticamente para ler vários tipos de arquivo, como arquivos .pdf. O isolamento completo dificulta experiências comuns do usuário, como carregar imagens em sites da Web, se o navegador não tiver acesso de leitura aos arquivos de dados do usuário.
O objetivo do modo protegido internet Explorer é reduzir os direitos de acesso disponíveis para o processo, a fim de limitar a capacidade de uma exploração em execução no navegador para criar arquivos de inicialização indesejados, modificar arquivos de dados do usuário, fazer alterações irritantes nas configurações do navegador ou impulsionar o comportamento de outros programas em execução na área de trabalho. Todo o código em execução no modo protegido internet Explorer em um processo de baixa integridade é considerado não confiável. O nível de integridade média padrão para objetos impede que o navegador abra diretórios, arquivos ou chaves do Registro para acesso de gravação, exceto aqueles explicitamente rotulados com baixa integridade. A UIPI impede que o código do navegador de baixa integridade envie mensagens de janela potencialmente prejudiciais para outros aplicativos em execução na área de trabalho.
O navegador em execução com baixa integridade tem acesso de leitura aos arquivos de dados do usuário. Como o mecanismo de integridade do Windows não impõe confidencialidade, ele não restringe o fluxo de informações. O processo também pode usar credenciais padrão para iniciar conexões de rede, como para um servidor proxy de rede (necessário quando a autenticação é necessária para se conectar à Internet) ou a um dispositivo de impressora de rede para imprimir uma página da Web. O processo de baixa integridade também pode iniciar uma conexão autenticada com outros serviços de rede e, assim, autenticar-se nesses servidores como o usuário atual.
O design do aplicativo da Internet Explorer precisava de alguma reestruturação para ser executado no Modo Protegido em um nível de integridade baixo. A principal alteração é que determinadas operações de programa foram movidas para um processo separado, conhecido como um processo de agente, em execução em um nível de integridade médio. O processo do agente é iniciado no nível de integridade média quando o usuário clica no ícone Explorer internet ou em um link de URL. O agente verifica a URL e a política de zona e inicia um processo filho, iexplore.exe, no nível de integridade baixa para fazer a conexão com a Internet e renderizar a página da Web. A imagem a seguir do Process Explorer mostra o ieuser.exe, o processo do agente no nível médio de integridade e o processo de iexplore.exe no nível de integridade baixo.
Figura 8 Processos de Explorer da Internet no Modo Protegido
Tudo o que o usuário experimenta na Internet Explorer navegador da Web é feito dentro do processo de baixa integridade. Algumas operações específicas, como alterar as configurações de Opções da Internet ou a caixa de diálogo Salvar como arquivo , são tratadas pelo processo do agente. Se a URL for um site confiável, com base nas configurações de política de zona padrão, o processo do agente iniciará uma instância diferente de iexplore.exe em um processo de integridade média. Todas as extensões de navegador e controles ActiveX são executados dentro do processo de baixa integridade. Isso tem a vantagem de que qualquer exploração potencial em uma extensão de navegador também está em execução com baixa integridade.
A internet Explorer é um pouco mais complicada do que outros aplicativos porque hospeda extensões de navegador e controles ActiveX que não são desenvolvidos pela Microsoft, inicia outros aplicativos com base em tipos mime para diferentes extensões de arquivo e integra a janela do cliente de diferentes aplicativos em um único quadro de janela pai. Os usuários também baixam software da Internet por meio do navegador e iniciam imediatamente um pacote de aplicativos ou instalador de aplicativo. Muitas dessas operações exigem ajuda do processo do agente em um nível de integridade mais alto para mediar por meio do usuário para confirmar uma operação. Caso contrário, o código em execução no navegador pode instalar software mal-intencionado no sistema e tentar modificar ou excluir os dados do usuário. A instalação de controles ActiveX é executada usando uma tarefa elevada iniciada pelo UAC que requer direitos de administrador.
Como a Internet Explorer dá suporte a uma ampla variedade de interações do usuário entre o navegador e outros aplicativos locais (copiar e colar é um exemplo óbvio), o mecanismo de integridade que limita o acesso de gravação a objetos não é um mecanismo de isolamento completo. O design da Internet no modo protegido Explorer analisou muitas interações diferentes e adaptou especificamente o comportamento do agente e do processo de iexplore.exe de direitos baixos para manter a funcionalidade de privilégios mínimos, fornecendo uma experiência avançada e altamente colaborativa do usuário.
Para obter mais informações sobre Explorer de Internet no Modo Protegido, consulte Noções básicas e trabalhando no modo protegido Explorer internet (https://go.microsoft.com/fwlink/?LinkId=90931).