jueves, 30 de abril de 2015

Sumérgete en los archivos LNK nivel experto

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.

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:\.


 Como se muestra la información encontrada en el archivo LNK coincide con la información del disco. 

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!









lunes, 27 de abril de 2015

Respuestas del 2o BugQuiz

Saludos!

Aqui les ponemos las respuesta del Quiz ... esperamos que les haya gustado, lamentablemente no hubo ganadores :(
1.     De manera predeterminada ¿cuál es el tamaño de un registro de la $MFT?
R=  De manera predeterminada un registro de MFT es de 1024 bytes de longitud, si un archivo es lo suficientemente pequeño su contenido se almacena dentro del registro de la MFT justo a un lado de su metadata de otra forma, existirá un puntero indicando cuales clusters contienen la información

2.     Hablando de VSS ¿cuál es el porcentaje máximo del total de tamaño del que un volume shadow copy puede ocupar en Windows Vista y Win7?
R=  Las limitaciones de un VSS  de forma predeterminada  para WinVista es del 15% total del disco y para Win7 3-5%

3.     En el tweet que fue posteado el 04/02/15 se muestra la siguiente pantalla:

 Si bien los dos comandos indican la capacidad de la RAM, la información mostrada por systeminfo es menor a la que wmic muestra, explica ¿por qué?
R=   La discrepancia se puede entender de la siguiente manera: el comando Wmic muestra el total de la memoria RAM instalada en el sistema mientras que el comando systeminfo muestra la memoria usable que se calcula como Memoria Total menos la memoria reservada para el hardware.


4.     Explica que indicadores dan las siguientes pantallas de que este proceso es malicioso:


R=  En la imagen mostrada hay ciertos indicadores bastantes claros de que este proceso es malicioso, comenzado por el Parent Porcess (PSEXESVC.EXE) , para un svchost.exe el PP siempre debe ser services, cualquier otra cosa mostrada es un fuerte indicio de un proceso que deberíamos analizar con más calma, lo siguiente son los argumentos del svchost.exe, si este fuera un proceso legitimo debería estar acompañado de algo como svchost.exe –k netsvcs , también sería bueno verificar la hora de inicio de otros scvhost.exe usualmente todos arrancan en tiempos iguales, sin embargo no podemos definir esto desde estas pantallas y por último el Security ID del usuario desde el cual es llamado el svchost es de un usuario standard lo cual es altamente inusual para este tipo de procesos.

5.     Si quisiera montar una imagen E01 en Linux con la capacidad de ver los archivos de sistema (como la $MFT) y ver la estructura de los archivos como un usuario los vería normalmente en Windows ¿Qué comando o comandos utilizaría? 
R= Para obtener los resultados por lo general yo utilizo mount -o ro,loop,show_sys_files,streams_interface=windows /mnt/ewf/<nombre de la imagen raw>  /mnt/windows_mount  

·                     Show_sys_files: esta opción muestra los metafiles de los listados de directorios, es decir vamos a poder ver archivos utilizados para almacenar la estructura de NTFS o FAT que normalmente no estarían visibles por ejemplo la $MFT.
·                     Streams_interface=windows: esta opción controla como el usuario puede acceder a Alternate Data Streams (ADS) al utilizar la opción=Windows les va a permitir visualizar los archivos como comúnmente se verían en Windows.

6. ¿Cuál es la mejor manera de saber si un archivo ".exe" fue ejecutado? (Considere que pudo haber técnicas antiforense) ¿Dónde buscaría, o que comandos ejecutaria?...La respuesta más ingeniosa y completa gana esta pregunta extra
para esta pregunta no habia una respuesta exacta por lo cual no podemos poner la respuesta correcta