O Windows possui um conjunto de mecanismos para garantir seu estado protegido em diferentes estágios de operação. O WFP é usado para filtragem de pacotes de rede, a identificação e a autenticação ocorrem por meio do lssas.exe ou com base no AD, e o EventLog é responsável pelo subsistema de auditoria. Mas um dos componentes mais importantes dessa cadeia é o UAC, ou Controle de Conta de Usuário (User Account Control).
Neste artigo, vamos considerar como configurá-lo e aplicá-lo separadamente em um dispositivo local e em um nó de domínio. Também veremos quais ferramentas e métodos hackers usam para contorná-lo e como mitigar esses riscos.
O que é UAC?
O UAC (User Account Control) é um mecanismo de segurança projetado para controlar a elevação de privilégios no sistema operacional, rastreando os processos em execução. Essa abordagem monitora ações não autorizadas e protege o dispositivo contra a execução de arquivos maliciosos. Classicamente, essa janela se parece com isto:

Nesse caso, o usuário é notificado de que o aplicativo que está iniciando possui todas as assinaturas necessárias e que o arquivo está no disco. Essa notificação pode ter várias variações, dependendo das políticas definidas no dispositivo: execução em uma janela segura, confirmação por senha / janela de consentimento comum.
Configuração no dispositivo local
Para configurar esse mecanismo de segurança, usaremos as configurações do UAC, que definem a política básica, e a Política de Grupo (Group Policy) especificará os detalhes e ajustes mais finos. Clique e digite Win (botão) → UAC (texto na caixa de pesquisa) → Alterar configurações de Controle de Conta de Usuário (Change User Account Control settings). Você verá uma janela com um controle deslizante com 4 níveis de política propostos:

O quarto e nível mais alto é identificado como Sempre notificar (Always Notify), o que significa que você deve ser notificado de toda ação realizada pelo usuário, incluindo alterações nas configurações do sistema do Windows. A solicitação é verificada em uma janela segura.
O terceiro nível, que oferece uma proteção menos rígida, notificará sobre alterações no dispositivo feitas por aplicativos (exceto alterações de configurações do sistema), mas ainda abrirá uma janela em modo seguro.
O segundo nível oferece o mesmo que o terceiro, porém, nesse caso, a janela de confirmação será aberta em uma janela normal, que o invasor pode confirmar.
O primeiro nível da política desativa qualquer influência do UAC sobre os processos em execução. Em algumas tarefas, esse mecanismo pode entrar em conflito com outros e interferir no funcionamento do dispositivo. Portanto, a resposta para a pergunta “Como desativar o UAC do Windows?” é o comando do PowerShell:
Set-ItemProperty -Path REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name ConsentPromptBehaviorAdmin -Value 0; Set-ItemProperty -Path REGISTRY: :HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name ConsentPromptBehaviorUser -Value 0Após executar esse comando, os requisitos do UAC cairão para o primeiro nível da política Nunca notificar (Never Notify). Os detalhes mais finos das configurações de verificação e notificação serão discutidos abaixo nas soluções para hosts de domínio, que também funcionarão para máquinas locais.
Configuração em um dispositivo no domínio
Nessa opção de configuração, existem parâmetros mais flexíveis que permitem definir o comportamento para cada grupo de usuários separadamente e qual método de verificação será utilizado. Vamos abrir a janela Executar com as teclas Win+R e digitar o comando:
gpmc.mscVá até a configuração de políticas do seu domínio e uma janela será aberta:

Vamos acessar a pasta com as políticas locais do domínio no caminho: Configuração do Computador → Configurações do Windows → Configurações de Segurança → Políticas Locais → Opções de Segurança:

Na prática, é um conjunto dos mesmos parâmetros que compõem a política na interface (UI), mas neste caso há também possibilidades de configuração personalizada e distribuição para nós. Vamos considerar cada política separadamente:

As principais configurações aqui são ConsentPromptBehaviorAdmin/User, que permitem definir o comportamento do UAC quando há elevação de privilégios do usuário e quais dados devem ser solicitados. As configurações variam para cada infraestrutura, mas existem boas práticas comuns em que os valores são importantes:
- FilterAdministratorToken - 1 (habilitado);
- EnableUIADesktopToggle - 0 (desabilitado);
- ConsentPromptBehaviorAdmin - 2 (solicitar consentimento em uma área de trabalho segura);
- ConsentPromptBehaviorUser - 3 (solicitar credenciais);
- EnableInstallerDetection - 1 (habilitado para uso doméstico) / 0 (desabilitado para ambiente corporativo);
- ValidateAdminCodeSignatures - 1 (habilitado);
- EnableSecureUIAPaths - 1 (habilitado);
- EnableLUA - 1 (habilitado);
- PromptOnSecureDesktop - 1 (habilitado);
- EnableVirtualisation - 1 (habilitado);
- InteractiveLogonFirst - 1 (habilitado para corporativo) / 0 (desabilitado para doméstico).
Após a aplicação da política, você deve aguardar até que um nó no domínio receba as novas regras ou forçar a atualização no nó necessário com o comando:
gpupdate /force
Esse mecanismo nos permitiu configurar uma camada adicional de proteção que controla a elevação de privilégios ao solicitar uma mudança de permissões. As principais ferramentas aqui são a solicitação de dados de conta e a solicitação de consentimento em uma janela segura, o que adiciona uma verificação extra para garantir que o sujeito tenha direitos sobre o objeto!