¿Qué ha pasado? El ABC del MACB

No me quería liar con esta entrada, pero no tengo remedio y me he liado un poco… bastante, porque me gusta documentar cada paso que doy. 😅

El presente artículo se divide en los siguientes apartados:

Permíteme que empiece este artículo con la misma frase con la que terminé el anterior: hay cosas que es mejor no creerse, que se deben ver por uno mismo. Como decía Brett Shavers en una entrada de su Blog

«Cuando buscas una respuesta y la encuentras, la retención de lo que aprendes es mucho mejor que publicar una pregunta en un foro y esperar que alguien te proporcione la respuesta.«

En el artículo anterior vimos cómo podíamos generar, (y filtrar), una línea de tiempo con un par de herramientas, (The SleuthKitPlaso y AnalyzeMFT), sobre un sistema de ficheros ‘NTFS’, (New Technology File System). Sabemos que algo ha pasado en un momento determinado, en un fichero en concreto. Pero, ¿Qué ha pasado? Para llegar a saber qué ha pasado, debemos estudiar las marcas de tiempo.

Pero, antes de continuar, permíteme que te hable, muy brevemente, de este sistema de ficheros y de la ‘MFT’, (Master File Table). Considero básico entender cómo funciona el sistema de ficheros que estemos analizando, para entender bien y poder interpretar una línea de tiempo. No es fácil hablar sobre esto sin profundizar demasiado. Pero sólo nos interesan un par de cosas, de lo poco que voy a contar. A ver si lo puedo hacer sencillo…

Un mínimo de teoría…

NTFS‘ trabaja sobre un formato de datos de ‘Unicode‘.

El sistema de ficheros ‘NTFS‘ se introdujo cuando Microsoft creó ‘Windows NT‘, allá por el mes de julio del año 1993. ‘NTFS‘ ofrece algunas mejoras significativas sobre los sistemas de ficheros ‘FAT, (File Allocation Table)’. Proporciona más información acerca de un archivo, incluidas funciones de seguridad, propiedades del archivo y otros atributos. Hay más control sobre los ficheros y directorios. El sistema realiza un seguimiento de todo lo que ocurre en él, porque trabaja con varios registros, a modo de diario, que guardan todos sus cambios, basándose siempre en los metadatos de los ficheros.

En el sistema de ficheros ‘NTFS‘, todo lo que se escribe en el disco se considera un fichero.

¿Qué archivos de registro podemos encontrar en un volumen ‘NTFS’? ‘$Mft, ‘$MftMirr‘, ‘$LogFile‘, ‘$Volume‘, ‘$AttrDef‘, ‘$‘, ‘$Bitmap‘, ‘$Boot‘, ‘$BadClus‘, ‘$Secure‘, ‘$Upcase‘, ‘$Quota‘, ‘$ObjId‘, ‘$Reparse‘, $UsnJrnl y ‘$Extend‘. Estos ficheros pueden ser archivos de metadatos o archivos ‘normales’. Los archivos de metadatos contienen información sobre el volumen y los archivos normales contienen sus datos. Estos ficheros, estos metadatos, se conocen como ‘Metarchivos‘. Estoy convencido de que muchos de estos ficheros te suenan. Todos estos ficheros definen y organizan este sistema de archivos.

Ninguna actividad del sistema pasa desapercibida en los ficheros ‘$MFT‘, ‘$UsnJrnl‘ y ‘$Logfile‘.

El primer fichero que nos encontramos en un disco con un sistema de ficheros ‘NTFS‘ es el correspondiente a la ‘MFT‘, ($MFT), que se crea al mismo tiempo que se formatea el volumen como ‘NTFS‘. Como todo lo que se graba en el disco se considera un fichero, cualquier modificación que se realice en el sistema se grabará, como un registro de metadatos, en el archivo ‘MFT, que contiene incluso información de los archivos de sistema y que almacena todos los ficheros y directorios, con varias propiedades y que puede llegar a ocupar hasta el 50% del tamaño de la partición.

Se crean dos ficheros de la ‘MFT. El primero de ellos es el principal, ($MFT), y el otro es una copia llamada ‘espejo’, ($MftMirr), que contiene los cuatro primero registros. Si el fichero principal de la ‘MFT‘ resultara dañado, puede ser restaurado con la copia ‘espejo’.

La información de cada registro grabado en la ‘MFT‘ se divide en campos, conocidos como atributos. Cada atributo tiene un tipo de atributo, representado por un ID, un nombre y un valor. Los atributos pueden ser residentes o no residentes. Son residentes los que almacenan toda su información en el registro ‘MFT‘ y son no residentes los que almacenan datos fuera de la ‘MFT‘.

¿Qué tipos de atributos de archivo nos podemos encontrar? ‘$Standard Information‘, ‘$Attribute_List‘, ‘$File_Name‘, ‘$Object_ID‘, ‘$Security_Descriptor‘, ‘$Volume_Name‘, ‘$Volume_Information‘, ‘$Data‘, ‘$Index_Root‘, ‘$Index_Allocation‘, ‘$Bitmap‘, ‘$Reparse_Point‘, ‘$EA_Information‘, ‘$EA‘, ‘$Volume_Version’, ‘$Symbolic_Link’, ‘$Property_Set’ y ‘$Logged_Utility_Stream‘.

