RDP-Bildschirme aus Cache-Kacheln rekonstruieren
Warum eine RDP-Cache-Collage stellenweise passt und stellenweise verrutscht, wie Sie die Breite wählen und einen Bildschirm Kachel für Kachel neu aufbauen.
Kurz gesagt. Kacheln aus dem RDP-Cache haben keine Bildschirmkoordinaten, und identische Teile werden nur einmal zwischengespeichert. Eine Collage mit der richtigen Anzahl Kacheln pro Zeile richtet die Teile eines Fensters aus, die zeilenweise zwischengespeichert wurden; jede deduplizierte Kachel verschiebt aber alles Folgende um eine Position, sodass die Ränder verrutschen. Nutzen Sie die Collage, um den Bereich zu finden, und bauen Sie den Bildschirm dann von Hand auf einem Raster auf: Kacheln an ihren Platz ziehen, eine einzelne Kachel dort mehrfach verwenden, wo sie sich wiederholt, und das Ergebnis als PNG mit einem Layout-JSON exportieren, das festhält, was Sie wohin gelegt haben. RDP Bitmap Cache Parser erledigt das im Tab Rekonstruieren; RdpCacheStitcher des BSI ist die Desktop-Alternative.
Dieser Artikel gehört zur Serie über Ermittlungen. Die zugrunde liegenden Formatdetails finden Sie unter das Dateiformat von bcache*.bmc und Cache*.bin.
Das Problem: Kacheln ohne Koordinaten
Jede Bitmap-Kachel im Cache wird mit einem Schlüssel, einer Breite, einer Höhe und Pixeln gespeichert. Nichts sagt, wo sie auf dem Bildschirm war. Was Sie haben:
- Cache-Reihenfolge. Kacheln werden in der Reihenfolge gespeichert, in der der Cache sie hält. Bei einem Bereich, den der Client in einem Zug empfangen hat, etwa einem gerade gezeichneten Fenster, kann diese Reihenfolge den Zeilen des Bereichs folgen.
- Kachelgrößen. Die meisten Kacheln sind 64×64 groß. Schmalere oder niedrigere Kacheln stammen oft vom rechten oder unteren Rand eines Bereichs.
- Inhalt. Text, der von einer Kachel zur nächsten weiterläuft, Fensterrahmen, Titelleisten und Bildlaufleisten sind die Teile des Puzzles.
Was die Reihenfolge stört:
- Deduplizierung. Ein Teil, der schon im Cache liegt, wird nicht erneut gespeichert. Ein einfarbiges Stück Titelleiste, ein leerer schwarzer Konsolenbereich oder ein flacher Desktophintergrund existiert einmal, egal wie oft er auf dem Bildschirm zu sehen war.
- Gemischte Sitzungen und Ansichten. Dieselbe Datei sammelt Kacheln aus verschiedenen Momenten, Fenstern und Sitzungen.
- Wiederverwendung von Slots in
.bmc-Dateien, die Slot-Reste älterer Inhalte hinterlassen kann.
Die Collage: schnell, nützlich und leicht daneben
Eine Collage legt alle Kacheln in einem Bild aus, N Kacheln pro Zeile, in Cache-Reihenfolge. bmc-tools erzeugt sie mit -b, die Anzahl der Kacheln pro Zeile legt -w fest (Standard 64). RDP Bitmap Cache Parser bietet dieselbe Ansicht im Tab Collage, mit einstellbaren Kacheln pro Zeile und zwei Anordnungen:
| Anordnung | Aufbau |
|---|---|
| Cache-Reihenfolge | Kachel 0 oben links, dann von links nach rechts, Zeile für Zeile |
| bmc-tools-Anordnung | Bildet die Anordnung von _collage.bmp aus bmc-tools nach, sodass Sie die Bilder direkt vergleichen können |
Die Breite wählen
Wurde ein Fenster zeilenweise zwischengespeichert und ist es W Kacheln breit, richtet eine Collage mit W Kacheln pro Zeile die Zeilen dieses Fensters senkrecht aus. So finden Sie W:
- Suchen Sie eine Kachel mit einem deutlichen senkrechten Merkmal (ein Fensterrahmen, eine Bildlaufleiste, eine Textspalte).
- Ändern Sie den Wert für Kacheln pro Zeile, bis dieses Merkmal über mehrere Zeilen eine gerade senkrechte Linie bildet.
- Bestätigen Sie mit Text: An einer Kachelkante abgeschnittene Wörter sollten auf der rechts folgenden Kachel weiterlaufen.
Der Standardwert von 64 Kacheln pro Zeile entspricht selten der Breite irgendeines Bildschirmelements. Er ist eine brauchbare Übersicht, keine Rekonstruktion.
Warum sie verrutscht: ein durchgerechnetes Beispiel
Das fiktive Beispiel, das mit dem Werkzeug ausgeliefert wird (ein synthetischer Fall, kein echter Vorfall), macht den Effekt sichtbar. Seine Cache0000.bin enthält 47 Kacheln:
- Kachel 0 ist der einfarbige Desktophintergrund, einmal gespeichert.
- Kacheln 1–25 sind ein Konsolenfenster in Zeilenreihenfolge, 7 Kacheln breit.
Eine Konsole, die 7 Kacheln breit und mehrere Zeilen hoch ist, bedeckt mehr als 25 Zellen. Die fehlenden Zellen sind Teile, die mit bereits zwischengespeicherten identisch sind: einfarbige Stücke der Titelleiste und leere schwarze Konsolenbereiche. Jedes Mal, wenn der Client ein wiederholtes Teil nicht gespeichert hat, ist jede spätere Kachel gegenüber ihrer echten Bildschirmposition um eine Zelle nach links gerückt.
Mit 7 Kacheln pro Zeile in Cache-Reihenfolge:
| Zeilen der Collage | Kacheln | Ergebnis |
|---|---|---|
| Mittlere Zeilen | 7–20 | Passen: Der Befehl rclone.exe copy C:\Users\Public\data E:\exfil und seine Übertragungszusammenfassung lassen sich durchgehend lesen |
| Erste und letzte Zeilen | Vor 7, nach 20 | Verrutschen: Titelleiste und unterer Teil der Konsole sind verschoben, weil deduplizierte Teile fehlen |
Die mittleren Zeilen passen, weil die Konsolenzeilen dort alle verschieden sind und darin nichts dedupliziert wurde. Die Ränder bestehen aus sich wiederholenden Teilen und fallen deshalb zusammen. Das ist normales Verhalten des Caches, kein Parserfehler, und keine einzelne Collagenbreite kann es beheben.
Den Bildschirm von Hand aufbauen
Manuelle Rekonstruktion heißt, jede Kachel in die Zelle zu legen, in die sie gehört, und eine Kachel für mehrere Zellen wiederzuverwenden, wenn sie dedupliziert wurde.
Mit RDP Bitmap Cache Parser
Der Tab Rekonstruieren ist eine Rasterfläche:
- Filtern Sie zuerst die Kacheln. Zuerst prüfen beschränkt die Liste auf konsolenartige und textartige Kacheln; Einfarbige Kacheln und Duplikate ausblenden räumt auf.
- Ziehen Sie eine Kachel auf eine Zelle, oder wählen Sie eine Kachel und klicken Sie dann auf eine Zelle. Eine Kachel kann in beliebig vielen Zellen liegen; so füllen Sie deduplizierte Titelleisten und leere Konsolenbereiche auf.
- Beginnen Sie beim Anker, den Sie in der Collage gefunden haben (im Beispiel die Zeilen mit der Befehlszeile), und arbeiten Sie sich nach außen vor: Die Zeile darüber muss Rahmen und Text der Zeile darunter fortsetzen.
- Lassen Sie Zellen leer, wenn Sie es nicht wissen. Eine ehrliche Lücke ist besser als eine geratene Kachel.
- Exportieren Sie ein PNG der Fläche für den Bericht und ein Layout-JSON, das festhält, welche Kachel Sie in welche Zelle gelegt haben. Das JSON macht die Rekonstruktion überprüfbar und wiederholbar.
Es gibt kein automatisches Zusammensetzen und keine Texterkennung: Sie lesen den Bildschirm, das Werkzeug hilft Ihnen nur, die Teile zu platzieren.
Mit RdpCacheStitcher
RdpCacheStitcher, veröffentlicht vom BSI, ist eine GUI, die hilft, exportierte Kacheln zu Bildschirmen zusammenzusetzen. Sie arbeitet mit den von bmc-tools exportierten Kacheln. Nutzt Ihr Team sie bereits: Der BMP-ZIP-Export von RDP Bitmap Cache Parser benennt Kacheln wie die Ausgabe von bmc-tools (<file>_<NNNN>.bmp), sodass Sie diesen Arbeitsablauf beibehalten können.
Das Rekonstruierte lesen
Ein rekonstruierter Bildschirm ist eine Interpretation. Dokumentieren Sie ihn auch so:
- Methode angeben: „Kacheln 7–20 aus
Cache0000.binpassen bei 7 Kacheln pro Zeile; Zeilen darüber und darunter wurden manuell platziert; siehe Layout-JSON“. - Beobachtetes von Platziertem trennen: Die Befehlszeile im Beispiel ist über benachbarte Kacheln in Cache-Reihenfolge sichtbar; die Titelleiste darüber hat der Analyst platziert.
- Keine Reihenfolge oder Zeit aus dem Bild ableiten. Eine Uhr auf einer rekonstruierten Taskleiste (im Beispiel 10:52) ist das, was der entfernte Bildschirm in diesem Moment anzeigte, in seiner eigenen Zeitzone. Verknüpfen Sie sie mit der Zeitachse über andere Artefakte, wie in RDP-Lateral-Movement: Artefakte auf dem Quellsystem beschrieben.
- Reste kennzeichnen: Ein Slot-Rest ist Teil einer älteren Kachel und kann zu einem anderen Moment gehören als die Kacheln um ihn herum.
Praktische Tipps
| Situation | Tipp |
|---|---|
| Tausende Kacheln | Einfarbige Kacheln und Duplikate ausblenden, dann Zuerst prüfen nutzen |
| Text über mehrere Kacheln verteilt | Kachelpaare in der Galerie lesen, bevor Sie die Fläche anfassen |
| Schmale Randkacheln | Sie schließen meist eine Zeile rechts oder unten ab |
| 8-Bit-Kacheln | Farben sind nur näherungsweise richtig; nach Formen und Text abgleichen |
| Mehrere Cache-Dateien | Pro Datei rekonstruieren; verschiedene Dateien können aus verschiedenen Sitzungen stammen |