Skip to main content

En este artículo, me gustaría repasar algunos artefactos forenses digitales que pueden ser útiles para encontrar respuestas a preguntas de investigación. Especialmente al realizar análisis forenses digitales y respuesta a incidentes de seguridad cuando se sabe que el atacante realizó sus acciones mientras estaba conectado de forma interactiva a un sistema Microsoft Windows. Normalmente, una de las primeras cosas que se revisan son los registros de eventos de Windows. Cuando están bien configurados, son una excelente fuente de información.

Pero, ¿qué pasa cuando un ciberdelincuente intenta borrar sus huellas eliminando esos registros? Imaginemos el siguiente escenario: un atacante ejecutó herramientas, scripts y comandos en un sistema comprometido, los registros de eventos fueron borrados, no hay auditoría de línea de comandos y tampoco contamos con telemetría EDR. Para ello, pensando out-of-the-box y buscando otras huellas digitales, es exactamente donde este artículo quiere poner el foco: en artefactos que van más allá de lo evidente, desde ShellBags y JumpLists hasta algo que quizás no estés recopilando ni analizando habitualmente: RDP Bitmap Cache.

A continuación se describen distintos tipos de artefactos (la parte más interesante es a partir del Headline RDP Bitmap Cache).

¿Qué es un Shellbag?

Para mejorar la experiencia del usuario, los sistemas operativos de Microsoft almacenan la configuración de las carpetas en el registro. Si se abre una carpeta, se cambia su tamaño, se cierra y se vuelve a abrir, Windows restaura la vista que se tenía de la misma. 

Esta información se almacena en el archivo de perfil de usuario “NTUSER.dat” dentro del directorio “C:\Users\%Username%\” y en el archivo “UsrClass.dat”, que se encuentra en “%LocalAppData%\Microsoft\Windows”. Cuando se carga un perfil en el registro, ambos archivos se montan en HKEY_USERS y luego se vinculan a las root keys HKEY_CURRENT_USER y HKEY_CURRENT_USER\Software\Classes respectivamente. En Windows 7 y versiones posteriores, las register keys de ShellBags se almacenan en “HKEY_USERS\{SID}_Classes\Local Settings\Software\Microsoft\Windows\Shell\”.

¿Por qué son relevantes los ShellBags?

Nos permite obtener información sobre la intención o el conocimiento que un usuario o un atacante tenía al acceder o explorar directorios, y cuándo lo hizo, incluso si el directorio ya no existe. Por ejemplo, un atacante que se conecta a un sistema mediante Escritorio remoto y accede a un directorio donde almacena sus herramientas. O un empleado descontento que accede a un recurso compartido de red con datos empresariales o propiedad intelectual semanas antes de su último día de trabajo y guarda esta información en una unidad USB. Los artefactos de ShellBags nos ayudan a comprender si se realizaron tales acciones. Así, al obtener los archivos NTUSER.dat y UsrClass.dat, se pueden analizar y organizar los eventos en una línea de tiempo. Al corroborar esta información con otros artefactos, el equipo de IR (incidense response) puede reconstruir las actividades interactivas del usuario y comprender qué sucedió y cuándo.

¿Qué son las JumpList?

Para mejorar la experiencia del usuario y agilizar el flujo de trabajo, Microsoft introdujo en Windows 7 la posibilidad de acceder a una lista de aplicaciones y archivos usados ​​recientemente. Esto se logra habilitando la función para almacenar y mostrar los programas y elementos abiertos recientemente en el menú Inicio y la barra de tareas. 

Existen dos archivos que almacenan la información de las JumpList: {AppId}.automaticDestination-ms y {AppId}.customDestination-ms, donde {AppId} corresponde a una cadena hexadecimal de 16 caracteres que identifica de forma única la aplicación y se calcula en función del CRC64 de la ruta de la aplicación, con algunas particularidades. Estos archivos se almacenan en las carpetas “C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations” y “C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations”. La carpeta AutomaticDestinations contiene archivos {16hexchars}.automaticDestination-ms. Estos archivos son generados por aplicaciones comunes del sistema operativo y almacenados en formato binario de enlace de shell (MS-SHLLINK), encapsulados dentro de un formato binario de archivo compuesto (MS-CFB u OLE). La carpeta CustomDestinations contiene archivos {16hexchars}.customDestination-ms. Estos archivos son generados por aplicaciones instaladas por el usuario o scripts ejecutados y almacenados en formato binario de enlace de shell (MS-SHLLINK).

¿Por qué son relevantes las JumpLists?