Y, hasta aquí voy a leer. Ya he citado los dos elementos que me interesa ver hoy: El fichero ‘$MFT‘ y los atributos ‘$Standard_Information‘ y ‘$File_Name‘.

No es objetivo de este artículo profundizar en la arquitectura del sistema de ficheros ‘NTFS, ni extenderme demasiado con la ‘MFT‘. Tan sólo quería mostrar, un mínimo, cómo funciona este sistema de ficheros y la cantidad de información que maneja.

Para que te hagas una idea de la complejidad técnica de las propiedades de metadatos de los ficheros, te muestro esta imagen, que corresponde a un registro de un fichero que se encuentra en la ‘MFT‘, abierto con un visor hexadecimal.

Toda la información de un fichero se guarda en un registro, en la ‘MFT‘. Concretamente, se pueden encontrar en él un total de 18 atributos por cada registro, representados por IDs. Y esta información comienza en el valor 46494C4530 y termina en el valor FFFFFFFF

Si lo deseas, tienes muy buenas explicaciones en los siguientes enlaces:

En resumen…

En el sistema de ficheros ‘NTFS’, todo en el disco es un archivo. Incluso los metadatos se almacenan como un conjunto de archivos. La ‘MFT’ es un índice de cada archivo en el volumen. Para cada archivo, la ‘MFT’ mantiene un conjunto de registros, llamados atributos, y cada atributo almacena un tipo diferente de información.

Como Brian Carrier dijo:

«La MFT es el corazón de NTFS porque contiene información sobre todos los archivos y directorios.«

Las marcas de tiempo

Las marcas de tiempo son generadas a raíz de los metadatos del sistema de ficheros y se representan por una serie de letras. Cuando se realiza una línea de tiempo, lo que se hace es ordenar cronológicamente esos metadatos. Cada letra tiene asignado un significado, que corresponde a una acción. De esta manera se dispone que:

  • M, (mtime) – Modificado
  • A, (atime) – Accedido
  • C, (ctime) – Cambiado, (‘$MFT‘ modificada)
  • B, (crtime) – Creado

Lo primero que voy a aclarar es que no todos los sistemas de ficheros registran un tiempo de creación, (B). No es el caso del sistema de ficheros ‘NTFS‘, que sí lo registra.

Las marcas de tiempo se encuentran almacenadas en dos de los atributos que hemos visto anteriormente:

  • En el atributo ‘$Standard_Information‘: Que contiene información acerca de un fichero, en la que se incluyen las marcas de tiempo, sus permisos y un contador de enlaces. Este atributo es el que usan todas las utilidades de visualización de de marcas de tiempo, como el ‘Explorador de Windows’, y otras tantas herramientas forenses.
  • En el atributo ‘$File_Name‘: Representa el nombre del archivo, con nombres largos, (hasta 255 caracteres Unicode), y nombres cortos, (8 caracteres, 8.3 filename). Un archivo puede tener uno o más nombres, que pueden estar en cualquier directorio. Este atributo siempre está residente. También contiene otro conjunto de marcas de tiempo.

Estos dos atributos contendrán las cuatro marcas de tiempo correspondientes. Es decir, la ‘MFT‘ registra dos conjuntos de marcas de tiempo, uno manipulable por el usuario y otro administrado por el sistema.

La principal diferencia, dentro los dos atributos, es que el atributo ‘$Standard_Information‘ puede ser modificado por procesos de nivel de usuario, como por ejemplo, empleando la técnica de ‘Timestomp‘, una aplicación antiforense que puede cambiar por completo todas las marcas de tiempo, (una técnica muy usada por malware), mientras que el atributo ‘$File_Name‘ sólo puede ser modificado por el kernel del sistema. No existen, a día de hoy, herramientas antiforenses que lo hagan, aunque sí existen otros métodos para su evasión, como la deshabilitación de la actualización de estos registros.

Bueno. Parece fácil entender las marcas de tiempo que nos podemos encontrar en una línea de tiempo, ¿Verdad? 4 letras, 4 significados, 4 acciones. Pero, ¿Qué ocurre cuando nos encontramos con las marcas ‘MACB’ o ‘….’? ¿Sabrías interpretar cada una de esas marcas de tiempo? Posiblemente me dirás que sí. Entonces te preguntaré: ¿Por qué? Si tu respuesta es que porque lo has estudiado, te preguntaré, de nuevo: ¿Pero lo has visto? ¿Te lo crees?

