Computerbeveiliging - Hoe je bad guys buiten de deur houdt

UAC stand 3 bypass

29-12-2016, 15:21 door Erik van Straten, 4 reacties
Laatst bijgewerkt: 28-01-2017, 11:45
Ruim 2 weken geleden schreef Xavier Mertens een artikel [1] getiteld "UAC Bypass in JScript Dropper". Dit toont nogmaals aan dat UAC geen goede security boundary is, zeker niet als de UAC slider (schuifregelaar) niet in de hoogste stand staat.

Risico "Admin" account voor dagelijks gebruik
Risico loop je alleen als je een account gebruikt dat lid is van de groep Administrators (en daarmee Administrator privileges hebt, d.w.z. je geen "ordinary user" oftewel "gewone gebruiker" bent). Als je dat wel bent, bepaalt die slider onder welke omstandigheden je de bijbehorende privileges ook daadwerkelijk krijgt.

Administrators lidmaatschap en stand van UAC slider bepalen
Of je lid bent van de Administrators groep kun je, voor zover ik weet op alle recente Windows versies (in elk geval vanaf 7) en talen, zien door op de start knop te drukken en dan in te tikken: UserAccountControlSettings (dat is niet hoofdlettergevoelig) en de Enter-toets in te drukken:

A) Als om een Administrator wachtwoord wordt gevraagd, ben je waarschijnlijk geen lid van de groep Administrators en is jouw account safe voor deze aanval en kun je op "Afbreken" of "Cancel" drukken. Anders ben je waarschijnlijk wel lid van de groep Administrators;

B) Als je scherm wordt gedimd en er een popup-venster op de voorgrond verschijnt, staat de UAC-slider waarschijnlijk al op de bovenste stand (4 van 4). Kies "Yes" of "Ja" om dit te bevestigen. Met deze stand heb je enige bescherming tegen de bedoelde aanval (zie verderop);

C) Het UAC-instellingenscherm verschijnt meteen: de slider staat op stand 3 of lager. Je bent niet beschermd. Overigens is stand 3 de default (standaard) Windows instelling sinds Windows 7.

De aanval
De aanval werkt als volgt:

1) Kwaadaardige code die jij (per ongeluk) opstart, voegt gegevens toe onder jouw deel van het Windows register (een database op elke PC met nagenoeg alle Windows-, Programma- en gebruiker-instellingen). Onder de bestaande key:
HKEY_CURRENT_USER\Software\Classes\
worden een aantal subkeys toegevoegd, of indien deze al bestaan (dat zal zelden het geval zijn), overschreven:
mscfile\shell\open\command\
Vervolgens wordt aan de waarde "Default" (deze bestaat altijd en is van het type karakterreeks) een pad met commando toegevoegd dat met volledige Administrator rechten zal worden uitgevoerd (zonder dat je dit merkt);

2) Vervolgens zal de kwaadaardige code het volgende legitieme programma opstarten:
C:\Windows\System32\EventVwr.exe
Alleen als je lid bent van de groep Administrators zal dat programma (Event Viewer) alle bijbehorende privileges opvragen (zo niet, dan heb je alleen leesrechten in dat programma). Als lid van Administrators zal dit, uitsluitend met de UAC slider in de hoogste stand, tot een UAC popup leiden (omdat Event Viewer in een vertrouwd Windows programma is gebeurt dit niet bij stand 3 en lager).

3) EventVwr.exe is feitelijk een "wrapper" (zeg maar "enveloppe") om:
C:\Windows\System32\EventVwr.msc
en dat is dan ook het "programma" dat EventVwr.exe zal trachten te starten. Dat gebeurt tijdens de aanval echter niet, omdat het type "mscfile" (behorend bij de bestandsextensie ".msc" waarvoor elders in het register een koppeling bestaat) is "omgebogen" (zie punt 1) naar -tevens door de malware- op de schijf geplaatste executable code.

Reproduceren van de aanval
Deze aanval kon ik reproduceren door de "value name" genaamd "Default" (zie punt 1) de volgende waarde te geven:
"C:\Windows\System32\cmd.exe" /c mkdir "C:\Program Files\Dit zou niet moeten kunnen"

Als je nu opstart:
C:\Windows\System32\EventVwr.exe

A) Als je geen lid bent van de groep Administrators zal er niets zichtbaars gebeuren, en de map "C:\Program Files\Dit zou niet moeten kunnen\" zal niet worden aangemaakt.

Als je wel lid bent van de groep Administrators:

B) Als er een UAC popup verschijnt, staat de UAC slider op jouw PC kennelijk op de bovenste stand. De vraag in de popup is echter of je het, normaal gesproken vertrouwde (en door Microsoft uitgegeven) programma "Event Viewer Snap in Launcher" (NL: "Startprogramma voor de module logboeken") wilt starten. Let er in deze situatie (UAC slider op 3) dus op dat je niet zomaar zo'n popup te zien krijgt! Als je nu Yes/Ja kiest, zal de map "C:\Program Files\Dit zou niet moeten kunnen\" worden aangemaakt.

C) Als er geen UAC popup verschijnt zal de UAC slider vermoedelijk op stand 3 of lager staan. In dat geval zal de kwaadaardige code, zonder dat je dit merkt, worden uitgevoerd. In het voorbeeld zal de map "C:\Program Files\Dit zou niet moeten kunnen\" worden aangemaakt.

Nb. om de map "C:\Program Files\Dit zou niet moeten kunnen\" weer te verwijderen, heb je natuurlijk volledige Admin privileges nodig.

