Haben Sie sich jemals gefragt, was die Befehlszeilenoption „/public“ in MSTSC eigentlich bewirkt? Sie aktiviert den „öffentlichen Modus“ im RDP-Client, eine Funktion, die dem „Inkognito-Modus“ in Webbrowsern ähnelt. Diese Funktion ist für die Verwendung auf einem „öffentlichen“ oder „gemeinsam genutzten“ Computer gedacht, auf dem Nutzer möglicherweise verhindern möchten, dass Anmeldeinformationen, Sitzungsdetails und zwischengespeicherte Bilder lokal gespeichert werden.
Für forensische Analysten können die Spuren, die ein böswilliger Angreifer mit MSTSC auf einem kompromittierten System hinterlässt, eine wahre Fundgrube an Informationen sein. Im Folgenden finden Sie eine Liste aller Funktionen, die vom öffentlichen RDP-Modus betroffen sind:
Verbindungseinstellungen
Wussten Sie, dass mstsc die Verbindungseinstellungen in der versteckten Datei Default.rdp speichert? Wenn der öffentliche Modus aktiviert ist, lässt mstsc Sie keine Änderungen an den Verbindungseinstellungen in dieser Datei speichern:
Der einfachste Weg, ihn manuell zu bearbeiten, ist, Notepad von der Kommandozeile zu starten: notepad "~\Documents\Default.rdp"
.
Zwischenspeicherung von Anmeldeinformationen
Der Windows-Anmeldeinformationsmanager wird von mstsc verwendet, um Anmeldeinformationen lokal zu speichern, damit sie für neue Verbindungen zum selben Server wiederverwendet werden können. Im öffentlichen Modus wird die Verwendung von zwischengespeicherten Anmeldeinformationen deaktiviert, sodass Sie zur Eingabe von Anmeldeinformationen aufgefordert werden, auch wenn diese lokal verfügbar sind:
Gespeicherte Anmeldeinformationen verwenden das Präfix „TERMSRV/“ und können mit diesem Befehl aufgelistet werden:
cmdkey /list | ? { $_ -Match "TERMSRV/" } | % { $_ -Replace ".*: " }
Der öffentliche Modus verhindert auch, dass der Nutzer seine Anmeldeinformationen in der Anmeldeaufforderung speichert:
Persistente Bitmap-Zwischenspeicherung
Das auffälligste Artefakt, das mstsc hinterlässt, ist der persistente Bitmap-Cache. Bei RDP zerlegt der Server das Desktop-Bild in Bitmap-Fragmente und speichert diese auf dem Client zwischen. Wenn sich ein Fragment wiederholt, weist der Server den Client an, die zwischengespeicherte Version wieder zu verwenden, anstatt sie erneut zu senden. Die Zwischenspeicherung verbessert die Leistung jedoch nur, wenn der Client genügend Fragmente gespeichert hat. Um neue Verbindungen zu beschleunigen, ermöglicht der persistente Bitmap-Cache die Speicherung von Bitmaps über mehrere Sitzungen hinweg.
Während der öffentliche Modus diese Funktion deaktiviert, kann sie auch separat mit BitmapCachePersistEnable:i:0
in der .RDP-Datei deaktiviert werden. Der persistente Bitmap-Cache speichert Daten (bcache24.bmc, Cache0000.bin, Cache0001.bin usw.) unter %LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache
. Das Cache-Format ist zwar nicht dokumentiert, Sie können jedoch BMC-Tools verwenden, um den Bitmap-Inhalt zu extrahieren.
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 .
Dann können Sie Tausende von Bitmap-Fragmenten aus früheren Remote-Desktop-Sitzungen durchstöbern.
Bedenken Sie, dass der Bitmap-Cache keine zuverlässige Aufzeichnungsmethode ist - es ist, als würde man versuchen, geschredderte Dokumente zu rekonstruieren, indem man den Papierkorb durchwühlt. Dennoch kann er eine Fundgrube für Informationen sein.
Zuletzt verwendete Server
Der Microsoft RDP-Client merkt sich bis zu 10 zuletzt verwendete Server (MRU), sodass Sie einen Server aus der Dropdown-Liste auswählen können, ohne ihn erneut eingeben zu müssen:
Der öffentliche Modus deaktiviert die Aktualisierung der Serverliste, die in der Registry gespeichert ist:
[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"
Mit anderen Worten: Sie sehen mit dem öffentlichen Modus immer noch die Dropdown-Liste, aber mstsc wird sie nicht mit neuen Servern aktualisieren, mit denen Sie sich verbunden haben.
Hinweise zu Server-Nutzernamen
Um die Anmeldeaufforderung zu beschleunigen, merkt sich mstsc den letzten Nutzernamen, der für die Verbindung zu einem Server verwendet wurde, und wählt ihn für Sie aus:
Diese Informationen werden in der Registry unter HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\Server\UsernameHint gespeichert
, etwa so:
[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\10.10.0.25]
"UsernameHint"="Administrator@ad.it-help.ninja"
Dieser Registry-Schlüssel verrät nicht nur den Nutzernamen, sondern auch die Server, mit denen Sie sich verbunden haben. Auch hier verhindert der öffentliche Modus, dass diese Informationen verwendet und gespeichert werden.
Ausnahmen für Server-Zertifikate
Es gibt nicht einen einzigen IT-Administrator im Universum, der nicht mit dem gelben Warnhinweis von MSTSC bezüglich eines Zertifikats vertraut ist. Ja, es ist möglich, ordnungsgemäße Zertifikate für RDP bereitzustellen, aber seien wir ehrlich: Wir haben alle mindestens einmal das Kontrollkästchen „Bei Verbindungen zu diesem Computer nicht mehr nachfragen“ verwendet:
Wie Sie vielleicht schon vermutet haben, werden im öffentlichen Modus von RDP die Ausnahmen für Serverzertifikate deaktiviert, da diese in der Registry unter HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\Server\CertHash
gespeichert sind, und zwar so:
[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
Der Zertifikats-Hash selbst ist nicht sehr nützlich, aber da er nach Servernamen gespeichert ist, hinterlässt er eine Spur der Server, mit denen Sie sich verbunden haben.
Ausnahmen bei der Server-Authentifizierung
Die Server-Authentifizierungsebene in RDP ist etwas komplizierter zu verstehen: Der Server kann über sein Zertifikat, Kerberos oder beides authentifiziert werden. Um zu sehen, wie sich der Öffentliche Modus auf die Server-Authentifizierung auswirkt, stellen Sie sicher, dass die Server-Authentifizierung so eingestellt ist, dass Sie gewarnt werden, wenn die Server-Authentifizierung fehlschlägt. Alternativ können Sie Ihre RDP-Datei mit Authentifizierungsebene:i:2
ändern:
Wenn Sie eine Verbindung zu einem nicht vertrauenswürdigen Server herstellen (wenn weder die Validierung des Zertifikats noch die über Kerberos zur Authentifizierung des Servers verwendet werden kann), sollten Sie diesen Sicherheitsdialog sehen:
Beachten Sie bitte, dass der öffentliche Modus das Kontrollkästchen „Bei Verbindungen zu diesem Computer nicht mehr nachfragen“ deaktiviert, aber auch die Verwendung gespeicherter Anmeldeinformationen. Wenn Sie eine Sicherheitsausnahme für den Server hinzufügen, wird diese unter HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\LocalDevices
gespeichert, etwa so:
[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\LocalDevices]
"10.10.0.25"=dword:0000004d
Der Name des Zielservers wird gespeichert, sodass er wiederum verwendet werden kann, um Server zu finden, mit denen Sie eine Verbindung hergestellt haben. Der zugehörige DWORD-Wert ändert sich in der Abhängigkeit von den lokalen Ressourcen oder Geräten, die Sie für die Verbindung zugelassen haben (Laufwerke, Zwischenablage, Drucker usw.).
Aufräumen
Der öffentliche Modus von RDP ist großartig, aber was ist, wenn Sie ihn vorher nicht verwendet haben und mstsc in einen sauberen Zustand zurückversetzen möchten? Hier ist ein PowerShell-Codefragment zum Löschen aller lokalen Artefakte (gespeicherte Anmeldeinformationen, dauerhafter Bitmap-Cache und Registry-Schlüssel):
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
Die Verwendung des öffentlichen Modus von RDP kann nützlich sein, um seltsame Probleme zu umgehen, die oft durch übrig gebliebene gespeicherte Anmeldeinformationen und Hinweise auf den Nutzernamen verursacht werden. Obwohl selten, kann ein beschädigter Bitmap-Cache visuelle Störungen in RDP verursachen. Ich empfehle, den öffentlichen Modus auszuprobieren, wenn Sie keine Ahnung haben, was das Problem sein könnte, es aber möglicherweise mit einer der oben genannten Funktionen zusammenhängt.