Antes de continuar, debo decirte que lo primero que tenemos que tener claro es que debemos conocer cómo funciona, cómo trabaja y qué resultados arrojan cada una de las herramientas que usamos para realizar un análisis de estas características. ¿Por qué? Porque no es lo mismo, por ejemplo, ejecutar ‘Plaso‘ en un sistema Windows que hacerlo en un sistema Linux. Si lo ejecutamos en un sistema Windows no veremos las marcas de tiempo como ‘MACB’, si no que simplemente veremos esos sellos de tiempo como fechas. Si optamos por generar con ‘Plaso‘ la línea de tiempo en un sistema Windows, debemos realizar el análisis de esa línea de tiempo en ese mismo sistema Windows porque si nos llevamos el fichero temporal ‘.Plaso‘ a un sistema Linux e intentamos ejecutar, por ejemplo, ‘Pinfo‘ sobre ese fichero, nos dirá que no existe ningún almacen de datos.

En la siguiente imagen puedes ver un extracto de una linea de tiempo realizada con la versión de ‘Plaso‘ para Windows, en la que he filtrado los resultados para buscar un fichero en concreto.

Y en esta otra imagen puedes observar una línea de tiempo realizada con la version de ‘The SleuthKit‘ para Windows, sobre el mismo fichero de imagen y con el mismo tipo de filtrado.

En el primer caso obtenemos 98 referencias a ese fichero filtrado, desde diferentes artefactos, mientras que en el segundo caso obtenemos 12 referencias, bajo el mismo filtrado.

Por otro lado, no es lo mismo realizar una línea de tiempo con ‘The SleuthKit‘ que con ‘Plaso. ¿Por qué? Porque aunque la realicemos sobre la misma imagen forense, no obtendremos las mismas marcas de tiempo. Ten en cuenta que, para empezar, ‘Plaso‘ analiza más artefactos que ‘The SleuthKit‘.

En la siguiente imagen puedes ver la diferencia existente entre generar una línea de tiempo con ‘The SleuthKit‘ y ‘Plaso‘, sobre la misma imagen forense. La imagen de la izquierda corresponde a una generada con ‘The SleuthKit‘ en su versión para Windows. La imagen de la derecha corresponde a una generada con ‘Plaso‘ en su versión para Linux.¿Diferencias? En este caso en particular ‘….’ y ‘..cb’ aparecen en la generada con ‘Plaso‘, pero no en la generada con ‘The SleuthKit‘.

Siguiendo con la interpretación de las marcas de tiempo, te diré que existe una muy buena referencia relativa al significado de este tipo de marcas de tiempo. Se trata del Poster_Windows_Forensics_2017_4.2, y que, entre otros datos de referencia a tener en cuenta, nos encontramos con esto

Y yo te pregunto… ¿Te lo crees? ¿Lo has visto? Venga. Es cierto que viene de una Comunidad de reconocido prestigio como es SANS. Pero, aún así, ¿Te crees todo lo que te cuentan?

Lo primero que vemos en esta estupenda hoja de referencia es que nos muestra las marcas de tiempo de los dos atributos que he mencionado anteriormente:

$Standard_Information‘, ($STDINFO), y ‘$File_Name‘, ($FILENAME)

De este modo, tenemos que:

Creo que nunca se me ha dado bien explicar algo teórico. Tengo la sensación de haber soltado un rollo de texto, y que no se ha llegado a entender. Va siendo hora de ver, como a mí me gusta, todo lo que he dicho anteriormente.

El entorno

Para la realización de las pruebas que he llevado a cabo para escribir este artículo, he optado por instalar una máquina virtual, sobre VirtualBox, con un sistema operativo Windows 7 x64, limpio, y un tamaño de disco de 10 GB, que es suficiente para trabajar con las marcas de tiempo. Una vez instalado el sistema operativo, llevé a cabo varias acciones sobre varios ficheros que yo mismo he creado, en días consecutivos y en diferentes horas. Por cada acción que llevé a cabo, realicé una línea temporal del sistema usando para ello ‘The Sleuth Kit, que presentará los tiempos en formato UTC, en su versión de Windows, y ‘AnalyzeMFT‘, (para comparar resultados). También generé las líneas de tiempo con ‘Plaso‘. Y extraje el fichero ‘$MFT, (Costumbres que tiene uno), para parsearlo con fte, que presentará la hora local del sistema.

La ‘MFT‘ es un fichero mucho más pequeño que una imagen forense y puedo trabajar sobre él para generar las mismas líneas de tiempo, por si hubiera cometido algún error. 🙂

La herramienta que he usado para la visualización de las líneas de tiempo ha sido Timeline Explorer, para mostrar el contenido de una forma cómoda y sencilla, usando filtrados para ello.

Hemos podido ver en la tabla anterior las marcas de tiempo, que se producen sobre 8 acciones que pueden llevarse a cabo con un fichero en un sistema Windows, en los dos atributos que contienen marcas de tiempo, (‘$Standard_Information‘ y ‘$File_Name‘).

¿Son 8 las acciones totales que se pueden llevar a cabo sobre un fichero? Bueno. A mí, de primeras, se me ocurren 14 acciones a llevar a cabo y seguramente me haya dejado alguna en el tintero. De acuerdo. No todas tendrán incidencia en las marcas de tiempo, pero son acciones que hay que marcar y tener en cuenta. Ya se encargará nuestro pensamiento lateral de relacionar una acción u otra.