Este artefacto nos permite obtener información sobre la intención o el conocimiento que tenía un atacante al abrir un archivo, ejecutar una aplicación o navegar por un directorio específico durante una sesión interactiva. Por ejemplo, si un atacante opera en un sistema comprometido mediante Escritorio remoto y abre un navegador, la JumpList asociada contendrá los sitios web más visitados o los que se cerraron recientemente. Si el atacante realiza un intercambio entre sistemas mediante el cliente de Servicios de Terminal Server, la JumpList muestra el sistema especificado como argumento. Si el atacante extrajo credenciales de la memoria, las guardó en un archivo de texto y lo abrió con el Bloc de notas, la JumpList mostrará evidencia al respecto. Básicamente, los metadatos almacenados en estos archivos de la Lista de Acceso se pueden analizar y muestran una lista cronológica de los archivos usados ​​más recientemente (MRU) o más frecuentemente (MFU) abiertos por el usuario o la aplicación. Entre otros datos, la información incluye timestamp de información estándar de la entrada de la lista y las marcas de tiempo del archivo al momento de abrirlo. Además, muestra la ruta y el tamaño originales del archivo. Esta información, al ser representada en una línea de tiempo y corroborada con otro artefacto, permite obtener una imagen clara de las acciones realizadas.

Siguiente artefacto: LNK Files

Imaginemos a un atacante que opera en un sistema comprometido mediante una sesión de Escritorio remoto, donde copia las credenciales a un archivo de texto y luego hace doble clic en mismo. Esta acción crea el archivo de acceso directo de Windows correspondiente (archivo LNK). El sistema operativo también realiza un seguimiento de los archivos abiertos recientemente creando archivos LNK en el directorio “C:\Documents and Settings\%USERNAME%\Recent\”. Los archivos LNK, al igual que las Jump Lists, se almacenan en formato binario de enlace de shell (MS-SHLLINK). Al analizarse, el archivo LNK contiene metadatos que muestran el timestamp del archivo de destino, la ruta, el tamaño y el número de entrada de la MFT. Esta información se conserva incluso si el archivo de destino ya no existe en el sistema de archivos. El número de entrada de la MFT puede resultar útil en caso de que el archivo se haya eliminado recientemente y se desee intentar recuperarlo extrayéndolo del sistema de archivos.

UserAssist, el que sigue

UserAssist registra las aplicaciones ejecutadas por un usuario específico. Los datos se codifican mediante el ROT-13 sustitution cipher y se almacenan en la registry key HKEY_USERS\{SID}\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist.

RDP Bitmap Cache

En la versión de RDP 5.0,  Microsoft introdujo un mecanismo de almacenamiento en caché persistente de mapas de bits que complementaba la caché de RAM de mapas de bits. Al establecer una conexión de Escritorio remoto, los bitmap almacenan en el disco y están disponibles para el cliente RDP, lo que le permite cargarlos desde el disco en lugar de esperar la latencia de la conexión de red. Por supuesto, esto se desarrolló teniendo en cuenta las conexiones de red de bajo ancho de banda. En Windows 7 y versiones posteriores, la carpeta de caché se encuentra en “%USERPROFILE%\AppData\Local\Microsoft\Terminal Server Client\Cache\” y contiene dos tipos de archivos de caché. Un archivo contiene la extensión .bmc y otro formato más reciente, introducido en Windows 7, que sigue la convención de nomenclatura “cache{4 dígitos}.bin”. Ambos archivos tienen miniaturas de 64 × 64 píxeles. Los archivos .bmc admiten diferentes bits por píxel, desde 8 hasta 32 bits. Los archivos .bin siempre son de 32 bits y tienen mayor capacidad, pudiendo almacenar hasta 100 MB de datos.

¿Por qué son relevantes los archivos RDP Bitmap Cache?

Si un atacante se desplaza entre sistemas en un entorno determinado y utiliza Escritorio remoto, en el sistema donde se inicia la conexión se puede encontrar estos archivos almacenados durante la sesión de Escritorio remoto del atacante. Tras reconstruir los mapas de bits, que traducen lo que visualizaba el atacante, podría ser posible reconstruir el rompecabezas de mapas de bits y observar lo que veía al establecer conexiones de Escritorio remoto con los sistemas comprometidos.

¿Cuáles son los pasos a seguir?

