¿Qué es la caché de mapas de bits RDP?
Para no volver a descargar las mismas partes de la pantalla, el cliente de Escritorio remoto (mstsc.exe) mantiene una caché persistente de pequeños mapas de bits — normalmente mosaicos de 64×64 píxeles — enviados por el equipo remoto. Los archivos permanecen en el perfil del usuario que ejecutó el cliente.
Una vez recompuestos, los mosaicos muestran fragmentos de lo que ese usuario vio en la pantalla remota: consolas y los comandos que contienen, ventanas de carpetas, herramientas, documentos. Para un investigador es una evidencia visual poco común del movimiento lateral, recopilada en el equipo de origen.
Dónde se almacena
- C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\ en el equipo desde el que se realizó la conexión.
- Cache0000.bin, Cache0001.bin…: formato más reciente, un encabezado "RDP8bmp" seguido de mosaicos de 32 bits sin comprimir.
- bcache2.bmc, bcache22.bmc, bcache24.bmc: formato heredado, ranuras fijas de 64×64 a 8, 16 o 32 bits por píxel, con mosaicos a menudo comprimidos con el códec RLE entrelazado de RDP.
Por qué es importante en una investigación
- Muestra lo que un atacante o un administrador vio realmente en el host remoto — incluso cuando ese host fue borrado o nunca se adquirió su imagen.
- Los mosaicos de consola pueden revelar comandos, rutas y nombres de herramientas; los del Explorador revelan nombres de carpetas y archivos.
- Su sola presencia demuestra que la cuenta utilizó el cliente de Escritorio remoto en este equipo; correlaciónela con el registro de eventos del cliente y el registro de Windows para identificar el destino y fechar las sesiones.
- Las ranuras heredadas pueden conservar fragmentos de mosaicos anteriores (restos de ranura).
Limitaciones
- Los mosaicos no tienen marcas de tiempo ni posición en pantalla: el orden es el orden de caché, y los mosaicos idénticos se almacenan una sola vez.
- Solo se almacena en caché lo que el servidor envió como mapas de bits; algunas sesiones dejan pocos mosaicos útiles, y la caché tiene un tamaño limitado y se recicla.
- Los mosaicos heredados de 8 bits carecen de su paleta, por lo que los colores son aproximados. No hay OCR: una persona debe leer los mosaicos.
- Las indicaciones heurísticas (tipo consola, tipo texto) pueden pasar por alto mosaicos o marcar otros inofensivos.
Cómo obtener los archivos
- Recopile la carpeta Cache completa de cada perfil con KAPE (target RDPCache), Velociraptor (Windows.Triage.Targets, RDPCache) o a partir de una imagen de disco.
- Registre las marcas de tiempo de los archivos: son la principal pista sobre cuándo tuvieron lugar las sesiones.
- Conserve la estructura de carpetas Users\<name>\ para que cada caché se atribuya a su cuenta.
Preguntas frecuentes
¿Se suben mis archivos de caché a algún sitio?
No. El decodificador está escrito en Rust compilado a WebAssembly y se ejecuta en un Web Worker en su navegador. No hay ningún punto de subida; los mosaicos, collages y exportaciones se generan localmente.
¿En qué se diferencia de bmc-tools?
Tiene su propio decodificador, escrito de forma independiente a partir de las especificaciones de Microsoft y validado frente a bmc-tools, y añade lo que resulta difícil en la línea de comandos: una galería con búsqueda, ajustes de collage modificables al instante, un lienzo de reconstrucción con arrastrar y soltar, indicaciones de triaje y exportaciones (PNG, BMP con nombres de bmc-tools, CSV, JSON). bmc-tools sigue siendo la referencia para contrastar los hallazgos importantes.
¿Puede indicarme cuándo se mostró un mosaico?
No — la caché no almacena ninguna hora por mosaico, y esta herramienta no se la inventa. Feche las sesiones con las marcas de tiempo de los archivos de caché, el registro de eventos RDPClient/Operational (evento 1024) y las claves de registro de Terminal Server Client.
¿Qué equipo contiene la caché?
El cliente: el equipo donde se ejecutó Conexión a Escritorio remoto, en el perfil del usuario que la inició. Muestra la pantalla remota, por lo que el pivote de un atacante del host A al host B deja fragmentos de la pantalla de B en A.
¿Por qué no se alinean las filas de mi collage?
Los mosaicos se almacenan en el orden en que entraron en caché, los idénticos una sola vez, y los mosaicos de los bordes son más pequeños. Pruebe otros anchos y termine a mano en la vista Reconstruir.
Acerca del decodificador
El decodificador es una implementación independiente en Rust, escrita a partir de las especificaciones abiertas de Microsoft ([MS-RDPBCGR] para el RLE entrelazado, [MS-RDPEGDI] para el códec planar de RDP 6.0) y de trabajos públicos como el boletín CERT-FR CERTFR-2016-ACT-017. bmc-tools de la ANSSI (github.com/ANSSI-FR/bmc-tools), la herramienta de referencia para este artefacto, se usó para validar el resultado mosaico a mosaico; no se reutiliza nada de su código. Diferencias documentadas: los mosaicos de menos de 64 px de ancho conservan su ancho real, los mosaicos descomprimidos de 8 y 32 bpp conservan su profundidad de color real, los mosaicos planares de RDP 6.0 se decodifican y los archivos dañados se decodifican en la medida de lo posible. Contraste con bmc-tools en los casos importantes.