Sobre las líneas de tiempo: El límite, tu imaginación

Hola secuaces:

Hace tiempo que no me paso por aquí. Son varias las circunstancias que me han obligado a bajar mi ritmo de vida. En consecuencia, ya no podré mantener los tiempos de publicación que seguía antes. Al menos, temporalmente.

También, hace tiempo que quería escribir sobre lo que voy a mostrar hoy. Más aún desde que leí, en un libro enfocado a la Informática Forense, hace algún tiempo y de forma literal: «Líneas de tiempo y otras herramientas de análisis.» Como si el hecho de realizar una línea temporal sobre una evidencia fuera algo secundario, prescindible, irrelevante, sin importancia.

Por razones obvias no diré el título del libro, porque también tiene sus puntos fuertes. Pero sí diré que no le dedicó más de un párrafo a este tema.

Bajo mi humilde punto de vista, una línea temporal debe realizarse, sí o sí. Se realice sobre algún artefacto del Sistema, o sobre toda la imagen forense. Lo considero algo básico porque siempre me ayudará a entender qué ha pasado en un Sistema. Tanto si sé lo que busco, como si no. Y creo que siempre será una buena referencia para consultar.

Pero, ¿Qué es una línea temporal? Una línea de tiempo consiste en la realización de una lista de eventos estableciendo un orden cronológico. ¿Así de simple? Sí y no. Pero con esta definición me basta, de momento, para saber lo que quiero hacer: Ordenar cronológicamente toda actividad que ha sufrido un Sistema.

Las líneas de tiempo son muy útiles para obtener rápidamente una relación de toda la actividad de los ficheros. Puedo obtener pistas sobre qué tipo de actividad ha sufrido un Sistema. Al fin y al cabo, casi todo contiene marcas de tiempo, (Registros, Logs, Eventos, Sistema de ficheros, …).

Dicen que no hay demasiadas herramientas capaces de generar líneas temporales. Yo añadiría, ‘de reconocido prestigio‘, porque herramientas, hay unas cuantas. Por citar a algunas, fuera de las más comunes, mencionaré a RegTime, plugin incluido en RegRipper, EvtxParse con LogParser, CyberForensics TimeLab, Zeitline, Ex-tip, fte, … Existen multitud de herramientas y proyectos, algunos de ellos realmente interesantes.

Por otro lado… siempre que ‘cacharreo’ me hago la misma pregunta, ¿Sé ‘explotar’ el potencial de cada una de las herramientas que uso?¿Me preocupo por ‘curiosear‘ con ellas para descubrir sus límites?

En este caso voy a mostrar tres de ellas. Quizás, las tres que más importancia tienen para mí: The Sleuth KitPlaso y AnalyzeMFT.

Te puedo asegurar que, desde que leí esas líneas, mi afán por documentarme sobre las líneas de tiempo ha ido en aumento. Han sido muchas las lecturas que he realizado sobre este tema, muchas de ellas muy interesantes, y he de confesar que soy un poco ‘exquisito’ con lo que me gusta leer. Me gusta leer material que no sea puramente técnico pero que sea completo. De esa forma puedo ver por mí mismo esa parte técnica.

Por el camino me he cruzado con un par de lecturas que, desde ya, te recomiendo:

Una de ellas es «Mastering the Super Timeline With log2timeline»

La otra se trata de «Generating computer forensic supertimelines under Linux: A comprehensive guide for Windows-based disk images«. Este documento, además, incluye un bonito script para la generación de líneas de tiempo, que te invito a probar y que puedes descargar desde su sitio.

Introducción

Para la elaboración de este artículo he creado una imagen forense de un disco duro virtual, (.vmdk), de 20GB.

ls -s /home/marcos/Evidences/Windows10x64/

Compruebo el tipo de fichero que voy a tratar. Se aprecia que son iguales, tanto el disco duro virtual como la imagen forense.

