Hovedmenu
Devolutions-blog

Nyheder, opdateringer og indsigter fra Devolutions.

Using RDP without leaving traces rdm remote desktop manager adventures cto

Brug RDP uden at efterlade spor: den offentlige tilstand i MSTSC

Kommandolinjeparameteren `/public` i MSTSC slår „offentlig tilstand“ til og forhindrer RDP i at gemme legitimationsoplysninger, sessionsdetaljer og cachede billeder. Artiklen gennemgår, hvad det betyder for sikkerhed og forensisk analyse.

Har du nogensinde undret dig over, hvad kommandolinjeparameteren „/public“ i MSTSC egentlig gør? Den slår „offentlig tilstand“ til i RDP-klienten, en funktion der minder lidt om „inkognitotilstand“ i webbrowsere. Den er beregnet til en „offentlig“ eller „delt“ computer, hvor brugerne vil undgå, at legitimationsoplysninger, sessionsdetaljer og cachede billeder gemmes lokalt.

For forensiske analytikere kan de spor, en ondsindet angriber efterlader ved at bruge MSTSC på et kompromitteret system, være en guldgrube af information. Her er en liste over alle de funktioner, som den offentlige tilstand i RDP påvirker:

Forbindelsesindstillinger

Vidste du, at mstsc gemmer forbindelsesindstillinger i den skjulte fil Default.rdp? Når offentlig tilstand er slået til, lader mstsc dig ikke gemme ændringer af forbindelsesindstillingerne i den fil:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Den nemmeste måde at redigere den manuelt på er at starte Notepad fra kommandolinjen: notepad "~\Documents\Default.rdp".

Cache af legitimationsoplysninger

mstsc bruger legitimationsstyringen i Windows til at gemme legitimationsoplysninger lokalt, så de kan genbruges ved nye forbindelser til den samme server. Offentlig tilstand slår brugen af cachede legitimationsoplysninger fra, så du bliver bedt om legitimationsoplysninger, selv om de findes lokalt:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Gemte legitimationsoplysninger bruger præfikset „TERMSRV/“ og kan vises med denne kommando:

cmdkey /list | ? { $_ -Match "TERMSRV/" } | % { $_ -Replace ".*: " }

Offentlig tilstand forhindrer også brugeren i at gemme legitimationsoplysninger i logonprompten:

!!Mstsc public mode rdm devolutions blog remote desktop manager enter credentials

Vedvarende bitmap-cache

Det mest iøjnefaldende spor, mstsc efterlader, er den vedvarende bitmap-cache. I RDP opdeler serveren skrivebordsbilledet i bitmap-fragmenter og cacher dem på klienten. Når et fragment gentages, beder serveren klienten om at genbruge den cachede version i stedet for at sende det igen. Caching forbedrer dog først ydeevnen, når klienten har gemt nok fragmenter. For at gøre nye forbindelser hurtigere lader den vedvarende bitmap-cache bitmaps blive liggende på tværs af sessioner.

Offentlig tilstand slår funktionen fra, men den kan også slås fra separat med BitmapCachePersistEnable:i:0 i .RDP-filen. Den vedvarende bitmap-cache gemmer filer (bcache24.bmc, Cache0000.bin, Cache0001.bin osv.) under %LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache. Cacheformatet er ikke dokumenteret, men du kan bruge BMC-Tools til at udtrække bitmap-indholdet:

git clone <https://github.com/ANSSI-FR/bmc-tools> && cd bmc-tools
python .\bmc-tools.py -s "$Env:LocalAppData\Microsoft\Terminal Server Client\Cache" -d .

Derefter kan du bladre gennem tusindvis af bitmap-fragmenter fra tidligere fjernskrivebordssessioner:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Husk, at bitmap-cachen ikke er en pålidelig optagemetode. Det svarer til at forsøge at samle makulerede dokumenter ved at rode i genbrugscontaineren. Når det er sagt, kan den stadig være en skattekiste af information.

Senest brugte servere

Microsofts RDP-klient husker op til 10 senest brugte (MRU) servere, så det er nemt at vælge en server i rullemenuen uden at skrive det hele igen:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Offentlig tilstand slår opdatering af den serverliste fra. Listen gemmes i registreringsdatabasen:

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default]
"MRU0"="10.10.0.25"
"MRU1"="IT-HELP-TEST.ad.it-help.ninja"
"MRU2"="IT-HELP-DVLS.ad.it-help.ninja"
"MRU3"="IT-HELP-WAC.ad.it-help.ninja"
"MRU4"="IT-HELP-GW.ad.it-help.ninja"