Comencemos… con la creación de ficheros. Quizás me haya excedido en la extensión de este apartado, pero he querido hacer varias pruebas con varios ficheros porque no siempre se obtienen los mismos resultados a la hora de la creación de los ficheros.

Creación de ficheros

Se me ocurren un par de formas de crear ficheros.

Fichero ‘Nuevo documento de texto enriquecido.rtf

Primero creo un fichero ‘.rtfdesde el menú contextual del ratón, respetando su nombre por defecto, ‘Nuevo documento de texto enriquecido.rtf‘. Tras parsear la ‘MFT‘ con fte y después de darle formato de tabla, abro su línea de tiempo con Timeline Explorer. Filtro los resultados y obtengo esta primera imagen, en la que vemos, además del nombre del fichero, en un formato de datos ‘Unicode‘, las 4 fechas correspondientes a las 4 marcas de tiempo, en un tipo de formato ‘Filetime‘. También podemos ver un campo de nombre ‘nspace‘, con un valor de ‘DOS, Win32‘. ¿Qué es eso? Un campo que define el tipo de nombre y que puede ser:

  • POSIX, (Unicode, distingue entre mayúsculas y minúsculas)
  • Win32, (unicode, sin distinción de mayúsculas y minúsculas)
  • DOS, (8.3 ASCII, sin distinción de mayúsculas y minúsculas)
  • Win32 7 DOS, (cuando Win32 cabe en el espacio de DOS)

Esta información se corresponde al atributo de archivo ‘$Standard_Info‘, ($SI).

Si nos desplazamos hacia la derecha de la línea temporal de este fichero, podremos ver las 4 marcas de tiempo correspondientes al atributo ‘$File_Name‘, ($FN).

Claramente, en todos los casos, coincide la misma fecha. De tal forma que tenemos, en el fichero ‘Nuevo documento de texto enriquecido.rtf‘:

Analizo ahora la ‘MFT‘ con ‘AnalyzeMFT‘ y le indico que me muestre la información del fichero en un formato de nombre de archivo corto. Este tipo de formato admite un máximo de 8 caracteres. Como en este caso los supera, le asigna un nombre con 6 caracteres, seguido de la tilde ‘~‘, (Alt + 126), y un número, correlativo, por si hubiera más ficheros con ese mismo nombre. En este caso, el nombre que vemos es ‘NUEVOD~1.RTF‘, (de esta forma veremos los nombres de ficheros con muchas herramientas forenses, o incluso si analizamos la información en bruto), seguido de las marcas de tiempo, que en este caso corresponden a ‘MACB‘.

Ahora analizo, de nuevo, la ‘MFT‘, con ‘AnalyzeMFT‘, pero le indico que muestre el nombre del fichero en formato ‘Unicode‘. Claramente existe una diferencia abismal a la hora de interpretar estos nombres. Las marcas de tiempo, lógicamente, son las mismas.

Al analizar la ‘MFT‘ con ‘AnalyzeMFT‘, estamos extrayendo la información de metadatos correspondiente al atributo ‘$File_Name.

Para terminar de ver la información de este fichero hago uso de ‘TSK‘, en su versión de Windows. En este caso, obtenemos dos referencias al fichero. Una de ellas, la que contiene entre paréntesis ‘$File_name‘, se corresponde, efectivamente, al atributo ‘$File_name‘. La otra de ellas, que no tiene asociado ningún comentario entre paréntesis, se corresponde al atributo ‘$Standard_Information‘.

De esta forma, se puede apreciar en el fichero ‘Nuevo documento de texto enriquecido.rtf‘, que:

Fichero ‘N4rr34n6.rft

Creo un segundo fichero ‘.rtf‘, también desde el menú contextual, y le asigno el nombre de ‘N4rr34n6.rtf‘. Analizo el fichero ‘MFT‘ con fte. Como en el ejemplo del fichero anterior, primero estudio la información con fte. Examino tanto su atributo ‘$Standard_Information

Como su atributo ‘$File_Name‘.

Se puede ver que existe alguna diferencia en las marcas de tiempo. Concretamente, en las marcas de tiempo correspondientes al atributo ‘$Standard_Information‘, se puede apreciar que coinciden las fechas de creación, modificación y acceso, pero no coincide la fecha de cambio. ¿Por qué pasa esto? Porque el fichero se crea en el mismo momento en que hacemos ‘clic‘ al ratón, en el mismo instante en que aparece el icono del fichero. Al asignarle un nombre distinto al que introduce el sistema por defecto, se realiza un cambio en las propiedades del fichero. Y esa diferencia de segundos es la que me llevó asignarle el nombre al fichero. En el atributo ‘$File_Name‘ coinciden las marcas de tiempo. De tal forma que tenemos:

Analizo la ‘MFT‘ con ‘AnalyzeMFT‘ con un formato de nombre corto.

Al no exceder de 8 caracteres, no sufre cambios su nombre de archivo.

La analizo también con un nombre en formato ‘Unicode‘, con su ruta completa.

