Jump Lists vs ShellBags vs Prefetch: qué artefacto responde a qué
El error es preguntar "qué contiene este artefacto" en lugar de "qué pregunta responde este artefacto". Los contenedores se solapan. Las preguntas no. Cuando un caso aterriza en tu mesa, llega como una pregunta, normalmente una de tres: ¿abrió este usuario este archivo, ejecutó este usuario este programa, fue este usuario a hurgar en estas carpetas. Artefactos distintos, y agarrar el equivocado cuesta horas.
Este es el mapa que guardo en la cabeza. Tiene una opinión firme sobre para qué sirve realmente cada fuente, no es una lista de características.
"¿Abrió el usuario este archivo?"
Empieza por las Jump Lists. Registran archivos abiertos a través de una aplicación participante, y de forma única entre los artefactos comunes llevan el nombre de host NetBIOS de la máquina que contenía el archivo en el momento del acceso, razón por la que se ganan su sitio en el trabajo de movimiento lateral. Los límites son reales, eso sí: una entrada DestList solo almacena el último acceso a ese objetivo, no todo el historial, y una Jump List solo existe para aplicaciones que dialogan con el mecanismo de elementos recientes de la shell. Mucho software abre archivos sin generar una nunca. La guía DFIR cubre el conjunto de campos en detalle.
La carpeta LNK Reciente (%AppData%\Microsoft\Windows\Recent) se solapa mucho: archivos de acceso directo individuales para los elementos tocados recientemente, parseables hasta la ruta objetivo incrustada y las marcas temporales de la cabecera LNK. Una cobertura de aplicaciones más amplia que las Jump Lists en algunos casos, pero sin agrupación por aplicación y sin contador de accesos.
Luego la corroboración. UserAssist en NTUSER.DAT (léelo con el parser de registro) confirma que ocurrió un lanzamiento GUI y registra el tiempo de foco. El diario USN es el registro propio del sistema de archivos de que el objetivo existió y fue creado, modificado o eliminado en un momento dado. Ninguna de estas fuentes por sí sola significa "el usuario abrió este archivo". Apiladas, son difíciles de rebatir.
"¿Ejecutó el usuario este programa?"
Esto es territorio del Prefetch, no de las Jump Lists. El Prefetch registra la ejecución: que un binario se ejecutó, el contador de ejecuciones, las primeras y últimas ocho horas de ejecución en Windows moderno, y los archivos y directorios que el proceso tocó al arrancar. Si la pregunta es la ejecución, Prefetch es la fuente principal y las Jump Lists son a lo sumo un corroborante débil.
La gente confunde las dos porque una Jump List implica que su aplicación propietaria se ejecutó. Cierto, pero indirectamente, y no obtienes de ella un contador de ejecuciones ni una línea de tiempo de ejecución limpia. Para la historia de la ejecución quieres Prefetch más UserAssist más AmCache y ShimCache, estos dos últimos demostrando que un binario estuvo presente y fue conocido por el sistema aunque nunca se ejecutara, lo que es un hecho distinto y a veces más importante.
Una arruga práctica: el Prefetch puede estar desactivado, y lo está con frecuencia en imágenes de la era SSD y en servidores. Cuando está apagado, la pregunta de la ejecución se apoya más en AmCache, la base de datos SRUM para el uso de recursos de las aplicaciones, y las pruebas de lanzamiento en las Jump Lists y UserAssist. Así que las Jump Lists suben en la lista de prioridades precisamente cuando falta el Prefetch.
"¿Navegó el usuario por estas carpetas?"
Las ShellBags, y nada más hace bien ese trabajo. Las ShellBags persisten el estado de vista por carpeta del Explorador, lo que significa que registran que se navegó a una carpeta en el Explorador, incluido su nombre y posición, y sobreviven a la eliminación de la carpeta o al desmontaje del volumen. Una entrada ShellBag para una carpeta que ya no existe es una de las pruebas más limpias de que algo estuvo allí y alguien lo miró. Viven en UsrClass.dat y NTUSER.DAT, así que el parser de registro es tu herramienta.
Lo que las ShellBags no dan es acceso a nivel de archivo. Tratan de carpetas y navegación, no de qué documento dentro de la carpeta se abrió. Ese es el relevo de vuelta a las Jump Lists y al LNK Reciente.
Dónde se solapan, y dónde te mienten
El solape es real y útil: una unidad extraíble conectada, archivos abiertos en ella y carpetas navegadas en ella dejarán rastros en las Jump Lists (ruta objetivo más etiqueta de volumen), las ShellBags (las carpetas) y el Prefetch (cualquier cosa ejecutada desde ella). Tres artefactos independientes convergiendo en el mismo GUID de volumen y la misma ventana de tiempo es una correlación fuerte, y la correlación entre fuentes independientes es todo el juego.
Los puntos ciegos son donde los casos se tuercen:
- Las Jump Lists solo guardan el último acceso por objetivo, así que "abierto una vez" es una limitación del artefacto, no un hecho sobre el usuario.
- Los contadores de Prefetch pueden reiniciarse y el artefacto desactivarse, así que la ausencia no prueba nada.
- Las ShellBags pueden crearse por acceso a carpetas automatizado o programático, no solo por un humano haciendo clic en el Explorador, así que "el usuario navegó aquí" a veces exagera.
- Todos son borrables por el usuario en distinto grado, y un artefacto borrado tiene su propia pista. Para las Jump Lists en concreto, mira el artículo sobre línea de tiempo y anti-forense.
La versión corta
Si la pregunta es sobre archivos, empieza por las Jump Lists y el LNK Reciente, corrobora con UserAssist y el diario USN. Si la pregunta es sobre ejecución, empieza por el Prefetch, corrobora con AmCache, ShimCache y SRUM. Si la pregunta es sobre navegación, las ShellBags, y acepta que no te dirán qué se abrió. La mayoría de los casos reales son las tres preguntas a la vez, razón por la que estos artefactos merecen conocerse como un conjunto y no de forma aislada.
Deja caer una Jump List en la página de inicio para parsearla del lado del cliente, y el resto de las herramientas de parsing forense cubre los demás artefactos de este artículo.