RDP-Lateral-Movement: Artefakte auf dem Quellsystem
Welche Artefakte auf dem RDP-Quellsystem zeigen, wohin und wann sich ein Benutzer verbunden hat, und wie Sie damit den Inhalt des Bitmap-Caches einordnen.
Kurz gesagt. Bei RDP-Lateral-Movement bewahrt der Rechner, von dem aus sich der Angreifer verbunden hat, viel auf: den Bitmap-Cache (was der entfernte Bildschirm zeigte), das Protokoll Microsoft-Windows-TerminalServices-RDPClient/Operational (Ereignis 1024 mit dem Namen des Ziels), die Registry-Schlüssel unter Terminal Server Client (Ziele, UsernameHint, MRU-Liste), Default.rdp und Ausführungsspuren von mstsc.exe. Der Cache hat keine Zeitstempel; über diese Artefakte datieren Sie ihn und ordnen ihn einem Ziel zu. Auf dem Ziel bestätigen das Security-Protokoll (4624 mit Anmeldetyp 10, 4778/4779) und RemoteConnectionManager 1149 die Gegenseite.
Dieser Artikel ergänzt den Leitfaden zur RDP-Bitmap-Cache-Forensik. Er beschränkt sich bewusst auf wenige, gut bekannte Ereignis-IDs und Schlüssel.
Quelle und Ziel: wer was enthält
| Frage | Quellsystem (Client) | Zielhost (Server) |
|---|---|---|
| Was hat der Benutzer gesehen? | Bitmap-Cache | Nicht aufgezeichnet |
| Welches Ziel wurde kontaktiert? | Protokoll des RDP-Clients, Registry, Default.rdp | Sein eigener Name |
| Wann? | Protokollereignisse, NTFS-Zeitstempel, Ausführungsspuren | Security- und Terminal-Services-Protokolle |
| Mit welchem Konto? | UsernameHint in der Registry | Anmeldeereignisse |
| Wer hat den Client gestartet? | Das Profil, dem Dateien und Schlüssel gehören | Nicht aufgezeichnet |
Oft ist es die Quellseite, die erhalten bleibt. Ein Angreifer, der auf dem Ziel aufräumt, lässt die clientseitigen Artefakte auf dem Rechner zurück, von dem er kam, sofern er nicht auch dort aufräumt.
Artefakte auf dem Quellsystem
Der Bitmap-Cache
C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\, pro Konto. Er zeigt Bildschirminhalte der entfernten Seite: Konsolen, Ordnerfenster, Werkzeuge. Wann und wo, sagt er nicht. Die Sicherung behandelt Speicherort und Sicherung des RDP-Bitmap-Caches.
NTFS-Zeitstempel der Cache-Dateien
Die Cache-Dateien sind gewöhnliche Dateien, das Dateisystem datiert sie also:
- Zeitstempel aus
$STANDARD_INFORMATIONund$FILE_NAMEin der$MFT: Erstellung und letzter Schreibzugriff jederbcache*.bmcundCache*.bin. $UsnJrnl: Datensätze zu Erstellen, Schreiben und Schließen dieser Dateien, sofern das Journal den Zeitraum noch abdeckt.
Behandeln Sie diese Werte als Grenzen. Ein Zeitpunkt des letzten Schreibzugriffs besagt, dass der Client in diesem Moment in die Datei geschrieben hat; er sagt nicht, welche Kacheln damals geschrieben wurden, und eine über mehrere Sitzungen genutzte Datei behält nur ihre letzten Zeiten. Die Parser für MFT und USN-Journal lesen diese Daten.
Das Ereignisprotokoll des RDP-Clients
Das Protokoll RDPClient Operational, Microsoft-Windows-TerminalServices-RDPClient/Operational, liegt auf dem Quellsystem. Ereignis 1024 hält fest, dass der Client versucht, eine Verbindung zu einem Server herzustellen, und nennt den Namen des Ziels. Damit haben Sie eine Zeit und ein Ziel, die Sie neben den Cache stellen können.
Es dokumentiert einen Versuch, keine erfolgreiche Anmeldung. Kombinieren Sie es, wo möglich, mit den Protokollen des Ziels. Zum Auswerten von Ereignisprotokollen: EVTX-Parser.
Registry-Schlüssel von Terminal Server Client
In der NTUSER.DAT des Benutzers, unter Terminal Server Client:
| Schlüssel | Inhalt |
|---|---|
HKCU\Software\Microsoft\Terminal Server Client\Servers\<host> | Ein Unterschlüssel pro Ziel; UsernameHint enthält den verwendeten Benutzernamen |
HKCU\Software\Microsoft\Terminal Server Client\Default | MRU0 bis MRU9, die zuletzt verwendeten Ziele, die der Client anzeigt |
Sie liefern Ziele und Konten pro Benutzer. Die Zeitpunkte des letzten Schreibzugriffs auf Registry-Schlüssel können helfen, Ereignisse zu ordnen, spiegeln aber die letzte Änderung am Schlüssel wider, nicht jede einzelne Verbindung. Der Registry-Parser liest diese Hives.
Default.rdp
Default.rdp im Dokumente-Ordner des Benutzers enthält die Einstellungen der letzten Verbindung, die mit den Standardeinstellungen des Clients aufgebaut wurde. Unter anderem zeigt sie, ob die persistente Bitmap-Zwischenspeicherung aktiviert war (bitmapcachepersistenable:i:1), und damit, ob überhaupt ein Cache zu erwarten ist.
Ausführung von mstsc.exe
Ausführungsspuren von mstsc.exe bringen den Client auf die Zeitachse: die Prefetch-Datei für mstsc.exe (Prefetch-Parser) und die Jump List des Remotedesktop-Clients (Jump-List-Parser), die die letzten Ziele auflisten kann.
Artefakte auf dem Zielhost
Ist das Ziel verfügbar, bestätigen Sie die Gegenseite:
| Protokoll | Ereignis | Bedeutung |
|---|---|---|
| Security | 4624, Anmeldetyp 10 | Interaktive Remote-Anmeldung |
| Security | 4778 / 4779 | Sitzung wieder verbunden / getrennt |
Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational | 1149 | Netzwerkverbindung zum Remotedesktopdienst, mit dem Benutzer |
Microsoft-Windows-TerminalServices-LocalSessionManager/Operational | Sitzungsereignisse | Anmeldung, Abmeldung und erneute Verbindung einer Sitzung |
Diese Liste halten wir bewusst kurz. In RDP-Analysen tauchen viele weitere Ereignis-IDs auf; sie unterscheiden sich je nach Version und Konfiguration und werden zum Datieren eines Caches nicht gebraucht.
Alles zusammen: den Cache datieren
Eine praktikable Methode:
- Den Cache zuordnen. Notieren Sie das Konto aus dem Pfad (
Users\<name>\). Dieses Konto hat den Client gestartet. - Ziele für dieses Konto auflisten.
Servers-Unterschlüssel und MRU-Liste in der Registry,Default.rdp, Jump List. - Die Verbindungszeitachse aufbauen. Zeiten und Ziele aus Ereignis 1024 im Protokoll des RDP-Clients, Ausführungszeiten von
mstsc.exeaus Prefetch. - Den Cache eingrenzen. Erstellungs- und letzte Schreibzeit jeder Cache-Datei; USN-Datensätze, falls vorhanden.
- Die Kacheln lesen. Suchen Sie nach allem, was Inhalte mit einem Ziel oder einer Zeit verknüpft: Fenstertitel mit Hostnamen, eine Taskleistenuhr, Datumsangaben in Dateilisten, Übertragungsdauern.
- Auf dem Ziel gegenprüfen. 4624 Typ 10, 4778/4779, 1149 für dasselbe Konto und denselben Zeitraum.
Ein Beispiel mit den Beispieldaten
Das Werkzeug liefert einen synthetischen, fiktiven Fall (FIN-WKS-07, 2026-09-14) mit, der diesem Muster folgt. Der vom Quellsystem gesicherte Cache, Profil svc_backup, enthält:
- in
Cache0000.bineine Konsole mit dem TitelFIN-WKS-07 - console (svc_backup)und dem Befehlrclone.exe copy C:\Users\Public\data E:\exfil, ein Ordnerfenster aufE:\exfilund eine Taskleistenuhr mit 10:52; - in
bcache22.bmceine frühere Ansicht (etwa 10:14 laut Uhr) mittar -xf tools.zip -C C:\ProgramData\Intelund einem Slot-Rest der Titelleiste eines Editorfensters mitcreds.txt.
Der Fenstertitel nennt das Ziel; die Uhren liefern Zeiten des entfernten Bildschirms. In einem echten Fall würden Sie dann nach Einträgen zu Ereignis 1024 suchen, die diesen Host um diese Zeiten nennen, nach einem Schlüssel Servers\FIN-WKS-07 im Hive von svc_backup und nach Anmeldungen 4624 Typ 10 für das Konto auf dem Ziel. Berichten Sie die Uhrzeiten als das, was der Bildschirm anzeigte, und die Protokollzeiten als Zeitachse.
Was in den Bericht gehört
| Aussage | Gestützt durch |
|---|---|
| Konto X hat den RDP-Client auf Host A ausgeführt | Cache und Registry im Profil von X, Prefetch |
| X hat zum Zeitpunkt T eine Verbindung zu Host B versucht | Protokoll des RDP-Clients, Ereignis 1024 |
| Eine Sitzung auf B kam zustande | Protokolle des Ziels (4624 Typ 10, 1149) |
| Während einer Sitzung zeigte der Bildschirm von B Y | Cache-Kacheln, mit Rekonstruktionsmethode |
| Y geschah zum Zeitpunkt T | Nur wenn über Protokolle, Zeitstempel oder sichtbare Uhren verknüpft, und als solches benannt |
Halten Sie die Triage-Hinweise des Werkzeugs aus den Schlussfolgerungen heraus: „Konsolenartig“ ist ein Grund, eine Kachel zuerst zu lesen, kein Befund.
FAQ
Welcher Host enthält die Spuren einer ausgehenden RDP-Verbindung?
Das Quellsystem, also der Rechner, auf dem der Remotedesktop-Client lief. Dort liegen der Bitmap-Cache, das Ereignisprotokoll des RDP-Clients, die Registry-Schlüssel von Terminal Server Client und Ausführungsspuren von mstsc.exe. Der Zielhost enthält die Anmelde- und Sitzungsdatensätze.
Verrät mir der Bitmap-Cache, von welchem Server eine Kachel stammt?
Nein. Kacheln tragen weder Hostnamen noch Zeit. Ordnen Sie sie über das Protokoll des RDP-Clients, die Registry-Schlüssel von Terminal Server Client und die Protokolle des Zielhosts einem Ziel zu, außerdem über alles, was in den Kacheln selbst sichtbar ist, etwa einen Fenstertitel.
Beweist Ereignis 1024, dass eine Sitzung zustande kam?
Nein. Ereignis 1024 im Protokoll RDPClient Operational hält fest, dass der Client versucht hat, eine Verbindung zu einem Server herzustellen, mit dem Namen des Ziels. Bestätigen Sie die Anmeldung auf dem Ziel (Security 4624 mit Anmeldetyp 10 oder RemoteConnectionManager 1149), sofern diese Protokolle vorhanden sind.