Se aprecian dos referencias al fichero. La segunda de ellas coincide en tiempo con las anteriores marcas pero… ¿Qué demonios es eso?/Users/Marcos/Desktop/N4rr34n6.rtf/snapshot.etl‘.

Creo saber que los ficheros ‘.etl’, (Event Tracing for Windows Log), son archivos de registro, creados por el propio sistema operativo, (Microsoft Tracelog), que están asociados al visualizador de eventos y que siempre contienen información muy útil, que se puede parsear usando Strings de SysInternals, por ejemplo, o con el mismo visor de eventos del Sistema. Pero nunca me había encontrado este tipo de ficheros fuera de las ubicaciones que conozco, en un documento recién creado que ni si quiera ha sido abierto, y tampoco lo he visto a tiempo para hacerme con él. Así, que si alguien puede arrojarme algo de luz… agradecido.

No obstante, lo que me llama la atención, además de ese fichero que, recordemos, aparece en la propiedad de ‘$File_name‘, es la fecha que presenta. Muestra la fecha de ‘2017-11-13 15:56:08‘, pero hemos podido ver que el fichero fue creado en ‘2017-11-14 16:30:07‘. ¿Qué ha pasado? ¿Quién miente?

De nuevo, hago uso de ‘TSK‘ para generar la línea de tiempo.

En este caso, obtenemos tres referencias al fichero ‘N4rr34n6.rtf‘. Dos en la relativa a la propiedad ‘$Standard_Information‘ y una en la relativa a la propiedad de ‘$File_Name‘. ¿Cómo interpretamos esto? Hay que tener en cuenta que, con cada acción que se lleve a cabo en cada fichero, se actualizan las marcas de tiempo. De tal forma que, si se crea el fichero, la marca de tiempo que le corresponde es ‘MACB’. Pero si se renombra, la marca de tiempo se actualiza y pasa a ser, por un lado, ‘MA.B’ y por otro lado, ‘..C.’.

Es decir, un fichero siempre deberá contener las cuatro marcas de tiempo, en sus dos atributos.

Fichero ‘Marcos_N4rr34n6_FollowtheWhiteRabbit.rtf’

Creo un tercer fichero ‘.rtf‘, también desde el menú contextual, y le asigno el nombre de ‘Marcos_N4rr34n6_FollowtheWhiteRabbit.rtf‘. Como en el ejemplo del fichero anterior, primero estudio la información con ‘fte‘. Examino tanto su atributo ‘$Standard_Information

Como su atributo ‘$File_Name‘.

¿Has notado algo raro, diferente? En el primer ejemplo, el tipo de formato de fechas estaba representado por un formato ‘Filetime‘. En este caso el tipo de formato de fecha viene representado por ‘Unix(Posix)‘. Todo esto esto se corresponde al ‘System Time‘, que puede figurar en diversos formatos, con sus respectivas diferencias. Por ejemplo, el formato ‘Filetime‘ usa como base para fechar los ficheros el día 1 de enero de 1601, mientras que el formato ‘Unix(Posix)‘ usa como base para fechas los ficheros el día 1 de enero de 1970.

Igual que en el caso anterior, existe una diferencia de varios segundos en una de las marcas de tiempo, que se corresponde a la modificación del nombre del fichero.

Miro cómo es su nombre corto

Y su nombre largo, (hasta 255 caractares).

Genero su línea de tiempo con ‘TSK‘ y sus resultados son los mismos que en el caso anterior.

Fichero ‘FWHIBBIT.rtf’

Para terminar de ver, un poco, la creación de ficheros, se me ocurre una segunda manera de hacerlo. Y es desde la propia aplicación. Así pues, abro la aplicación de ‘Wordpad‘ y lo guardo, sin edición de ningún tipo, como ‘FWHIBBIT.rtf‘.

Parseo el fichero ‘MFT‘ con fte y estudio sus dos atributos: el correspondiente a ‘$Standard_Information

Y el correspondiente a ‘$File_Name

¿Qué es lo que podemos ver? Que hay dos referencias a ese fichero. Una se corresponde al propio fichero y otra se corresponde al enlace simbólico. Las marcas de tiempo parecen ser las mismas para cada atributo, pero existe una diferencia dada en milisegundos. ¿A qué se corresponde esto?

La diferencia de milisegundos existente en las marcas de tiempo del fichero ‘FWHIBBIT.rtf‘ viene dada por el proceso de guardado del fichero. Es decir, viene dada por el tiempo que tarda el sistema en guardar ese nuevo fichero. Así que se presentan varias marcas de tiempo, que se corresponden, en orden cronológico, a la creación, modificación y cambio de nombre:

El enlace simbólico ‘FWHIBBIT.lnk‘, dado que el fichero nuevo se encontraba abierto en el mismo momento de la acción de guardado, se genera, puesto que el sistema entiende que ha sido accedido. Por ello, crea un fichero, llamado también ‘Acceso directo‘.

Miro sus propiedades en un formato de nombre corto.

Y en un formato de nombre largo.