Básicamente, las imágenes se almacenan en esta caché de mapas de bits con un tamaño específico en píxeles. Si la imagen excede el tamaño máximo de archivo permitido en la caché, se utiliza un algoritmo específico, denominado por Microsoft como “tiling algorithm” (algoritmo de mosaico), para dividir las imágenes de mapas de bits en mosaicos (tiles). El objetivo principal es optimizar la conexión para lograr mayor fiabilidad y velocidad.

Existen excelentes herramientas de código abierto que les serán de gran ayuda. Algunas de las más comunes son:

BMC-Tools

Se utiliza BMC para extraer los tiles guardados por la caché de RDP.

┌──(root㉿kali)-[~/Tools/DFIR/RDP-Tools/bmc-tools]
└─# python bmc-tools.py -s /shared/rdp_bmc_files/Microsoft\\Terminal\ Server\ Client\\Cache\\bcache24.bmc -d /root/
[+++] Processing a single file: '/shared/rdp_bmc_files/Microsoft\Terminal Server Client\Cache\bcache24.bmc'.
[+++] Processing a file: '/shared/rdp_bmc_files/Microsoft\Terminal Server Client\Cache\bcache24.bmc'.
[===] 150 tiles successfully extracted in the end.
[===] Successfully exported 150 files.

Luego, se convierten las imágenes .bmp a .png con imagemagic.

user@host tiles % mogrify -format png *.bmp
user@host tiles % ls -lart | grep --color .png
-rw-r--r-- 1 user staff 342 jun. 27 11:21 Microsoft\Terminal Server Client\Cache\bcache24.bmc_0000.png
-rw-r--r-- 1 user staff 730 jun. 27 11:21 Microsoft\Terminal Server Client\Cache\bcache24.bmc_0001.png
-rw-r--r-- 1 user staff 515 jun. 27 11:21 Microsoft\Terminal Server Client\Cache\bcache24.bmc_0002.png
-rw-r--r-- 1 user staff 2298 jun. 27 11:21 Microsoft\Terminal Server Client\Cache\bcache24.bmc_0003.png
-rw-r--r-- 1 user staff 705 jun. 27 11:21 Microsoft\Terminal Server Client\Cache\bcache24.bmc_0004.png
-rw-r--r-- 1 user staff 363 jun. 27 11:21 Microsoft\Terminal Server Client\Cache\bcache24.bmc_0005.png

¿Qué simulan los tiles?

Fragmentos de escritorio Windows: barra de tareas, ventana con barra azul de título, carpetas, cuadros de diálogo, grillas de datos, barra de dirección de browser, área de notificaciones con reloj, etc.

Algunos ejemplos de tiles:

RDP Cache Stitcher

Toma los tiles BMP que ya extrajo BMC-Tools y los reensambla visualmente para reconstruir la pantalla. A diferencia de BMC-Tools, que opera por línea de comandos, RDP Cache Stitcher cuenta con interfaz gráfica, lo que facilita el trabajo de reconstrucción visual.

El flujo de trabajo es el siguiente: una vez importados los tiles, la herramienta los presenta en un panel lateral y permite arrastrarlos para ir componiendo la pantalla original. Se puede acomodar manualmente cada pieza del rompecabezas o apoyarse en las funciones que ofrece la herramienta para identificar tiles relacionados visualmente.

Es importante tener en cuenta que el algoritmo de tiling de RDP no garantiza que todos los fragmentos de una misma pantalla sean almacenados en caché, por lo que el resultado final puede contener huecos. Aun así, incluso una reconstrucción parcial puede revelar información relevante: nombres de usuario, direcciones IP, rutas de archivos, comandos ejecutados en una terminal, o el contenido de documentos abiertos durante la sesión.

Conclusión

El RDP Bitmap Cache es un artefacto que, si bien no fue diseñado con fines forenses, puede convertirse en una fuente de evidencia visual valiosa cuando otros artefactos han sido eliminados o no están disponibles. La combinación de herramientas como BMC-Tools, RDP Cache Stitcher y RDPieces permite extraer y reconstruir los tiles almacenados durante una sesión de Escritorio remoto, ofreciendo una ventana literal hacia lo que el atacante visualizaba en pantalla.

Como ocurre con la mayoría de los artefactos, su valor real emerge cuando se analiza en conjunto con otros indicadores: ShellBags, JumpLists, archivos LNK y UserAssist. Es la correlación entre ellos la que permite reconstruir una línea de tiempo coherente. En escenarios donde los registros fueron borrados y no se cuenta con telemetría EDR, pensar más allá de lo evidente puede marcar la diferencia entre una investigación sin respuestas y una con evidencia concreta.

El contenido de este artículo esta bajo licencia Creative Commons.