Saludos Bug Bu5t3r5!!
Hace un par de días
estaba leyendo un post en Hacking Exposed Computer Forensic Blog acerca de los artefactos de Windows, y algo que me llamo mucho la atención es
que David Cowen comentaba que cuando él está entrevistando a candidatos para
formar parte de su equipo se enfoca mucho en el entendimiento que tiene el
examinador de los artefactos de Windows y en la interpretación de la
información que puede obtener de ellos, una de las preguntas que más me llamo
la atención y de donde tome la idea para este post es: ¿Qué puedes determinar a
partir de un archivo LNK?
Mr. Cowen después explica que él puede medir el nivel de
expertise de un candidato en base a su respuesta, piensen en la pregunta y
respondan antes de ver lo que David considera como posibles respuestas y midan
en donde están, para esto me permitiré
traducir este fragmento del post de hacking exposed.
Respuesta de
principiante: Un LNK nos puede decir a que archivos o programas ha
accedido un usuario.
Respuesta intermedia:
Un LNK revela a que archivos o programas ha accedido un usuario y que ruta
tienen en la red y la MAC address del equipo.
Respuesta
Experimentada: Un LNK revela a que archivos o programas ha accedido un
usuario y que ruta tienen en la red y la MAC address del equipo, también
contiene timestamps del archivo y/o el programa que se está teniendo acceso el
cual representa al archivo en el momento en que fue accedido.
Respuesta Senior:
Un LNK revela a que archivos o programas ha accedido un usuario y que ruta
tienen en la red y la MAC address del equipo, también contiene timestamps del
archivo y/o el programa que se está teniendo acceso el cual representa al
archivo en el momento en que fue accedido. También contiene el serial del
dispositivo o volumen que puede ser utilizado para hacer match con el volumen
del cual proviene si no hay volumen nos puede decir la fuente de red de la que
proviene. Los archivos LNK también contienen elementos de Shell permitiendo así
al examinador determinar qué tipo de carpeta está siendo accedida (volumen/network/file/uri).
Respuesta de experto:
Un archivo de vinculo (lnk) contiene dos conjuntos de timestamps que son
relevantes para el examinador. El primer conjunto de MAC times pertenece al
mismo archivo lnk, nos revela por medio de la fecha de creación cuando fue
accedido el archivo por primera vez según lo registra el archivo lnk, la fecha
de modificación registra la última vez que el archivo lnk fue actualizado y debería reflejar el ultimo acceso exitoso. El
segundo conjunto de fechas se mantienen en el target al que el link file hace referencia y se puede erealizar la correlacion basados en el ultimo acceso exitoso al
archivo desde el lnk. Para poder
determinar estados previos del archivo es posible analizar los puntos de restauración
(WinXP), las volumen shadow copies (Win7) y hacer un carving de los archivos
lnk para encontrar otras versiones de este archivo lnk que también hagan
referencia al archivo en cuestión al serial del volumen o a los elementos de Shell.
Cada conjunto de MAC times que es actualizado representa otro acceso exitoso al
archivo a través del lnk y debe ser considerado como “en uso”.
Interesante no? Si se fijan la respuesta que daría un
experto no tiene nada que ver con cuestiones técnicas como la estructura
interna del archivo o los FO en que se encuentra cierta información que si bien
es importante no es tan importante como saber interpretar correcta y
puntualmente la información dada por el archivo. El leer esto me puso a pensar no
solo en qué respuesta hubiera dado yo si me hubieran preguntado antes de leer
el post sino también en como poder ver, obtener e interpretar esa información que nos haría dar
una respuesta de expertos. La única parte que no cubriré en este post será el análisis
de restore points y VSS ya que eso lo
dejaremos para otra ocasión.
Es cierto que los link files pueden residir en casi
cualquier carpeta del sistema sin embargo la ubicación principal para estos
archivos por lo general es %APPDATA% \Microsoft\Windows\Recent Items\<archivos
de vinculo> en donde %APPDATA% se traduce como C:\Users\<nombre
del usuario>\AppData\Roaming. Aquí es en donde el sistema operativo
de forma automática crea un shortcut basado en un usuario dando doble click a una
aplicación para ejecutarla y estos puede perdurar incluso cuando la aplicación original hjaya sido eliminada.
Como podemos ver a nivel sistema operativo parecería que
esta carpeta almacenara los archivos en sí, sin embargo datos como el tipo de los archivos y su tamaño delatan que realmente se tratan de archivos LNK ,
visto desde otra aplicación en este caso EnCase , podemos ver que todos son
archivos de vinculo. dentro de los archivos vistos en case pueden ver que hay algunos que apuntan hacia volumens, estos son LNK que fueron creados a partir de archivos que residian en medios extraibles.
Si tomamos uno de estos archivos LNK y lo mandamos a un
editor hexadecimal (yo estoy utilizando HxD) podremos empezar a identificar la información
que es relevante para nuestras investigaciones, ahora, yo sé que hay mucha más información
en los archivos LNK que la que voy a explicar sin embargo no es el objetivo de
este post explicar toda la estructura del archivo si quieren echarse un clavado
en el mundo de información que estos archivos contienen, pueden ver aquí y aquí
, son excelentes y aprenderán muchísimo de la estructura interna de los LNK.
Como se muestra la información encontrada en el archivo LNK
coincide con la información del disco.
Para este post usare un LNK de mi equipo llamado 01.jpg lo
primero que vemos es el encabezado del archivo el cual tiene un valor de
0x0000004C .
La siguiente información de relevancia para nosotros es el
primer conjunto de timestamps en el FO 28 por 8 bytes tenemos la fecha/fecha
hora de creación, los siguientes 8 bytes muestran la fecha/hora de ultimo
acceso y los siguientes 8 bytes muestran la fecha/hora de ultima escritura.
Para poder descifrar estas fechas/horas vamos a utilizar una
herramienta llamada DCode la pueden descargar gratis aquí, esta herramienta es increíblemente
sencilla de utilizar la única información que necesitan saber es el ADD Bias,
para la Cd. De México es UTC -5:00, necesitan conocer el formato que usaremos
para decodificar en este caso Windows:64 bit Hex Value en Little Endian y copiar el valor hexadecimal a decodificar,
listo.
Nuestra fecha/ hora de creación: AC 52 8C 9E 67 83 D0 01
Nuestra fecha/ hora de ultimo acceso: 0D B8 9D 9E 67 83 D0
01
Nuestra fecha/ hora de ultima escritura: 1D DF 9D 9E 67 83
D0 01
Al finalizar esta información en el FO 52 por 8 bytes tenemos
el tamaño del archivo, sin embargo este valor tiene que ser interpretado de
hexadecimal a Little Endian INT32 ,aquí podrán encontrar un convertidor en línea
muy útil, el valor resultante de esa conversión es el tamaño logico del archivo en
bytes en este caso 74297 bytes.
En ocasiones tendremos que verificar el tipo de disco en el
que el target para este LNK esta almacenado esta infomracion se encuentra 16 bytes antes del nombre del volumen del target en este caso es el FO 438 y tiene un valor de 03 00 00 00 por lo cual este LNK esta apuntando a un archivo que se encuentra en el disco duro.
Valor
|
Significado
|
DRIVE_UNKNOWN 0x00000000
|
El tipo de
disco no puede ser identificado.
|
DRIVE_NO_ROOT_DIR
0x00000001
|
La ruta principal
es inválida, por ejemplo, no hay ningún volumen montado en esa ruta.
|
DRIVE_REMOVABLE 0x00000002
|
Este disco es
removible, tal como un lector de tarjetas flash o un USB.
|
DRIVE_REMOTE 0x00000003
|
El disco es
fix media, es decir un disco duro.
|
DRIVE_CDROM 0x00000004
|
El disco es remoto
es decir se encuentra en la red.
|
DRIVE_RAMDISK
0x00000005
|
CD-ROM
|
DRIVE_RAMDISK
0x00000006
|
RAM disk
|
Seguida de esta información tenemos 4 bytes que nos ayudaran
a determinar el número de serie del
volumen en el que el target al que apunta este LNK está almacenado, este valor está
almacenado en orden inverso. Para un volumen NTFS este sería el equivalente del
valor corto del número de serie del volumen ya que el valor completo es de 8
bytes. Para nuestro ejemplo el valor original de los 4 bytes son 66 33 59 96 en
orden inverso seria 96 59 33 66 para verificar que esta información sea
correcta tenemos que ver el número de serie del volumen en este caso de C:\.
Usando EnCase vamos a verificar las fechas y horas del
target de este LNK aquí tenemos nuestro segundo set de timestamps, lo más
importante es poder hacer match entre la fecha de creación del LNK y el archivo
target, el archivo pudo desde entonces sufrir modificaciones y estas timestamps
no coincidir. Es posible encontrar otro tipo de discrepancias entre esta información
y la reflejada por el archivo LNK, los campos ya descritos de hora/fecha de modificación,
acceso y creación reflejan la información del archivo LNK, mientras que la de hora/fecha de modificación,
acceso y creación del target reflejan la información del archivo al cual el LNK
apunta por eso cuando copiamos un LNK den un sistema target a un archivo
offline para analizarlo, las fechas reflejaran la información de cuando fue
creado en el sistema offline, por eso es importante utilizar una herramienta
forense en lugar copiar/pegar al mover los archivos LNK.
Espero
este pequeño post haya sido de utilidad, ahora no solo saben que contestar
cuando alguien les pregunte que podemos determinar a partir de un LNK y no solo
saberlo sino también poder obtener esa información utilizando únicamente un
edito hexadecimal, es cierto que hay herramientas que nos dan esta información
y mucho más aquí pueden leerse un documento que habla de una herramienta
llamada lp.exe de TZWorks súper herramienta se las recomiendo, lamentablemente
no es gratis pero nos da muchísima información de los archivos de vinculo y nos
permite hacer muchas cosas más como hacer carving de un VSC. Échenle un ojo y
Happy Busting!