Hemos visto con fte que existen diferencias en las marcas de tiempo de este fichero, establecida en milisegundos. Sin embargo, ‘TSK‘ parece no poder reconocer esa diferencia, puesto que sólo presenta, para los dos ficheros que figuran, la misma marca con el mismo sello de tiempo2017-11-14 16:34:14 MACB.

Genero la línea temporal con ‘TSK

Se presentan dos ficheros, que corresponden al propio fichero creado y al enlace simbólico. Ambos ficheros presentan las dos propiedades de información de marcas de tiempo. ¿Por qué no he leído nada referente a los enlaces simbólicos? Los enlaces simbólicos, (accesos directos), son un fichero, y por lo tanto, deben tener sus propios atributos y sus propias marcas de tiempo.

Terminado este apartado de la creación de ficheros, en el que he querido explicar, brevemente, algunos matices que me han resultado interesantes a nivel informativo, es hora de jugar de verdad.

Desde aquí, me centraré únicamente en el fichero ‘FWHIBBIT.rtf‘, creado desde la propia aplicación de ‘Wordpad‘, y sólo estudiaré las líneas de tiempo generadas con ‘TSK‘, desechando todas las demás.

Jugando con los tiempos

He comentado anteriormente que se me ocurren 14 acciones que llevar a cabo con un fichero. ¿Cuáles son esas acciones?

  • 01 Guardarlo, (Crearlo), en el escritorio.
  • 02 Acceder al fichero, (Abrirlo).
  • 03 Modificar el fichero, (Editarlo).
  • 04 Renombrar el fichero.
  • 05 Copiar el fichero del Escritorio la carpeta Documentos.
  • 06 Mover el fichero de la carpeta Documentos a la carpeta Descargas.
  • 07 Enviar el fichero del Escritorio a la Papelera.
  • 08 Eliminar el fichero de la carpeta de Descargas, (Shift + Supr).
  • 09 Restaurar el fichero de la Papelera.
  • 10 Copiar el fichero del Escritorio a un dispositivo USB.
  • 11 Mover el fichero del Escritorio a un dispositivo USB.
  • 12 Copiar el fichero de un dispositivo USB al Escritorio.
  • 13 Mover el fichero de un dispositivo USB a la carpeta Descargas.
  • 14 Sobreescribir el fichero de la carpeta Descargas al Escritorio.

Voy a numerar cada una de las acciones por separado y resaltaré en un cuadro de color rojo las marcas de tiempo correspondientes al día en que la acción fue llevada a cabo.

Fichero creado en el Escritorio

Creo un fichero desde la aplicación de Wordpad y lo guardo en el Escritorio, el día 14 de noviembre de 2017, a las 17:34 horas.

Cuando se crea un fichero, se cree como se cree, y se trate del propio fichero de datos o del enlace simbólico, siempre aparecerá con la marca de tiempo de ‘MACBen los dos atributos que contienen esta información: $SI y $FN.

Si este fichero hubiera sido creado desde el menú contextual y no se hubiera renombrado, contendría, igualmente, la marca de tiempo ‘MACB‘, pero no habría referencias a su enlace simbólico.

Desde aquí, las marcas de tiempo sufrirán variaciones según llevemos a cabo una acción u otra.

Fichero abierto

Abro el fichero, sin editarlo, y lo vuelvo a cerrar, el día 15 de noviembre de 2017, a las 17:11 horas.

En este caso nos encontramos con que el fichero de texto no sufre variaciones en sus marcas de tiempo, en ninguno de sus atributos, pero el enlace simbólico presenta las marcas de tiempo de ‘MAC.‘, en los dos atributos de información. Esto quiere decir que ha sido abierto anteriormente y nos basta con localizar el atributo ‘…B‘ para saber su fecha de creación, que es la fecha de apertura del documento.

Aquí voy a hacer una aclaración. Cuando se accede, (se abre), por primera vez a un fichero, se crea, como he dicho anteriormente, un enlace simbólico que presentará la marca de ‘MACB, en ambos atributos. Desde ahí, si se vuelve a abrir, varía esa marca y se establece en ‘MAC.‘, también en ambos atributos, puesto que ese enlace ya está creado.

Fichero modificado

Abro el fichero y lo modifico el día 16 de noviembre de 2017, a las 17:58 horas.

En este caso se nos presenta que, el fichero de datos contiene la marca de ‘M.C.‘, en el atributo ‘$SI‘, y la del enlace simbólico continua en ‘MAC.‘, en sus dos atributos. Como la marca de tiempo que presenta este fichero de texto carece de ‘.A.B‘, la buscamos más arriba para averiguar cuándo fue creado, o bien podemos localizar las marcas referentes al atributo ‘$FN‘. Para saber cuándo fue abierto el fichero, buscamos la ‘…B‘ que nos falta en el enlace simbólico.

Fichero renombrado

Renombro el fichero de ‘FWHIBBIT.rtf‘ a ‘_FWHIBBIT.rtf‘, el día 17 de noviembre de 2017, a las 22:37 horas.