Med andre ord kan du stadig se rullelisten i offentlig tilstand, men mstsc opdaterer den ikke med nye servere, du har oprettet forbindelse til.

Brugernavnsforslag til servere

For at gøre logonprompten hurtigere husker mstsc det seneste brugernavn, der er brugt til en given server, og forvælger det for dig:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Oplysningen gemmes i registreringsdatabasen under HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\Server\UsernameHint, sådan her:

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\10.10.0.25]
"UsernameHint"="Administrator@ad.it-help.ninja"

Ud over at afsløre brugernavnet afslører denne registreringsnøgle også servere, du har oprettet forbindelse til. Igen forhindrer offentlig tilstand, at oplysningen bruges og gemmes.

Undtagelser for servercertifikater

Der findes ikke en eneste IT-administrator i universet, som ikke kender den gule certifikatadvarsel fra MSTSC. Ja, det er muligt at udrulle ordentlige certifikater til RDP, men lad os være ærlige: vi har alle brugt afkrydsningsfeltet „Spørg mig ikke igen om forbindelser til denne computer“ mindst én gang:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Som du sikkert har gættet, slår den offentlige tilstand i RDP undtagelser for servercertifikater fra, fordi de gemmes i registreringsdatabasen under HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\Server\CertHash, sådan her:

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\10.10.0.25]
"CertHash"=hex:13,fe,21,42,92,fc,6a,9d,ac,ea,a0,3d,b5,9b,59,c8,90,6f,37,b9,cc,\
  31,08,9d,63,f7,4b,e7,c4,3b,77,f2

Selve certifikathashen er ikke særlig nyttig, men fordi den gemmes efter servernavn, efterlader den et spor af de servere, du har oprettet forbindelse til.

Undtagelser for servergodkendelse

Servergodkendelsesniveauet i RDP er lidt sværere at forstå: serveren kan godkendes via sit certifikat, Kerberos eller begge dele. For at se, hvordan offentlig tilstand påvirker servergodkendelsen, skal du sørge for, at servergodkendelsen er sat til at advare dig, hvis servergodkendelsen mislykkes. Du kan også ændre din .RDP-fil med authentication level:i:2:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Når du opretter forbindelse til en server, der ikke er tillid til (når hverken certifikatvalidering eller Kerberos-validering kan bruges til at godkende serveren), bør du se denne sikkerhedsadvarsel:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Læg mærke til, at offentlig tilstand slår afkrydsningsfeltet „Spørg mig ikke igen om forbindelser til denne computer“ fra, men også slår brugen af gemte legitimationsoplysninger fra. Hvis du tilføjer en sikkerhedsundtagelse for en server, gemmes den under HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\LocalDevices, sådan her:

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\LocalDevices]
"10.10.0.25"=dword:0000004d

Navnet på destinationsserveren gemmes, så det igen kan bruges til at finde servere, du har oprettet forbindelse til. Den tilknyttede DWORD-værdi ændrer sig alt efter, hvilke lokale ressourcer eller enheder du har godkendt til forbindelsen (drev, udklipsholder, printer osv.).

Oprydning

Den offentlige tilstand i RDP er nyttig, men hvad hvis du ikke har brugt den tidligere og vil nulstille mstsc til en ren tilstand? Her er et PowerShell-kodestykke, der sletter alle de lokale spor, der er efterladt (gemte legitimationsoplysninger, vedvarende bitmap-cache og registreringsnøgler):

cmdkey /list | ? { $_ -Match "TERMSRV/" } | % { $_ -Replace ".*: " } | % { cmdkey /delete:$_ }
Remove-Item -Path "$Env:LocalAppData\Microsoft\Terminal Server Client\Cache" -Recurse -ErrorAction SilentlyContinue
Remove-Item -Path "$Env:LocalAppData\Microsoft\Terminal Server Client\Cache" -Recurse -ErrorAction SilentlyContinue
Remove-Item -Path "HKCU:\Software\Microsoft\Terminal Server Client\Default" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "HKCU:\Software\Microsoft\Terminal Server Client\Servers" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "HKCU:\Software\Microsoft\Terminal Server Client\LocalDevices" -Recurse -Force -ErrorAction SilentlyContinue

Offentlig tilstand i RDP kan være nyttig til at komme uden om mærkelige problemer, der ofte skyldes efterladte gemte legitimationsoplysninger og brugernavnsforslag. Det er sjældent, men en beskadiget vedvarende bitmap-cache kan give visuelle fejl i RDP. Jeg anbefaler, at du prøver offentlig tilstand, når du ikke aner, hvad problemet kan være, men det kan hænge sammen med en af de funktioner, der er nævnt ovenfor.