Incident Response, Security and Forensics"

.

martes, 24 de marzo de 2009

Detectando 'timestamp' (I)


Hola lectores,

Hablando con mis compañeros sobre hackers, troyanos y demás fauna vírica, nos surgío la duda de como el troyano 'conficker' es capaz de alterar (entre otras cosas) las propiedades de una carpeta o fichero.

Parece ser que este malware al igual que algunos hackers es capaz de modificar todos los atributos de un archivo o carpeta, como fechas de acceso, creación y escritura, con el objetivo de pasar desapercibido por parte del administrador o usuario del sistema infectado

De todas las cosas que este malware hace, hay una que me hizo pensar especialmente en una característica que tiene que ver en como funciona la estructura de disco y ficheros en windows.

TABLA MAESTRA DE FICHEROS - MTF

Por regla general los ficheros que se almacenan en disco con sistema de ficheros NTFS se registran en la tabla maestra de ficheros, comunmente conocida como MTF.

La MFT es, en esencia, una tabla de base de datos relacional, que contiene atributos sobre los diferentes archivos. Digamos que actúa como punto de inicio de un volumen NTFS - una especie de "tabla de contenidos". También sería análogo a la tabla de asignación de archivos en una partición FAT

Cuando cualquier archivo o directorio se crea en el volumen NTFS, se crea un registro dentro de la MFT.
El tamaño de cada registro en la MFT parece ser una cuestión de cierta controversia, por lo que yo he observado es que cada registro es igual al tamaño del clúster del volumen, siendo un mínimo de 1024 bytes y un máximo de 4096. Sin embargo, algunas fuentes dicen que el tamaño de cada MFT registro es fijo, ya sea en 1024 o 2048 bytes.

El sistema utiliza estos registros de MFT para almacenar información sobre el archivo o directorio, esta información es lo que entendemos como atributos.

Como no tengo ningún conficker (¡¡ ni lo quiero !!) me he propuesto ver si se puede saber si un fichero ha sido alterado en su atributo de fecha ( timestamp).

Para ello me he surtido de un conjunto de utilidades llamado 'FileOPS' (también se puede hacer con perl y powershell) que entre otras cosas permite cambiar el atributo de fechas de uno o varios ficheros, en la siguiente pantalla podemos ver como he modificado un fichero llamado 'CONFIDENCIAL.TXT y le he puesto que la fecha de acceso, modificación y creación pertenecen al 12 de febrero del 2010.

Por su puesto todas las operaciones que se realicen con este fichero tendrán como partida el año 2010, si un hacker o malware hubiera puesto las fechas de instalación del sistema operativo, hubiera pasado a simple vista desapercibido.

Para su comprobar el almacenamiento en el registro del MTF, voy abrir el disco con un editor hexadecimal, para ello voy a utilizar el programa 'HxD' que se puede descargar desde aquí (cualquier editor hexadecimal es valido).

Si nos fijamos en la siguiente pantalla y una vez posicionados en el $MTF (nombre reservado por windows para la tabla maestra de ficheros) vemos que la entrada 'a pelo' del fichero contiene la fecha original de cuando se creo, es decir el día 24 de Marzo de 2009, por lo tanto windows (MTF) si que almacena la fecha original del fichero, aunque por otro lado nos miente en su visualización.

Si esto mismo lo hacemos utilizando la herramienta forense por excelencia EnCase, vemos que en su lectura del MTF también detecta la fecha correcta y no la que se visualiza.

CONCLUSIONES

Como dijo una vez mi amigo Juanito (del diario de juanito), toda intrusión, todo roce, hasta un apreton de manos deja un rastro. En nuestro caso a Windows le ocurre lo mismo.

Al final realmente disponemos de las fechas originales en los registro MTF, el problema es que hay muy pocas herramientas forenses (de código abierto) que hagan una comparativa en un entorno 'vivo' o 'encendido'. Excepcionalmente este problema lo tiene solucionado las herramientas especificas y profesionales como EnCase que si se encargan de realizar este tipo de verificaciones.

En siguientes post veremos como automatizar este proceso y detectar las fechas originales de creación de un fichero. Para ello utilizaremos perl y PowerShell

6 comentarios:

Este comentario ha sido eliminado por el autor.

Hola Pedro

No entiendo una cosa. Se que en la entrada de la MFT correspondiente al fichero en cuestion se almacenan, tal y como dices, 4 timestamps, tanto dentro del atributo $STANDARD_INFORMATION como del atributo $FILE_NAME:

* Fecha de creacion del fichero
* Fecha de modificacion del fichero
* Fecha de ultimo acceso del fichero
* Fecha de modificacion de los metadatos del fichero

Pero tenia entendido que estos timestamps se almacenaban como el numero de milisegundos transcurridos desde el 1 de enero de 1601. Si esto es asi, ¿de donde sale el valor en texto claro que muestra el editor hexadecimal del ejemplo?

Saludos

Gracias por compartir voy a estudiar el tema para que te puede preguntar mas informacion del mismo la proxima vez que postees arigato un saludo

Javier: Como muy bien dices así es. Al editor HxD (versión profesional) puedes ponerle un filtro (mascara) que te lo traduzca, lo hice así para que fuera mas sencilla la visualización y la comprensión. En el disco duro esta realmente en milisegundos

Ahora me cuadra todo, ¡muchas gracias por la aclaracion!

Saludos

Buenas, como hago para crear una unidad de disco (virtual seria) en ntfs? muchas gracias.