La marca de tiempo actual que presenta el fichero de datos es ‘..C.‘, en su atributo ‘$SI‘, con el nuevo nombre. Todas las referencias a ese fichero, salvo las del enlace simbólico, contendrán el nuevo nombre. Si vamos subiendo por las líneas de este fichero, nos encontramos con la marca ‘M…‘, cuando fue modificado, y la marca ‘.A.B‘, cuando fue creado. No existen cambios en el atributo ‘$FN y el enlace simbólico tampoco sufre variaciones.

Fichero copiado del Escritorio a Documentos

Copio el fichero ‘_FWHIBBIT.rtf‘, ubicado en el Escritorio, a la carpeta Documentos, el día 18 de noviembre de 2017, a las 18:04 horas.

En este caso nos encontramos con que el fichero de texto, en la ruta de destino, presenta dos modificaciones. Se aprecian las marcas ‘.ACB‘ en el atributo ‘$SI‘ y las marcas ‘MACB‘ en el atributo ‘$FN‘. También se aprecian las restantes marcas en las diferentes fechas y en las dos rutas, la de origen y la de destino.

Fichero movido de Documentos a Descargas

Muevo el fichero ‘_FWHIBBIT.rtf‘, ubicado en la carpeta Documentos, a la carpeta Descargas, el día 19 de noviembre, a las 22:15 horas.

Tan sólo se presenta una modificación en las marcas de tiempo del fichero de texto, en su atributo ‘$SI‘, que presenta ‘..C.‘, con la nueva ruta.

Fichero enviado del Escritorio a la papelera

Envío el fichero ‘_FWHIBBIT.rtf‘, ubicado en el Escritorio, a la Papelera, el día 20 de noviembre a las 17:50 horas.

Si buscamos en la línea de tiempo la fecha de esta acción podemos ver que no existe ningún tipo de cambio.

Fichero eliminado de Descargas

Para la ejecución de esta acción he tenido que cambiar de fichero, por un error cometido con el anterior, pero las acciones llevadas a cabo con todos los ficheros han sido las mismas, (Las pruebas las hice con cuatro ficheros). Es decir, que lo único que cambia es el nombre del fichero.

Elimino el fichero ‘_N4rr34n6.rtf‘, ubicado en la carpeta Descargas, mediante ‘Shift + Supr’, el día 21 de noviembre de 2017, a las 20:03 horas.

No figuran marcas de tiempo actuales, pero se nos presenta una línea, sin sello de tiempo y con la ruta del fichero eliminado, la marca ‘MACB‘ y ‘deleted.

Fichero restaurado de la papelera

Restauro el fichero ‘_FWHIBBIT.rtf‘, que fue enviado a la Papelera desde el Escritorio, a esa misma ruta, el día 22 de noviembre de 2017, a las 17:54 horas.

Se aprecia una nueva marca en el atributo ‘$SI‘ del fichero de texto, que presenta ‘..C.‘. No hay más cambios.

Fichero copiado del Escritorio a un dispositivo USB

Copio el fichero ‘FWHIBBIT.rtf‘, ubicado en el Escritorio, a un dispositivo externo, el día 23 de noviembre de 2017, a las 22:31 horas.

No existen cambios.

Fichero movido del Escritorio a un dispositivo USB

Muevo el fichero ‘FWHIBBIT.rtf‘, ubicado en el Escritorio, a un dispositivo externo, el día 24 de noviembre de 2017, a las 18:10 horas.

No existen cambios en las marcas de tiempo, pero nos encontramos con una referencia a ese mismo fichero, con su ruta, que nos dice que ha sido eliminado. Entonces, ¿Hay alguna forma de saber cuándo ha sido movido un fichero fuera del sistema? Sí, pero será objeto de otro capítulo.

Fichero copiado de un dispositivo USB al Escritorio

Copio el fichero ‘_FWHIBBIT.rtf‘, ubicado en una unidad externa, al Escritorio, el día 25 de noviembre de 2017, a las 16:45 horas.

En este caso nos encontramos con que el fichero de texto, presenta en su atributo ‘$SI‘, una nueva marca, ‘.ACB‘, y en su atributo ‘$FN‘, ‘MACB‘.

Fichero movido de un dispositivo USB a Descargas

Muevo el fichero ‘_FWHIBBIT.rtf‘, ubicado en una unidad externa, a la carpeta Descargas, el día 26 de noviembre de 2017, a las 19:54 horas.

Podemos ver que el fichero de texto presenta, en su atributo ‘$SI‘, las marcas ‘.A..‘ y ‘..C.‘, por separado. ¿Por qué? Por el tiempo que tarda el sistema en ubicar el fichero de una ruta a otra. También vemos que en su atributo ‘$FN‘ presenta las marcas ‘MACB‘.

Fichero sobreescrito de Descargas al Escritorio

Por último, la última acción que se me ocurre es la de sobreescribir el fichero ‘_FWHIBBIT.rtf‘, ubicado en la carpeta Descargas, por el ubicado en el Escritorio, el día 27 de noviembre de 2017, a las 22:51 horas.

En este caso, sólo observaremos un cambio en las marcas de tiempo, consistente en que el fichero de texto presenta, en su atributo ‘$SI‘, la marca ‘..C.‘.