file -s /home/marcos/Evidences/Windows10x64/*

No obstante, y como ‘el hábito hace al monje‘, calculo su firma hash en SHA1, dando idéntico resultado, lo que indica que la imagen forense no ha sido alterada con respecto al disco duro virtual.

sha1sum /home/marcos/Evidences/Windows10x64/*

Lo siguiente que hago es ver qué particiones tiene, así como su tipo, y dónde comienza cada una de ellas.

fdisk -l /home/marcos/Evidences/Windows10x64/*

Hasta aquí, estos pasos, considero que son imprescindibles que siempre se repitan. Creo que así debe comenzar todo análisis.

Antes de comenzar, te contaré que trabajo con una distribución Lubuntu, (me gusta por ser liviana), y que contiene, entre otras, a SIFT, (SANS Investigative Forensics Toolkit), y a REMnux, por lo que tengo instalado un buen repositorio de herramientas, entre las que se encuentran las tres de las que voy a hablar hoy. Comencemos con cada una de ellas.

The Sleuth Kit, (TSK)

‘The Sleuth Kit’ fue desarrollada y está mantenida por Brian Carrier, autor del libro «File System Forensic Analysis«, que escribió mientras desarrollaba esta suite. Es también el creador de ‘Cyber Triage’, una herramienta dedicada a la respuesta ante Incidentes de Seguridad y Vicepresidente de Basis Technology.

Según la define su propia Wiki, ‘The Sleuth Kit’ es un framework forense digital, de código abierto, que contiene una colección de herramientas de línea de comandos que permiten analizar imágenes de disco. Este framework tiene una interfaz de línea de comandos que utiliza diferentes módulos para analizar imágenes de disco.

Este framework puede trabajar tanto en Sistemas Linux, como en Sistemas Windows y Sistemas Mac OS, tanto en su modo CLI, como en su modo GUI, a través de Autopsy para Sistemas Linux o Autopsy para Sistemas Windows.

Las instrucciones para su instalación están disponibles en su sitio oficial de GitHub.

La primera de las herramientas de este Framework es ‘FLS‘, que lista los nombres de ficheros y directorios en un sistema de ficheros. Procesa el contenido de una imagen forense dada y muestra información sobre los ficheros eliminados.

Para variar, lo primero que hago es ver qué ayuda me puede ofrecer y saber cuáles son las instrucciones básicas para su funcionamiento.

fls

Le digo también que me muestre con qué formato de imágenes forenses puede trabajar.

fls -i list

Y también le indico que me diga qué tipo sistemas de ficheros soporta.

fls -f list

Como se ha podido ver, tiene unas opciones muy interesantes y soporta los tipos de formato de imágenes forenses más usados, así como la mayoría de los tipos de sistemas de ficheros.

Se puede usar sin modo recursivo, se le puede indicar que sólo procese ficheros eliminados, …

Y puedo trabajar directamente sobre la Imagen Forense, sin ficheros intermedios. Pero no es el mejor modo, dado que su procesamiento lleva un tiempo.

fls -o 1026048 -f ntfs -i raw -b 512 /home/marcos/Evidences/Windows10x64/ImagendiscoWindows10x64 | egrep "DT.png"

fls -r -o 1026048 -f ntfs -i raw -b 512 /home/marcos/Evidences/Windows10x64/ImagendiscoWindows10x64 | egrep "DT.png"

fls -rp -o 1026048 -f ntfs -i raw -b 512 /home/marcos/Evidences/Windows10x64/ImagendiscoWindows10x64 | egrep "DT.png"

fls -rpl -o 1026048 -f ntfs -i raw -b 512 /home/marcos/Evidences/Windows10x64/ImagendiscoWindows10x64 | egrep "DT.png"

Para realizar una línea temporal completa de la imagen forense del Sistema me interesa usar unos argumentos en concreto.

fls -rpl -o 1026048 -m / /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64 >> /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Bodyfile.txt

¿Qué he hecho con esta línea?

fls – invoco a la herramienta

-r – le indico que trabaje en modo recursivo

-p – le indico que muestre la ruta completa de los ficheros

-l – le indico que me muestre la versión larga, donde me muestre más detalles

-o 1026048 – le indico el offset de inicio de la partición que quiero que procese, (que obtuve anteriormente con ‘fdisk -l)’.

-m / – le indico que me muestre la salida en un formato de entrada, (‘Bodyfile‘), para procesarlo después con ‘Mactime‘.

>> – le indico que en lugar de imprimir los resultados en la pantalla me los exporte a un fichero.

Me basta únicamente con indicarle el offset del inicio de la partición que deseo procesar, aunque podría ‘¿complicarme?‘ la vida indicándole el resto de los argumentos que afectan a la imagen forense,

fls -rpl -o 1026048 -f ntfs -i raw -b 512 -m / /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64 >> /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Bodyfile.txt

Que el resultado será exactamente el mismo. Un fichero de texto, con los datos de la imagen forense procesada, denominado archivo ‘Body’.

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Bodyfile.txt | head -n 20

Se trata de un fichero intermedio usado para hacer fácilmente legible, (legible ya es), la línea temporal, delimitado por Pipeline (‘|’), que contiene una línea por cada fichero procesado y presenta el siguiente formato

MD5|name|inode|mode_as_string|UID|GID|size|atime|mtime|ctime|crtime

Para hacerlo fácilmente legible voy a usar ‘Mactime‘, otra de las herramientas de este framework, que va a crear una línea temporal ASCII, que clasifica los datos basándose en sus datos temporales e imprime el resultado, usando para ello el fichero ‘Body’ que he generado anteriormente con ‘FLS’.

Para ello me basta con indicarle el argumento ‘-b’, seguido de ese fichero ‘Body’, e indicarle que me dé la salida a otro fichero ‘.csv’

mactime -b /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Bodyfile.txt >> /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Timeline.csv

Y, ¿Cuál sería el resultado de ese nuevo fichero ‘.csv’? El contenido de este fichero será presentado en ocho columnas tabuladas

Date/Time Size Activity Unix User Group inode File Name

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Timeline.csv | head -n 20

Con esto ya tengo creada una linea temporal completa del Sistema. Es fácil, ¿verdad?

De hecho, esta es la forma común de usar esta suite. De hecho, es la que he estado viendo en la mayor parte de las lecturas que he llevado a cabo.

Pero… siempre hay algún pero.

Tengo un bonito fichero ‘.csv’ que contiene una linea temporal con la actividad del Sistema. Pero este fichero en concreto, (sobre una Imagen Forense de 20 GB), tiene un tamaño de más de 80 MB, con cerca de 500.000 líneas, una línea por cada fichero procesado.

¿Qué contendría una línea temporal de un disco duro moderno, de 500 GB o de 1 TB, y que, además, haya tenido actividad durante un largo periodo de tiempo?

¿Quién es el valiente que se enfrenta a eso? Podría intentar abrirlo con alguna aplicación ofimática, pero es posible que me arrojara algún error en el que me diga que el documento ‘excede el número de líneas que puede soportar‘. Podría analizar esa línea temporal usando únicamente la CLI, pero no tengo una fecha por cada línea, por lo que tendría que aplicar parámetros del tipo ‘egrep -A -B

Para solucionar este problema de tener una fecha por línea, igual que tengo en el fichero ‘Body’, le indico, además del parámetro ‘-b’, el parámetro ‘-d’, para decirle que la línea temporal me la delimite por comas.

mactime -d -b /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Bodyfile.txt >> /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Delimited_Timeline.csv

Y el resultado sería bien distinto al anterior.

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Delimited_Timeline.csv | head -n 20

Ahora sí. Ya tengo una linea temporal creada, bien legible, con una línea por cada fichero, con su correspondiente fecha. Ahora podría empezar a trabajar con esa línea temporal en modo CLI.

Pero sigo teniendo el mismo problema de tamaño del fichero y del número de líneas.

Para solucionar este inconveniente, esta herramienta también permite realizar filtrados por fechas, con dos interesantes opciones. Me permite indicarle que procese datos desde una fecha en particular

mactime -d -b /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Bodyfile.txt 2017-10-20 >> /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020_Timeline.csv

Por lo que comenzará la línea temporal a partir de esa fecha

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020_Timeline.csv | head -n 20

Y me permite indicarle que trabaje sobre un rango de fechas

mactime -d -b /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Bodyfile.txt 2017-10-19 2017-10-20 >> /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171019-20_Timeline.csv

Por lo que efectuará la línea temporal dentro de ese rango de fechas

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171019-20_Timeline.csv | head -n 20

A partir de aquí, el límite es mi imaginación. Siempre tendré algún dato que buscar, alguna fecha, algún nombre, algún tipo de actividad, …

Plaso, (Plaso Langar Að Safna Öllu)

Se suele decir de ‘Plaso‘ que es una herramienta capaz de realizar una súper línea temporal de todas las cosas. Es un backend basado en Python, capaz de extraer las marcas de tiempo de varios tipos de archivos, de varios artefactos. Su objetivo inicial es el de recopilar todos los eventos de interés, analizar varios archivos de registro y artefactos forenses, y agregarlos a una súper línea temporal, pero también admite la creación de líneas de tiempo específicas.

Puede trabajar bajo Sistemas Windows, bajo Sistemas Linux y bajo Sistemas Mac OS.

‘Plaso’ está actualmente mantenido por Joachim Metz. Se compone de varias herramientas de línea de comandos.

La principal herramienta sobre la que trabaja ‘Plaso‘ es ‘Log2timeline, que se define como un framework para la creación y análisis de líneas de tiempo, a través de un fichero intermedio, que se puede usar con otras herramientas, como ‘The Sleuth Kit’. ‘Log2timeline’ fue desarrollado por Kristinn Gudjonsson, autor del Blog http://blog.kiddaland.net/.

Las instrucciones para su instalación están disponibles en su sitio oficial de GitHub.

Comenzaré por esa principal herramienta, ‘Log2timeline‘, como siempre, viendo qué opciones puede ofrecer.

log2timeline.py -h

Tiene disponible una ayuda muy, muy amplia, que puedo ver de forma general, mediante

log2timeline.py --info

O ver sus opciones de forma más específica, comenzando por sus parsers y plugins

log2timeline.py --parsers list

Continuando con su lista de hashes soportados

log2timeline.py --hashers list

Siguiendo por sus formatos de salida

log2timeline.py --output list

Y terminando por su lista de husos horarios

log2timeline.py -z list

Vista toda la ayuda que me ofrece esta herramienta, que no es poca, y que me servirá para otras herramientas de este conjunto, ¿Cuál es su funcionamiento básico?

log2timeline.py /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64.plaso /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64

Invoco a ‘Log2timeline’, le indico el fichero intermedio, (‘Bodyfile’), sobre el que trabajaré después y le indico el fichero de la imagen forense que quiero procesar. Me indicará el número de particiones disponibles y me preguntará por cuál es la que quiero procesar. La selecciono

Y comienza el tratamiento de la imagen forense, que puedo ver en pantalla, hasta su finalización.

Una vez que ha finalizado y se ha generado el fichero intermedio ‘.plaso’, y que no deja de ser un fichero comprimido, ¿Cómo sé lo que ha recopilado? Con la siguiente de las herramientas sobre las que trabaja ‘Plaso’.

Pinfo‘, que es una herramienta de línea de comandos que me proporciona información sobre el contenido de un archivo de almacenamiento plaso. Más exactamente, me dará información sobre:

Cuándo y cómo se ha ejecutado la herramienta; Información recogida durante la etapa de preprocesamiento; Metadatos sobre cada contenedor de almacenamiento o almacén; Qué analizadores se utilizaron durante la fase de extracción, parámetros utilizados; Cuántos eventos extraídos se encuentran en el archivo de almacenamiento y el número de cada analizador; Si hay eventos etiquetados, qué archivo de etiqueta se utilizó, qué etiquetas se han aplicado y contar para cada uno; Si se han ejecutado los plugins de análisis, una visión general de los que se han ejecutado y el contenido del informe.

Su uso es muy sencillo

pinfo.py -h

Puedo decirle que me dé la información de una manera simple

pinfo.py /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64.plaso

O indicarle que me la facilite de una forma detallada, que es la que realmente me interesa, por la información que me va a proporcionar

pinfo.py -v /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64.plaso

Y, ¿Qué información me interesa de este informe? Pues, por ejemplo, los parsers usados con el número de eventos registrados

O la información relativa al Sistema objeto del análisis

Vuelvo atrás. He usado ‘Log2timeline’ de una forma básica, pero ofrece un uso bastante más avanzado

log2timeline.py -o 1026048 --sector_size 512 --parsers win7_slow --status-view none --logfile /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64.log /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64

¿Qué he hecho con esta línea?

log2timeline.py – Invoco a la herramienta

-o 1026048 – Le indico el sector de inicio de la partición que deseo procesar

–sector_size 512 – Le indico el tamaño del sector

–parsers win7_slow – Le indico el parser, (o parsers), que deseo usar

–status-view none – Le indico que no me muestre la información que procesa en pantalla, (me resulta molesto)

–logfile – A cambio de no mostrar la información en pantalla, le indico que me genere un fichero ‘.log’ con esa información.

De esta forma, no tendré que estar pendiente de la pantalla, ni me preguntará por el número de particiones que deseo procesar, además de especificarle yo el parser que deseo usar. Una vez haya finalizado, me generará el fichero ‘.log’ indicado.

ls -s /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64.log
file /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64.log
wc /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64.log

Vuelvo a usar ‘Pinfo’ para ver qué información he obtenido, tanto en su forma simple.

pinfo.py /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso

Como en su forma detallada.

pinfo.py -v /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64.log

Y me va a resultar de mucho interés, recalco, fijarme en la información que contiene, relativa a los parsers usados y sus contadores

Así como en la información del Sistema que me pueda proporcionar.

¿Qué información me puede proporcionar la vista detallada de ‘Pinfo’? El Sistema Operativo, el nombre del equipo, la lista de usuarios, el huso horario del Sistema, …

Pero ahora quiero comparar qué diferencias existen entre la ejecución básica que hice al principio y la ‘avanzada’ que he realizado ahora. Lo puedo hacer muy fácilmente, usando el parámetro ‘–compare’, que me mostrará las diferencias entre uno y otro.

pinfo.py --compare /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64.plaso /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso

Muy bien. He creado ya el fichero intermedio ‘.plaso’. Pero ahora, ¿Cómo le doy forma?¿Cómo lo hago legible?

Para eso, uso la siguiente herramienta perteneciente a este framework, ‘Psort‘. ‘Psort’ es una herramienta de línea de comandos para postprocesar archivos de almacenamiento plaso. Permite filtrar, ordenar y ejecutar el análisis automático del contenido de los archivos de almacenamiento plaso.

Como toda las herramientas que maneja esta suite, tiene su propia ayuda que se debe consultar y que complementa a la ayuda de ‘Log2timeline’.

psort.py -h

Le puedo pedir ayuda sobre la lista de análisis sobre la que puede trabajar.

psort.py --analysis list

Le puedo pedir ayuda sobre la lista de los husos horarios, al igual que con ‘Log2timeline’.

psort.py -z list

Y le puedo pedir ayuda sobre los formatos de salida que puede procesar, al igual que con ‘Log2timeline’, también.

psort.py -o list

Bien. Ya he visto la ayuda que me puede ofrecer. ¿Por dónde empiezo? Por su uso básico

psort.py /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline.csv

Únicamente le tengo que indicar el fichero intermedio ‘.plaso’ y un fichero de salida, usando el parámetro ‘-w’.

Tras su procesamiento obtengo un resumen que me dice los eventos almacenados, los eventos incluidos y los eventos duplicados y que han sido eliminados.

¿Puedo indicarle que no me elimine ningún evento duplicado? Por supuesto que sí

psort.py -a /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_All.csv

Pero, como me daré cuenta más tarde, no es muy productivo por la cantidad de información que voy a tratar.

He usado ‘psort’ de una forma básica y sin indicarle qué tipo de formato de salida usar. ¿Cómo se presentará esa información?

cat -n /home/marcos/Evidences/Windows10x64/ImagenWindows10x64_slow_Timeline.csv | head -n 1

En su salida por defecto, se presenta en 10 columnas, delimitadas por comas, con la información que se indica en la cabecera de cada columna, y se visualiza así

cat -n /home/marcos/Evidences/Windows10x64/ImagenWindows10x64_slow_Timeline.csv | tail -n 1

Es evidente que contiene muchísima información que, dependiendo del caso que esté analizando, me resultará de más o de menos utilidad y que puede entrañar cierta dificultad para su interpretación.

Voy a probar algunos de los demás tipos de formato de salida que me ofrece esta herramienta.

Salida en formato l2tcsv

psort.py -o l2tcsv /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_L2tcsv_Timeline.csv

Voy a ver ahora cómo se presenta la información de esta forma.

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_L2tcsv_Timeline.csv | head -n 1

En su salida en formato l2tcsv, se presenta en 17 columnas, delimitadas por comas, con la información que se indica en la cabecera de cada columna, y se visualiza así

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_L2tcsv_Timeline.csv | tail -n 1

Salida en formato l2ttln

psort.py -o l2ttln /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_L2ttln_Timeline.csv

La información en este formato se presenta así

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_L2ttln_Timeline.csv | head -n 1

En su salida en formato l2ttln, se presenta en 7 columnas, delimitadas por pipeline, con la información que se indica en la cabecera de cada columna, y se visualiza así

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_L2ttln_Timeline.csv | tail -n 1

Salida en formato tln

psort.py -o tln /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Tln_Timeline.csv

Que se presenta así

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Tln_Timeline.csv | head -n 1

En su salida en formato tln, se presenta en 5 columnas, delimitadas por pipeline, con la información que se indica en la cabecera de cada columna, y se visualiza así

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindowsx64_Tln_Timeline.csv | tail -n 1

Como se puede apreciar, existen multitud de formatos de salida que se pueden amoldar a las necesidades y finalidades de cada análisis. Estos formatos son formatos preestablecidos, que contienen esas columnas, con esa información, sí o sí.

Por otro lado, me dará igual cuál usar, en el sentido de que con todos los formatos obtendré una línea por cada evento procesado, con un total de 618560 líneas, en este caso, (Te recuerdo que se trata de un disco duro virtual de 20 GB). ¿Qué ocurriría si se me presenta un disco duro de 500 GB o de 1 TB, que haya sufrido actividad durante un largo periodo de tiempo?

Llegado a este punto, debo decir que en la mayoría de las lecturas que llevado a cabo sobre ‘Plaso’, casi siempre se suele emplear para la generación de la línea de tiempo la herramienta ‘Psteal‘, que es capaz de generarla directamente, sin ningún fichero intermedio, y que tiene un uso muy sencillo, usándose

psteal.py --source Imagen.dd -o l2tcsv -w Timeline.csv

Pero me enfrentaría a todos los problemas mencionados anteriormente, relacionados con el número de líneas y el tamaño del fichero generado.

(«Un sudor frío me recorre la espalda»)

Sinceramente, me podría adaptar sin ningún inconveniente. Porque esta herramienta me permite realizar una salida dinámica, en donde soy yo el que selecciona las columnas que quiero que se me presenten. ¿Cómo funciona este modo?

psort.py -o dynamic /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso "select date,time,MACB,source,filename,inode" -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Dynamic_Timeline.csv

¿Cómo se me va a presentar esta información, en este formato de salida, en donde he seleccionado yo las columnas?

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Dynamic_Timeline.csv | head -n 1

En su salida en formato dinámico, se presenta en 6 columnas, (las que yo he querido seleccionar), delimitadas por comas, con la información que se indica en la cabecera de cada columna, y se visualiza así

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Dynamic_Timeline.csv | tail -n 1

Como se puede apreciar, esta herramienta me permite personalizar la salida de las líneas de tiempo, asignando un formato a mi medida. Pero sigo teniendo el mismo problema que tenía con ‘The Sleuth Kit’: El número de líneas.

Pero antes de seguir, voy a echar un vistazo a las primeras y a las últimas líneas de esta línea temporal generada.

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Dynamic_Timeline.csv | head -n 20

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_Dynamic_Timeline.csv | tail -n 20

El tamaño de la línea temporal generada puede llegar a ser un verdadero problema para la realización de su correspondiente análisis, además del de su número de líneas. Por ejemplo, en este caso, con este disco de 20 GB, el fichero creado ocupa más de 500 MB. ¿Qué ocupará algún disco actual, con una larga actividad en el Sistema?

Para solucionar este problema puedo, tranquilamente, dividir esa línea temporal en fichero más pequeños. Por ejemplo, lo divido en ficheros de 10 MB.

psort.py -o dynamic /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso | split -b 10m -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_split_

Y se generarán tantos ficheros como hagan falta.

ls -s /home/Evidences/Windows10x64/ImagenDiscoWindows10x64_Split_*

Por otro lado, esta suite ofrece una opción muy interesante, que es la de poder filtrar eventos.

Anteriormente he mencionado que es muy interesante echar un vistazo a la vista detallada del módulo ‘Pinfo’, y fijarse en los parsers/plugins que han sido usados con su número de contadores. La razón es porque puedo aplicar esos filtros, indicando, por ejemplo, que filtre todos los eventos que ha procesado cuyo recurso contenga ‘Winreg‘.

psort.py -o dynamic /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso "select date,time,MACB,source,filename,inode where parser contains 'winreg'" -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_Winreg.csv

Como se puede ver, obtengo resultados únicamente de elementos que cuyo recurso esa, únicamente, del Registro de Windows.

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_Winreg.csv | head -n 20

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_Winreg.csv | tail -n 20

Lo primero que se me ocurre es, por ejemplo, filtrar los eventos usando el parser de ‘Filestat’, que analiza los datos del sistema de archivos y devuelve información sobre los ficheros.

psort.py -o dynamic /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso "select date,time,MACB,source,filename,inode where parser is 'filestat'" -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_Filestat.csv

Únicamente con esto, el resultado, como se puede apreciar, varía, tanto en contenido como en extensión de lineas

cat -n /home/marcos/Evidencias/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_Filestat.csv | head -n 20

cat -n /home/marcos/Evidencias/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_Filestat.csv | tail -n 20

Otra opción que se me ocurre es combinar el filtrado de ‘Filestat’ con ‘PE‘, (Portable Executable), para que me analice y trabaje con archivos ejecutables portátiles

psort.py -o dynamic /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso "select date,time,MACB,source,filename,inode where parser is 'filestat' or parser is 'pe'" -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_Filestat-PE.csv

Y vuelvo a obtener unos resultados diferentes al anterior, donde se aplican los filtros indicados

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_Filestat-PE.csv | head -n 20

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_Filestat-PE.csv | tail -n 20

Me parece muy interesante el uso de filtros con ‘Plaso’. De hecho, me apetece ser aún más específico. Al fin y al cabo, sé lo que estoy buscando. Me apetece indicarle que procese únicamente los parsers de ‘Filestat’ y ‘PE’ y, además, indicarle el contenido del nombre del fichero que quiero que me muestre.

psort.py -o dynamic /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso "select date,time,MACB,source,filename,inode where parser is 'filestat' or parser is 'pe' where filename contains 'USBOblivion' or filename contains 'CCleaner' or filename contains 'WannaCry'" -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_FileContains.csv

La cosa cambia y me estoy empezando a venir arriba

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_FileContains.csv | head -n 20

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow_Timeline_FileContains.csv | tail -n 20

Me estoy fijando en que cada vez que proceso algo con Psort, aparece un campo llamado ‘Filter By Date’. ¿Será que también me permite el filtrado por fechas? Por supuesto que sí.

Puedo indicarle, por ejemplo, que procese la línea de tiempo igual o superior a una fecha asignada

psort.py -o dynamic /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso "select date,time,MACB,source,filename,inode where date >= '2017-10-20 00:00:00'" -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020.csv

Y sólo me procesará eventos ocurridos a partir de la fecha indicada

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020.csv | head -n 20

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020.csv | tail -n 20

O indicarle un rango de fechas, al igual que hice con ‘The Sleuth Kit’.

psort.py -o dynamic /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso "select date,time,MACB,source,filename,inode where date >= '2017-10-19 00:00:00' AND date << '20171020 23:59:59'" -w /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171019-20.csv

Para que procese, desde y hasta, las fechas que yo le indique

cat -n /home/marcos/Evidences/Windows10x64/ImagendiscoWindows10x64_20171019-20.csv | head -n 20

cat -n /home/marcos/Evidences/Windows10x64/ImagendiscoWindows10x64_20171019-20.csv | tail -n 20

A partir de aquí, el límite es mi imaginación. Siempre tendré algún dato que buscar, alguna fecha, algún nombre, algún tipo de actividad, …

Plaso, (Plaso Langar Að Safna Öllu) VS TSK, (The Sleuth Kit)

No voy a mostrar todas las diferencias entre las dos principales herramientas usadas para la generación de líneas temporales. Las dos tienen sus ventajas y las dos tienen sus inconvenientes, como toda herramienta y utilidad. Como sabrás, cada análisis es un mundo, distinto a otro.

La primera diferencia que voy a ver va a ser en la forma de presentar los eventos procesados, dado que cada suite los presenta de diferentes maneras.

De esta forma lo presenta The Sleuth Kit

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020_Timeline.csv | head -n 1

Y de esta forma lo presenta Plaso, en la salida dinámica que me interesa que tenga

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020.csv | head -n 1

Sí quiero mostrar la principal, bajo mi punto de vista, a tener en cuenta, y es el tiempo de procesamiento de cada una de ellas, con respecto a la información que pueden extraer de la imagen forense.

Ya he comentado anteriormente que las dos suites pueden trabajar directamente sobre los ficheros de imagen forense, sin archivos intermedios.

Voy a generar el ‘Bodyfile’ con ambas suites.

Primero con The Sleuth Kit

time fls -rpl -o 1026048 -f ntfs -i raw -b 512 -m / /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64 >> /home/marcos/Evidences/Windows10x64/Win10x64_BodyFile.txt

El resultado es que ha tardado 17,036 segundos en procesar la imagen para generar el ‘Bodyfile’.

Voy ahora con Plaso

time log2timeline.py -o 1026048 --sector_size 512 --status-view none --logfile /home/marcos/Evidences/Windows10x64.plaso /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64

Y el resultado es que ha tardado 13,42,546 minutos en procesar la imagen para generar el fichero de almacenamiento ‘.plaso’

Voy a buscar un contenido específico, directamente y sobre la misma imagen forense, para poder ver el tiempo que tarda cada una de ellas, usando, para ello, a ‘time‘.

Primero con The Sleuth Kit

time fls -rp -o 1026048 -f ntfs -i raw -b 512 /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64 | egrep -i "WannaCry|USBOblivion|CCleaner" | egrep -vi "[.]dll"

El resultado es que ha tardado en procesar, en realizar esta búsqueda, es de 6,109 segundos.

Voy ahora con Plaso

time psort.py -o dynamic /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_slow.plaso "select date, time,MACB,source,filename,inode where parser is 'filestat' or parser is 'pe' and date >= '2017-10-20 00:00:00'" | egrep -i "WannaCry|USBOblivion|CCleaner" | egrep -vi "[.]dll"

Y el resultado es que ha tardado en procesar, en realizar esta búsqueda, es de 2,46,094 minutos.

AnalyzeMFT

Si hay algo que mi cabeza no puede concebir es pasar por alto una línea temporal de la ‘MFT’, dado que en los sistemas NTFS, todos los datos de archivos, directorios y metarchivos, se almacenan en esta tabla de archivos, como metadatos. Y, ¿Por qué razón no puedo pasar por alto una línea temporal de la ‘MFT’? Porque considero necesario establecer una línea de tiempo de esta tabla de archivos, independiente al resto de eventos recogidos. Porque no siempre dispondré de una imagen forense del disco duro. Por ejemplo, en los casos en los que tenga que aplicar algún tipo de triage porque son un elevado número de equipos, o por desconocer el paciente ‘0’, tan sólo podré disponer de este fichero, junto a otros artefactos.

AnalyzeMFT, escrito en Python, está diseñado para analizar completamente el archivo MFT desde un sistema de archivos NTFS y presentar los resultados con la mayor precisión posible en múltiples formatos.

Las instrucciones para la instalación de esta herramienta se encuentran en su sitio oficial de GitHub.

Dado que trabaja con múltiples formatos en su salida, considero necesario ver su ayuda, dado que me podría resultar de interés establecer un tipo de línea u otro, dependiendo del caso.

analyzeMFT.py -h

Mostraré todas sus formas de trabajo.

Primeramente, su uso básico.

analyzeMFT.py -f /home/marcos/Evidences/Windows10x64/Files/MFT -o /home/marcos/Evidences/Windows10x64/Files/MFT.txt

Que se presenta de esta forma

cat -n /home/marcos/Evidences/Windows10x64/Files/MFT.txt | head -n 20

Voy ahora con la salida en formato Excel

analyzeMFT.py -f /home/marcos/Evidences/Windows10x64/Files/MFT -e -o /home/marcos/Evidences/Windows10x64/Files/MFT.xlsx

Que se presenta de esta forma

cat -n /home/marcos/Evidences/Windows10x64/Files/MFT.xlsx | head -n 20

Voy ahora con su salida en formato ‘.csv’

analyzeMFT.py -f /home/marcos/Evidences/Windows10x64/Files/MFT -c /home/marcos/Evidences/Windows10x64/Files/MFT.csv

Que se presenta de esta forma.

cat -n /home/marcos/Evidences/Windows10x64/Files/MFT.csv | head -n 20

Una opción de la que dispone esta herramienta es la capacidad para generar un ‘Bodyfile’ de la ‘MFT’, con dos alternativas, también muy interesantes.

La primera de ellas

analyzeMFT.py -f /home/marcos/Evidences/Windows10x64/Files/MFT -b /home/marcos/Evidences/Windows10x64/Files/MFT_Bodyfile.txt

Que se presenta de esta manera

cat -n /home/marcos/Evidences/Windows10x64/Files/MFT_Bodyfile.txt | head -n 20

En esta manera de trabajo, se generará la línea temporal de tal forma que los nombres de los ficheros sean legibles en un formato MS-DOS. Es decir que, si por ejemplo, se encuentra en esa tabla de archivos un nombre de fichero demasiado largo, o con caracteres especiales, el Sistema se encarga de convertir ese nombre, a otro de seis caracteres, seguido de una tilde ‘~’ y de un número correlativo, en caso de existir nombres de ficheros duplicados.

Y la segunda de ellas, que se procesa así

analyzeMFT.py -f /home/marcos/Evidences/Windows10x64/Files/MFT --bodyfull -b /home/marcos/Evidences/Windows10x64/Files/MFT_Full_Bodyfile.txt

Y se presenta así

cat -n /home/marcos/Evidencias/Windows10x64/Files/MFT_Full_Bodyfile.txt | head -n 20

Con esta segunda forma de generar un ‘Bodyfile’ lo que consigo es que me grabe en la línea de tiempo, la ruta completa y su nombre de archivo completo.

Hay una tercera forma de trabajar con esta herramienta, para generar un ‘Bodyfile’, y consiste en producir en la línea de tiempo una barra invertida, agregando para ello el argumento ‘-w’.

analyzeMFT.py -f /home/marcos/Evidences/Windows10x64/Files/MFT -w --bodyfull -b /home/marcos/Evidences/Windows10x64/Files/MFT_Full_Bodyfile_w.txt

Que se presenta de esta manera

cat -n /home/marcos/Evidences/Windows10x64/Files/MFT_Full_Bodyfile_w.txt | head -n 20

Claramente, se puede apreciar la única diferencia que existe entre usar o no el parámetro ‘-w’.

Pero, ¿Para qué voy a querer generar un ‘Bodyfile’ de la ‘MFT’? Pues para exactamente lo mismo que he hecho con ‘The Sleuth Kit’. Para procesarla, acto seguido, con ‘Mactime’. Y su funcionamiento es exactamente el mismo.

Puedo indicarle que me delimite la línea de tiempo por comas

mactime -d -b /home/Evidences/Windows10x64/Files/MFT_Bodyfile.txt >> /home/marcos/Evidences/Windows10x64/Files/MFT_Bodyfile.csv

Que se visualizaría de esta forma

cat -n /home/marcos/Evidences/Windows10x64/Files/MFT_bodyfile.csv | head -n 20

mactime -d -b /home/Evidences/Windows10x64/Files/MFT_Full_Bodyfile.txt >> /home/marcos/Evidences/Windows10x64/Files/MFT_Full_Bodyfile.csv

cat -n /home/marcos/Evidences/Windows10x64/Files/MFT_Full_Bodyfile.csv | head -n 20

mactime -d -b /home/Evidences/Windows10x64/Files/MFT_Full_Bodyfile_w.txt >> /home/marcos/Evidences/Windows10x64/Files/MFT_Full_Bodyfile_w.csv

cat -n /home/marcos/Evidences/Windows10x64/Files/MFT_Full_Bodyfile_w.csv | head -n 20

O le puedo indicar que no me lo delimite y que me tabule las columnas

mactime -b /home/Evidences/Windows10x64/Files/MFT_Bodyfile.txt >> /home/marcos/Evidences/Windows10x64/Files/MFTBodyfile.csv

Que se representaría de esta manera

cat -n /home/marcos/Evidences/Windows10x64/Files/MFTBodyfile.csv | head -n 20

mactime -b /home/marcos/Evidences/Windows10x64/Files/MFT_Full_Bodyfile.txt >> /home/marcos/Evidences/Windows10x64/Files/MFTFullBodyfile.csv

cat -n /home/marcos/Evidences/Windows10x64/Files/MFTFullBodyfile.csv | head -n 20

A partir de aquí, el límite es mi imaginación. Siempre tendré algún dato que buscar, alguna fecha, algún nombre, algún tipo de actividad, …

El límite… Imaginación

Seguramente te estés preguntando en este momento que porqué digo que el límite es la imaginación. Es fácil. Puedo generar líneas de tiempo con muchas herramientas, de muchas maneras, dando incluso un toque personalizado al contenido procesado.

Puedo abrir después estas líneas de tiempo tal cual se han generado, con alguna aplicación ofimática. O, por ejemplo, puedo darle formato como una tabla en una hoja Excel, puedo usar una plantilla Excel muy interesante, que dará color a cada uno de los eventos, teniendo en cuenta su origen.

O puedo abrir esa línea temporal con otra aplicación más específica, como puede ser, por ejemplo, Timeline Explorer, que tiene opciones muy interesantes.

O puedo jugar con CLI y ‘Egrep’, una opción más que interesante y una sensación que me gusta experimentar de vez en cuando.

Siempre tendré algún dato que buscar, alguna fecha, algún nombre, algún tipo de actividad, …

Venga, vale. No siempre, no. ¿Seguro? Qué tal un exceso de actividad, actividad fuera del horario normal del Sistema, …

Por ejemplo, puedo buscar usuarios en la línea temporal sin necesidad de montar la imagen.

Primero un ejemplo con ‘The Sleuth Kit’

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscowindows10x64_20171020_Timeline.csv | egrep -io "[/]Users[/][a-aA-Z0-9]*[/]| sort | uniq

Después un ejemplo con ‘Plaso’

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscowindows10x64_20171020.csv | egrep -io "[/]Users[/][a-aA-Z0-9]*[/]| sort | uniq

Puedo buscar el contenido que yo desee en las líneas temporales que haya realizado. Por ejemplo, los ficheros ‘Prefetch‘, otro pilar fundamental de cualquier análisis forense.

Primeramente, con ‘The Sleuth Kit’

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020_Timeline.csv | egrep -i "WannaCry.*[.]exe-[A-z0-9]*|Wana.*[.]exe-[A-z0-9]*|CCleaner.*[.]exe-[A-z0-9]*|USBOblivion.*[.]exe-[A-z0-9]*"

Después, con ‘Plaso’

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020.csv | egrep -i "WannaCry.*[.]exe-[A-z0-9]*|Wana.*[.]exe-[A-z0-9]*|CCleaner.*[.]exe-[A-z0-9]*|USBOblivion.*[.]exe-[A-z0-9]*"

O algo más genérico, como buscar contenido dentro de algunas carpetas del usuario, excluyendo otro contenido.

Primero con ‘The Sleuth Kit’

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020_Timeline.csv | egrep -i "Marcos/Downloads.*" | egrep -v "WNCRY|[.]lnk"

Después con ‘Plaso’

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020.csv | egrep -i "Marcos/Downloads.*" | egrep -v "WNCRY|[.]lnk"

O, por supuesto, buscar un tipo de ficheros en concreto

Primero con ‘The Sleuth Kit’

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020_Timeline.csv | egrep -i "Marcos/Downloads.*[.]png"

Y después con ‘Plaso’

cat -n /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64_20171020.csv | egrep -i "Marcos/Downloads.*[.]png"

Como puedes imaginar, el único límite es… la imaginación. Tanto si sabes qué buscar, como si no, CLI ofrece un mundo lleno de posibilidades.

Montar una imagen forense…

Siempre se ha dicho, y yo también me incluyo ahí, que siempre hay que montar la imagen en modo de sólo lectura. Esto es una verdad como un templo. Esto es una regla de oro que jamás se debe incumplir. Pero…

¿Cuál es la finalidad de montar la imagen forense? ¿Explorar la imagen? He visto ya el mundo de posibilidades que tengo para realizar eso, sin necesidad de montar la imagen. ¿Extraer una copia de ficheros de la imagen forense? Quizás… Tampoco, porque tanto ‘The Sleuth Kit’ como ‘Plaso’ tienen módulos para proceder a la extracción de contenido de la imagen forense.

Primero voy a probar esta función con ‘The Sleuth Kit’

Por ejemplo, me interesa, y mucho, extraer una copia del fichero$MFT‘, (Un fichero de vital importancia en cualquier tipo de análisis), de la imagen forense. Primeramente, lo busco, usando para ello ‘FLS’.

fls -rpl -o 1026048 -f ntfs -i raw -b 512 /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64 | egrep "[$]MFT"

Una vez localizado el fichero dentro de la imagen forense, puedo ver todos sus detalles, entre los que se incluye su posición en el disco duro, (inode). Dado que tengo su ubicación, puedo emplear otra de las herramientas de ‘TSK’: ‘Istat‘, que me mostrará los detalles de ese fichero sobre una estructura de metadatos específica.

¿Cómo funciona ‘Istat’? Tiene un uso muy sencillo. Como siempre, si tiene ayuda, la veo

istat

Así pues, procedo a exportar toda la información de ese fichero a un archivo de texto, donde podré consultarlo después con calma.

istat -i raw -f ntfs -o 1026048 /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64 0-128-6 >> /home/marcos/Evidences/Windows10x64/MFT_istat.txt

Una vez exportada, primeramente, la información detallada sobre este fichero, ¿Cómo se presenta?

cat -n /home/marcos/Evidences/Windows10x64/MFT_istat.txt | head -n 29

Puedo visualizar todos los atributos de este fichero, con sus marcas de tiempo correspondiente.

Ahora me interesa proceder a extraer una copia, inalterada, de ese mismo fichero. ‘TSK’ posee otro módulo más: ‘Icat‘, que procede a enviar el contenido de un archivo en una imagen forense de disco, a una ruta especificada.

Consulto su ayuda, porque también la tiene

icat

Y, como tengo su ubicación en el disco, procedo a la extracción

icat -r -o 1026048 -f ntfs -i raw /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64 0-128-6 >> /home/marcos/Evidences/Windows10x64/Files/MFT

Y tengo la fea manía de siempre comprobar lo que hago

ls -s /home/marcos/Evidences/Windows10x64/Files/MFT
file /home/marcos/Evidences/Windows10x64/Files/MFT

Voy a localizar y a extraer ahora, ese mismo fichero, con ‘Plaso’.

Para ello, ‘Plaso’ me ofrece un modulo llamado ‘Image_Export‘, que dispone de su propia ayuda y que consulto, como viene siendo habitual en mí

image_export.py -h

Su uso es realmente sencillo. Una vez tengo localizado el nombre de un fichero que me interesa exportar, tan sólo tengo que indicárselo a ‘Image_Export’, con una ruta de salida. Por ejemplo, voy a volver a exportar el fichero ‘$MFT’ de la imagen forense, al igual que hice anteriormente con ‘The Sleuth Kit’.

image_export.py -o 1026048 --names '$MFT' /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64 -w /home/marcos/Evidences/Windows10x64/Files

Y, por supuesto, siempre compruebo y me aseguro de lo que hago.

ls -s /home/marcos/Evidences/Windows10x64/Files/_MFT
file /home/marcos/Evidences/Windows10x64/Files/_MFT

Y, ahora, para comprobar si he exportado los mismo ficheros, tanto con ‘The Sleuth Kit’, como con ‘Plaso’, los compruebo a la vez, incluyendo su huella digital.

ls -s /home/marcos/Evidences/Windows10x64/Files/*
file /home/marcos/Evidences/Windows10x64/Files/*
sha1sum /home/marcos/Evidences/Windows10x64/Files/*

Tal y como se ha podido ver, los ficheros, son idénticos.

¿Qué más me permite hacer este modulo? Pues, por ejemplo, extraer varios ficheros a la vez. Simplemente le tengo que indicar sus nombres, separados por comas.

image_export.py -o 1026048 --names 'KeepCalm-Forensic.png,DT.png' /home/marcos/Evidences/Windows10x64/ImagenDiscoWindows10x64 -w /home/marcos/Evidences/Windows10x64/Files

Y puedo comprobar que, efectivamente, se ha extraído una copia de esos ficheros, de la imagen forense.

ls -s /home/marcos/Evidences/Windows10x64/Files/Users/Marcos/Downloads
file /home/marcos/Evidences/Windows10x64/Files/Users/Marcos/Downloads

Acabo de caer en la cuenta de que este módulo de ‘Plaso’ extrae los ficheros de una manera peculiar. Respeta el directorio original y lo genera dentro del directorio de salida. De esta forma, puedo saber en todo momento cuál era la ubicación de esos ficheros.

Como has podido ver no es necesario montar la imagen forense, ni para explorar su contenido, ni para extraer datos de su interior. Cada día soy más reacio a montar nada, porque basta un mínimo error en un sólo argumento, o en una casilla de verificación, para alterar la evidencia y dejar invalidado todo el proceso de análisis.

El objetivo principal de este artículo era el de mostrar distintas formas de generar y visualizar líneas de tiempo, usando para ello la CLI. No pretendo hablar aquí de su interpretación, que requiere de un capitulo a parte, de lo que hablaré en un futuro. Sí te puedo asegurar que hay cosas que es mejor no creerse, que se deben ver por uno mismo.

 

Esto es todo, por ahora. ¿Nos leemos en la siguiente entrada? Se despide este minion, entregado y leal, de vosotros… por ahora.

Marcos @_N4rr34n6_

3 comentarios en «Sobre las líneas de tiempo: El límite, tu imaginación»

  1. Soberbia master class Marcos, mi más sincera felicitación por este ya para mi, referente post. De aquí en adelante lo consultaré para ir refrescando conceptos. Me quedo por aquí un poco más para seguir aprendiendo de ti.
    Te recuerdo que tenemos un café pendiente.
    Un abrazo

  2. Al final quedó una turra bastante gorda, pero de lo más interesante.
    Mil gracias por ilustrarnos un poco en análisis forense. Tengo la sensación de que es la rama más opaca del hacking.
    ¡Espero que haya más!
    Felices fiestas

Los comentarios están cerrados.