Saltar al contenido

Líneas de tiempo forenses: reconstruir un incidente con plaso y super-timelines

    Líneas de tiempo forenses:

    reconstruir un incidente con plaso y super-timelines

    Blue Team y Forense Digital  |  unfantasmaenelsistema.com

    Cuando terminas de adquirir la evidencia de un incidente tienes decenas de fuentes sueltas: la tabla maestra de ficheros, el diario de cambios de NTFS, varias ramas del registro, los Prefetch, miles de eventos de Windows, el historial del navegador, las shellbags. Cada una cuenta un trozo de la historia en su propio formato y con su propio reloj. La pregunta del analista —¿qué pasó, en qué orden y a qué hora exacta?— no se responde mirando esas fuentes una a una, sino fusionándolas en un único eje temporal.

    Eso es una línea de tiempo forense. Este artículo explica qué es una timeline y una super-timeline, cómo se construye con plaso (`log2timeline` y `psort`), cómo se analiza en Timesketch, y por qué los timestamps son la parte más traicionera del proceso: zonas horarias, reglas de tiempo, relojes desviados y manipulación deliberada de fechas. Todo sobre evidencia propia o de laboratorio.

    Qué aprenderás en este artículo

    La diferencia entre una timeline de sistema de ficheros y una super-timeline · El flujo log2timeline -> psort -> Timesketch y qué hace cada pieza · Cómo interpretar los campos MACB y las time rules de plaso · Cómo se detecta el timestomping comparando $STANDARD_INFORMATION con $FILE_NAME · Cómo acotar la ventana del incidente, pivotar sobre ella y mantener la cadena de custodia

    1. Qué es una línea de tiempo forense

    Una timeline ordena en el tiempo los eventos que se pueden extraer de una fuente. La más clásica es la timeline del sistema de ficheros: para cada fichero de una imagen de disco, sus cuatro marcas temporales (creación, modificación, acceso y cambio de metadatos) puestas en una sola lista ordenada. Responde bien a «¿qué se tocó entre las 02:14 y las 02:20?» pero se queda corta: no sabe nada de eventos de Windows, del registro ni del navegador.

    Una super-timeline va más allá: recorre la imagen con decenas de analizadores (parsers), extrae eventos con fecha de todas las fuentes que reconoce y los funde en un único eje. En una super-timeline aparecen, mezclados y ordenados por hora, la creación de un fichero, un inicio de sesión (Event ID 4624), una entrada nueva en una clave `Run`, una ejecución registrada en Prefetch y una descarga del navegador. Esa vista unificada es lo que permite reconstruir la secuencia real de un ataque.

    1.1 Fuentes que alimentan una super-timeline en Windows

    • $MFT: marcas temporales de cada fichero, tanto de `$STANDARD_INFORMATION` como de `$FILE_NAME`
    • $UsnJrnl/$J (diario de cambios) y $LogFile: creación, renombrado y borrado de ficheros con gran resolución temporal
    • Registro: `NTUSER.DAT`, `SYSTEM`, `SOFTWARE`, `SAM` — claves de autoarranque, `UserAssist`, `ShimCache`, `AmCache`, MRUs
    • Prefetch (`C:\Windows\Prefetch\*.pf`): qué ejecutables corrieron y cuándo, las últimas 8 veces
    • Registros de eventos (`.evtx`): inicios de sesión, creación de procesos, servicios, PowerShell, RDP
    • Historial de navegadores, shellbags, LNK y Jump Lists, $Recycle.Bin, tareas programadas y hiberfil.sys

    2. plaso: log2timeline, psort y pinfo

    plaso (Plaso Langar Að Safna Öllu, «plaso quiere recogerlo todo» en islandés) es el motor libre de referencia para generar super-timelines. No es una herramienta sino tres, que se usan en cadena.

    HerramientaFunción
    log2timeline.pyRecorre la imagen o el dispositivo, ejecuta los parsers y guarda todos los eventos en un almacén .plaso
    pinfo.pyMuestra los metadatos del almacén: parsers usados, rango de fechas, número de eventos, advertencias
    psort.pyFiltra, ordena y exporta el almacén a un formato legible (CSV l2tcsv, JSON, salida para Timesketch…)
    psteal.pyAtajo que encadena log2timeline + psort en un solo comando cuando no necesitas afinar

    2.1 El flujo de trabajo

    El orden es siempre el mismo: verificar la evidencia, generar el almacén `.plaso`, revisarlo con `pinfo` y exportar con `psort` acotando por fechas para no ahogarte en millones de líneas. El almacén se genera una vez; luego se consulta y se re-exporta cuantas veces haga falta.

    # 1. Verificar la integridad de la evidencia ANTES de tocarla
    sha256sum caso001.E01
     
    # 2. Generar la super-timeline desde la imagen (a un almacen .plaso)
    log2timeline.py --storage-file caso001.plaso caso001.E01
     
    # 3. Revisar que se ha extraido: parsers, rango temporal, nº de eventos
    pinfo.py caso001.plaso
     
    # 4. Exportar a CSV acotando la ventana del incidente
    psort.py -o l2tcsv -w caso001-timeline.csv caso001.plaso \
      "date > '2026-02-10 00:00:00' AND date < '2026-02-14 23:59:59'"

    Para acelerar, `log2timeline.py` admite listas de parsers (`–parsers win7,webhist,registry`) o restringir el análisis a artefactos concretos. En una imagen grande, generar el almacén completo puede llevar horas; merece la pena lanzar primero un triaje con un conjunto reducido de parsers.

    3. El problema de los timestamps

    Un evento en una super-timeline no tiene «una fecha»: tiene una marca temporal que significa algo concreto según de dónde salga. Confundir el tipo de marca es la fuente número uno de conclusiones erróneas.

    3.1 MACB y time rules

    plaso etiqueta cada evento del sistema de ficheros con el modelo MACB, y en la salida l2tcsv lo resume en cuatro letras (por ejemplo `MACB`, `M…`, `..C.`):

    LetraSignificadoSe actualiza cuando…
    MModification — modificación del contenido del ficheroSe escribe en el fichero
    AAccess — último accesoSe lee el fichero (a menudo desactivado en Windows por rendimiento)
    CChange — cambio de la entrada MFT (metadatos)Cambian permisos, nombre, tamaño o los propios timestamps
    BBirth — creación del ficheroSe crea el fichero por primera vez

    Cada fichero NTFS tiene dos juegos de marcas MACB: las de `$STANDARD_INFORMATION` (`$SI`, las que ve el Explorador y las que un usuario puede modificar con APIs normales) y las de `$FILE_NAME` (`$FN`, actualizadas por el kernel al crear o mover el fichero y no modificables directamente desde espacio de usuario). plaso extrae ambas; en l2tcsv se distinguen por el campo de descripción.

    3.2 Timestomping y cómo se detecta

    El timestomping es la manipulación deliberada de las fechas de un fichero para camuflarlo entre ficheros legítimos antiguos. Como las herramientas de ataque suelen tocar solo `$SI`, la comparación con `$FN` lo delata:

    • `$SI` claramente anterior a `$FN`: un fichero no puede haberse modificado antes de que exista su entrada de nombre
    • Subsegundos de `$SI` a cero (`…000000`) mientras `$FN` tiene precisión completa: firma típica de una API que solo acepta granularidad de segundo
    • `$SI` fuera de la ventana del incidente pero `$FN`, el `$UsnJrnl` y el Prefetch dentro de ella
    • El diario `$UsnJrnl/$J` registra la creación real con su propia fecha, independiente de lo que diga `$SI`

    plaso incluye reglas de etiquetado (`tagging`) que marcan automáticamente estas discrepancias; en Timesketch se filtran luego con `tag:»timestomp»`. Aun así, la comparación manual `$SI` vs `$FN` sobre un fichero sospechoso sigue siendo el gesto que confirma el hallazgo.

    4. Zonas horarias y desfase de reloj

    Antes de sacar conclusiones sobre «a qué hora», hay que fijar dos cosas: en qué zona horaria interpretas los eventos y si el reloj del sistema era fiable.

    • Zona horaria: NTFS guarda los timestamps en UTC; FAT y muchos logs de aplicación los guardan en hora local. `log2timeline.py -z UTC` (o la zona real del equipo) fija cómo se normaliza todo. El estándar de facto es trabajar la timeline entera en UTC y convertir solo al presentar
    • Desfase del reloj: si la máquina tenía el reloj adelantado o atrasado, todos sus eventos internos arrastran ese error. Se estima comparando un evento de la máquina con la misma acción vista desde una fuente externa con hora fiable (un log de servidor, un correo, una cámara, registros del proveedor cloud) y se anota el delta para corregirlo en el análisis
    • Horario de verano: los cambios de hora estacionales introducen saltos y ambigüedades de una hora; documéntalos si la ventana del incidente los cruza

    5. Analizar la timeline: Timesketch

    Un CSV l2tcsv de varios millones de filas no se analiza en una hoja de cálculo. Timesketch es la herramienta libre para explorar timelines de plaso: carga el almacén, indexa los eventos y permite buscarlos, filtrarlos por rango, etiquetarlos, comentarlos y compartir el «sketch» con el resto del equipo. Varias timelines (varios equipos del mismo incidente) conviven en un mismo sketch sobre el eje común.

    Campo l2tcsvContenido
    date, time, timezoneFecha y hora del evento, en la zona configurada
    MACBTipo(s) de marca temporal que representa esta fila
    source, sourcetypeOrigen del evento: FILE, LOG, REG, WEBHIST, EVT, PE…
    typeDescripción de la marca: ‘mtime’, ‘crtime’, ‘Content Modification Time’…
    short, descDescripción corta y larga del evento (ruta, clave, mensaje del log)
    filename, inodeArtefacto de origen dentro de la imagen
    # Importar la timeline de plaso directamente en Timesketch
    timesketch_importer -u analista --sketch 1 --timeline "caso001" caso001.plaso
     
    # Ejemplos de consultas en la barra de busqueda de Timesketch
    message:*.exe AND timestamp_desc:"Creation Time"
    data_type:"windows:evtx:record" AND event_identifier:4624
    data_type:"windows:prefetch:execution"
    tag:"timestomp"

    6. Acotar la ventana del incidente y pivotar

    Una super-timeline completa es abrumadora por diseño. El método para no perderse es acotar y pivotar:

    • Punto de partida: un indicador conocido con fecha —una alerta del EDR, un correo de phishing, un fichero malicioso, un inicio de sesión sospechoso—. Esa hora es el ancla
    • Ventana amplia primero: filtra unas horas antes y después del ancla y lee esa franja entera, todas las fuentes mezcladas, para entender el contexto
    • Pivota sobre lo que encuentres: cada artefacto nuevo (un nombre de fichero, un proceso, una IP, un usuario, un host) es un término de búsqueda que abre otra franja en otro momento
    • Estrecha y ordena: cuando la secuencia esté clara, reduce la ventana a los minutos clave y construye el relato: acceso inicial -> ejecución -> persistencia -> movimiento lateral -> objetivo
    • Etiqueta y comenta en Timesketch cada evento relevante: el sketch final ES el informe de la cronología

    La timeline muestra correlación, no siempre causalidad

    Que dos eventos estén juntos en el tiempo no prueba que uno causara el otro · Un timestamp puede estar manipulado, un parser puede equivocarse de zona horaria, un reloj puede ir desviado — contrasta siempre cada hito con una segunda fuente antes de fijarlo en el informe

    7. Cadena de custodia y marco legal

    Una línea de tiempo solo tiene valor si la evidencia de la que sale es sólida y su tratamiento es trazable:

    • Calcula el hash SHA-256 de cada imagen nada más adquirirla y verifícalo antes y después de cada análisis
    • Trabaja siempre sobre copias montadas en solo lectura (o con bloqueador de escritura); nunca sobre el original
    • Documenta qué herramienta y versión generaron la timeline (`pinfo` guarda la versión de plaso y los parsers) para que el resultado sea reproducible
    • Guarda el almacén `.plaso` y los comandos exactos: otra persona debe poder regenerar tu timeline

    Marco legal: solo con autorización

    Adquirir y analizar el disco o la memoria de un sistema que no es tuyo, sin autorización escrita del titular, puede ser delito de descubrimiento y revelación de secretos y de daños informáticos · En España son de aplicación los artículos 197, 197 bis, 197 ter y 264 del Código Penal · El análisis debe ser proporcional y ceñirse al alcance del encargo formal de respuesta a incidentes o de la orden judicial que lo ampara · Los ejemplos de este artículo usan imágenes de retos forenses públicos y evidencia de laboratorio propio, creadas para practicar

    Referencias

    plaso.readthedocs.io — Documentación de log2timeline/plaso y lista de parsers · timesketch.org — Documentación e instalación de Timesketch · github.com/log2timeline/plaso — Código, releases y datos de ejemplo · SANS FOR508 / poster ‘Windows Forensic Analysis’ — Referencia de artefactos y sus timestamps · cyberdefenders.org y Magnet Weekly CTF — Retos con imágenes de disco y solución de timeline explicada

    Conclusión

    Una super-timeline convierte decenas de fuentes dispersas —MFT, $UsnJrnl, registro, Prefetch, eventos, navegador— en un único relato ordenado. plaso genera ese relato (`log2timeline` -> `pinfo` -> `psort`) y Timesketch lo hace explorable: acotas la ventana alrededor de un indicador conocido, pivotas sobre cada artefacto nuevo y reconstruyes la secuencia del incidente paso a paso.

    El punto delicado son siempre los timestamps: distingue `$SI` de `$FN` para cazar timestomping, fija la zona horaria en UTC, estima el desfase del reloj contra una fuente externa y contrasta cada hito con una segunda evidencia. Y haz todo esto únicamente sobre sistemas propios, de laboratorio o dentro de un encargo con alcance por escrito — la evidencia de un equipo ajeno está tan protegida por la ley como cualquier otro secreto.

    unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

    Resumen de privacidad

    Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.