No sé si en este apartado me he explicado bien o me he liado yo solo. Pero para algo están los resúmenes, en este caso, representado por una bonita tabla, llamada CheatSheet 😉

Mi propio CheatSheet

De esta forma tan sencilla puedes tener tu propio CheatSheet de marcas de tiempo. El mío lo presento así, resaltando en rojo las marcas correspondientes al día en que se llevó a cabo cada una de las acciones.

Tanto para un fichero creado desde el menú contextual

Como para un fichero generado a través de la propia aplicación

Y podré leer en cualquier sitio, cualquier otra cosa, pero esto es lo yo he hecho, esto es lo que yo he visto y esto es lo que me tengo que creer.

Con todo esto que hemos visto, y teniendo en cuenta que la marca más antigua que debe tener un fichero es la de su creación, ‘…B‘, ¿Serías capaz de decirme algo sobre esta imagen? 🙂

Conclusiones

Puesto que el Sistema graba en diversos archivos de registro y distintos artefactos todas las acciones que ocurren en él, y dado que todo en el sistema de ficheros ‘NTFS es un archivo, considero que se hace necesario ejecutar una línea temporal, siempre.

Una línea de tiempo no nos bastará para completar un análisis, pero es la mejor manera de ver que algo ha pasado, en un momento determinado, con un elemento en concreto. Por ello, siempre será una excelente hoja de referencia.

Es necesario conocer bien, tanto el sistema de ficheros que estamos analizando, como la herramienta que estemos usando. No todas funcionan igual y no todas nos arrojarán los mismos resultados. Hemos podido ver que ‘TSK’ no interpreta los milisegundos pero, sin embargo, ‘fte’ sí lo hace. Hemos podido ver que en esos milisegundos se han llevado a cabo distintas acciones. Sin embargo, es más complicado interpretar una acción con ‘fte’ que con ‘TSK’.

Igualmente, hay que tener en consideración los formatos de tiempo sobre los que trabaja cada una de las herramientas que usemos. No es lo mismo usar una herramienta que trabaja sobre la hora local del sistema que una que trabaja sobre el formato UTC. En un sólo minuto puede haber mucha actividad en el Sistema, tanto inculpatoria como exculpatoria.

También hemos podido ver que ‘AnalyzeMFT’ sólo interpreta el atributo ‘$FN’, mientras que ‘TSK’ y ‘fte’ interpretan los dos atributos, ‘$SI’ y ‘$FN’. Por ello es necesario la adecuada elección de la herramienta, dado que todo dependerá del caso a analizar.

Sobre las marcas de tiempo, lo primero que hay que saber es que, como puedes ver en mi propio CheatSheet, un fichero siempre deberá contener los cuatro elementos que las componen, (crTime, aTime, mTime y cTime), en sus dos atributos: ‘$SI’ y ‘$FN’. Tanto en los ficheros de datos como en los enlaces simbólicos, que son ficheros de igual forma, con sus respectivas marcas de tiempo en ambos atributos. Es decir, que no basta con basarse, únicamente, en las cuatro marcas por separado, puesto que se pueden relacionar para establecer qué tipo de acción se ha llevado a cabo.

Este punto es importante porque, encontrarnos con ausencia de marcas de tiempo,  o con diferencias entre los sellos de tiempo de los atributos ‘$SI’ y ‘$FN’, significa que algo ‘raro’ ha pasado, por lo que habría que centrarse en esos elementos. Igualmente, la acción más antigua que debe figurar en un fichero es la de su creación.

Es muy interesante fijarse y relacionar las distintas marcas, de las diferentes fechas, tanto entre los nombres de los ficheros de datos como de sus enlaces simbólicos. Pensamiento lateral.

No puedo dejar de recomendar que leas mi entrada anterior, dedicada a generación de las líneas de tiempo: Sobre las líneas de tiempo: El límite, tu imaginación

Como referencias a tener en cuenta, creo muy interesante llevar siempre encima las siguientes:

Poster_Windows_Forensics_2017_4.2

NTFS_CHEAT_SHEETS

 

 

PD: La vida se basa en la toma de decisiones. Ninguna decisión es fácil y unas duelen y cuestan más que otras. Hoy he tomado una decisión que me va a doler mucho. Pero las circunstancias son las que son y los tiempos tampoco los puedo cambiar. Algunas personas me han dicho que estoy desaprovechado, laboralmente hablando. Quizás tengan razón. No lo sé. ¿Por qué digo esto? Porque mis labores no tienen relación alguna con el mundo de la Ciberseguridad y me supone un handicap muy alto y un esfuerzo enorme seguir llevando este ritmo de vida. No puedo comprometerme a publicar nada con plazos. Por ello, probablemente está será, si no la última, una de las últimas entradas que escriba en Follow the White Rabbit. Seguiré estudiando y trabajando en mis pequeños proyectos, en mis ratillos libres, y, si estos conejos me dejan, publicando ese material cuando lo tenga listo.

¿Nos leeremos en la siguiente entrada? Marcos, @_N4rr34n6_