Conclusie
Kortom: werken onder een normaal gebruikersaccount is het veiligst (en leidt tot de minste UAC popups, nl. als deze echt noodzakelijk zijn). Wil je persé als admin werken, zet de UAC slider dan in elk geval op 4.

Meer info: zie [2] en [3].

[1] https://isc.sans.edu/forums/diary/UAC+Bypass+in+JScript+Dropper/21813/
[2] https://github.com/enigma0x3/Misc-PowerShell-Stuff/blob/master/Invoke-EventVwrBypass.ps1
[3] https://enigma0x3.net/2016/08/15/fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking/

Aanvulling 28-01-2017, 11:45: in augustus 2016 verwees de redeactie eerder al naar [3], zie [4].
[4] https://www.security.nl/posting/481560/Onderzoekers+omzeilen+Windows+UAC+via+Event+Viewer
Reacties (4)
29-12-2016, 22:25 door Spiff has left the building
Dankjewel voor je nette analyse, Erik.
Het bevestigt weer eens dat het verstandig is om standaard niet in een administrator-account te werken, maar veel beter in een standaardgebruikersaccount.
En het laat ook weer zien dat de sinds Windows 7 default (standaard) instelling voor UAC géén verstandige instelling is, en dat de UAC instelling beter aangepast kan worden naar het hoogste niveau.
Dat laatste werd overigens in 2009 al aangegeven:
https://www.security.nl/posting/26639/%22Gecastreerde%22+Windows+7+kwetsbaar+voor+virussen
Er werd toen al gesteld dat UAC met een instelling lager dan het hoogste niveau als 'gecastreerd' beschouwd moet worden (dus geen 'ballen' meer heeft).
30-12-2016, 00:08 door mcb
HKEY_CURRENT_USER\Software\Classes\mscfile\shell\open\command\
Deze aanval op zich is niet nieuw. (ik heb het dan niet over de toepassing op UAC maar de reg-key)

Een aantal jaar geleden malware tegengekomen dat deze key aanmaakt:
HKCU\Software\Classes\EXEfile\shell\open\command
Dat was een kreng om handmatig te verwijderen.

Overigens zijn er meer manieren om uac te omzeilen.
Ccleaner bijv. maakt een scheduled task aan om UAC af te vangen. (er komt wel UAC popup zodra je ccleaner installeert maar dat ter zijde)
30-12-2016, 23:47 door Vixen - Bijgewerkt: 30-12-2016, 23:47
Los ervan dat ik mij er al zeer van bewust ben dat UAC (gedeeltelijk) schijnveiligheid levert, vind ik het leuk om praktische exploits niet alleen te kennen maar ook te begrijpen, door bijvoorbeeld dit soort uitgebreide posts te lezen, of posts te lezen op http://exploit-db.com. Dit is een Interessante en simpele aanvalstechniek, doch zeer effectief (uitgaande van de gemiddelde gebruiker; iets wat je eigenlijk altijd wel doet bij het maken van een aanval). Ik zelf werk altijd onder een admin account, voor mijn gebruiksdoeleinden heb ik vaak het administratorniveau nodig, maar uiteraard heb ik "de" slider op niveau 4 sinds ik Windows geïnstalleerd heb en zou ik het zeker gaan onderzoeken als ineens een Windows programma onverwacht om administrator rechten vraagt.

Bedankt voor de post en de moeite die je er in hebt gestoken!

Vixen
31-12-2016, 15:40 door Erik van Straten
Dank voor jullie reacties!

Wat me vooral opviel aan deze aanval was dat je er niets van ziet (met de slider op stand 3).

Sterker, aanvankelijk dacht ik dat de aanval helemaal niet werkte. Ik begon met:
HKCU\Software\Classes\mscfile\shell\open\command\"Default"="cmd.exe"
en dat leek niets te doen als ik eventvwr.exe startte.
Ook het volgende gaf geen zichtbaar resultaat:
HKCU\Software\Classes\mscfile\shell\open\command\"Default"="notepad.exe"
Toen ik echter in task manager keek, bleken de zo gestartte processen allemaal nog te draaien!

In de eerdergenoemde [2] staat onder meer (ietsje herschreven om omklappen van de regels te voorkomen):
$ConsentPrompt = (Get-ItemProperty
  HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System)
  .ConsentPromptBehaviorAdmin
$SecureDesktopPrompt = (Get-ItemProperty
  HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System)
  .PromptOnSecureDesktop

if($ConsentPrompt -Eq 2 -And $SecureDesktopPrompt -Eq 1){
    "UAC is set to 'Always Notify'. This module does not bypass this setting."
    exit
}

De waardes van ConsentPromptBehaviorAdmin en PromptOnSecureDesktop, maar ook van ConsentPromptBehaviorUser en EnableLUA bij de 4 verschillende UAC slider-instellingen, vind je in [3] en meer info over alle mogelijke waarden in [4].

Overigens kun je een Admin account nog ietsje veiliger maken (dan slider stand 4) door ConsentPromptBehaviorAdmin de waarde 1 te geven: in plaats van een UAC Ja/Nee vraag op gedimde desktop, krijg je elke keer een vraag om het admin wachtwoord in te voeren (eveneens op een gedimde desktop).

[2] https://github.com/enigma0x3/Misc-PowerShell-Stuff/blob/master/Invoke-EventVwrBypass.ps1
[3] http://winaero.com/blog/how-to-change-uac-settings-in-windows-10/
[4] https://msdn.microsoft.com/en-us/library/cc232771.aspx
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.