ExamCookie – UAC bypass

ExamCookie er et dansk overvågningsprogram til at monitorere computere under eksamination. Programmet minder mest af alt om spyware, og kommer med en række features man ofte ville se i spyware:

  • Skærmdumper
  • Keylogger
  • Process logning
  • Logning af udklipsholder
  • Overvågning af netværkstrafik

Disse bliver brugt under eksamen, der er også en række funktioner som ikke bliver brugt, nemlig muligheden for at eksekvere kode og ændre systemindstillinger. Programmet indeholder også en serie af antidebugging teknikker samt detektering af et virtualiseret miljø.

Programmet indeholder indtil flere sårbarheder, som bør overvejes før programmet installeres på en personelig computer. I programmets nuværnde tilstand er min vurdering at programmet ikke er i stand til at opretholde et rimeligt sikkerhedsniveau.
Jeg anbefaler at der bruges ikke personelige computere til at eksekvere dette program på.

Exploitet

Programmet er skrevet i .NET, og kan derfor disassembles i værktøjer som dotPeek eller dnSpy til statisk analyse. Programmet er obfuskeret med .Net Reactor, og er trivielt at deobfuskere med de4dot skrevet af samme person som dnSpy.

Det er her muligt at finde denne funktion DeserializeFromFile(string filename, ref object obj), som bruger denne sårbare funktion:
1
Denne funktion bliver kaldt fra GetOfflineFiles, som bliver kaldt i hovedløkken for UploadThread:
2
Funktionen her leder efter filer i %appdata%\examcookie.dk\ExamCookie.WinClient\1.2.0.10\ecoffline stien til programmet, og kalder DeserializeFromFile() på alle filer der ender på ”.ecof”. Det er derfor muligt at placere en fil her, med denne endelse, og få programmet til at deserialize filen.
Der er skrevet om emnet her, i Google Project Zero.
Dette program kommer dog med den funktion at hele dele af programmet kun aktiveres på eksamensdagen, det vil sige at DeserializeFromFile kun kaldes på eksamensdagen når brugeren er logget ind.
3
Der forventes et serialized javascript element, altså JSON, af typen ParameterOut. Denne klasse indeholder følgende felter:
4
Det er muligt at lave en JSON streng med denne information, og give til programmet under kørslen, for at aktivere programmet.
Jeg verificerede sårbarheden ved at kigge på de elementer som programmet forventede at modtage fra serveren, og fodrede disse til programmet under debugging:

{"SignInId":1,"Student":{"Name":"Noone","Username":"Be","Classname":"Dck"},"Exam":{"Id":1337,"Status":0,"Code":"","Description":"","TimeBegin":"","TimeEnd":"","TimeExt":20000},"ClientConfiguration":{"MinimumClientVersion":"1.0.0.0","NotifyBoxDisplayTime":10,"IncludeLogFile":false,"HeartbeatPulseMin":30,"HearbeatPulseMax":60,"ScreenPolltime":5000,"ScreenChangedPercent":5,"ScreenSendDelay":1,"ScreenForceSendTime":300,"ClipboardPolltime":500,"FrontAppPolltime":1000,"ProcessPolltime":5000,"ProcessIgnoreWindows":[],"ProcessIgnoreMac":[],"AdapterPolltime":20000}}

Som payload bruges ysoserial.net (https://github.com/pwntester/ysoserial.net), til at åbne lommeregneren i eleveret integritet. Det er dog muligt at køre en hvilket som helst kommando, en hacker ville ofte køre en Powershell downloader til at hente resten af en payload.
Denne payload placers I mappen %appdata%\examcookie.dk\ExamCookie.WinClient\1.2.0.10\ecoffline, programmet startes, og payloaden eksekveres.
Denne UAC bypass fungere kun når brugeren har eksamen, og bruger programmet ExamCookie.

Update

Examcookie har nu patched den fejl som blev rapporteret. Patchen er dog ufuldstændig og sikkerhedshullet kan stadigt udnyttes. Det er dog blevet lang sværer grundet kryptering af ecof filerne inden de bliver lagt på disken.

Disclaimer

Jeg har senere udført arbejde for ExamCookie, og dette opslag reflektere ikke arbejdet jeg har lavet for dem, og indeholder ejheller information jeg har modtaget efter.

Show Comments