Cyber FastTrack Spring 2020 – Forense

Los días 26 y 27 de marzo de 2020 se llevó a cabo el Cyber FastTrack Spring 2020 organizado por SANS, a continuación detallaré las soluciones a los retos de la categoría forense.

Parte 1: Sistema de Archivos y Registro de Windows

Archivo: files.allyourbases.co/fi03.zip

El archivo contiene la siguiente imagen forense:

Evidence.e01
SHA-1 d8205bb93858302f30a637047c32b74985ce1978

Montamos la imagen con herramientas como FTK, Autopsy o a través de la linea de comandos como explíco en esta entrada https://dvirus.training/2020/01/22/montaje-de-imagenes-forenses-cifradas-con-bitlocker/

sudo ewfmount Evidence.e01 /mnt/ewfimages/

Al ejecutar este comando tendremos el archivo ewf1 en la ruta /mnt/ewfimages

Los retos los resolví usando sleuthkit y algunas herramientas de la linea de comandos, sin embargo estaré alternando el uso de herramientas incluyendo autopsy para quienes no sean amantes de la linea de comandos.

FE10 (100 pts)

We need your help! We have captured this forensic image, but our analysts aren't sure if the hostname they captured is accurate. Could you review the image file and let us know what the hostname is so we can check it against our records.
Flag is lower-case

Este reto requiere identificar el nombre de la máquina, así que recurrimos al registro de Windows, puntualmente al archivo SYSTEM,

Sobre el archivo ewf1 generado previamente ejecutamos el comando ils con el fin de generar una linea de tiempo con los inodos correspondientes.

ils -m ewf1 -e > /home/dvirus/Escritorio/CTF/FORENSICS/FI03_E/lista_inodos.txt

Con este archivo puedo hacer búsquedas clave y usando el inodo recuperar el archivo con el comando icat. Buscamos el archivo SYSTEM.

mactime -b lista_inodos.txt  | grep SYSTEM

Tenemos el inodo 2459 el cual referencia al archivo SYSTEM, ejecutamos el comando icat y recuperamos el archivo.

icat -f ntfs ewf1 2459 > /home/dvirus//CTF/FORENSICS/FI03_E/Registry/SYSTEM

Ejecutamos regripper con el plugin compname

rip.pl -r /home/dvirus/CTF/FORENSICS/FI03_E/Registry/SYSTEM -p compname

El resultado nos arroja el nombre del equipo

flag: research-lab-42

Otra opción para leer el registro es la herramienta de windows Registry Explorer/RECmd

FM15 (250 pts)

A file was accessed from one of our file servers. We do not have any details at this point around which file it was, or which folder it came from as the logging level was not set to the correct verbosity. Please look through this file image and see if any files were downloaded from the intranet and then tell is the full UNC path, including filename.
E.g. \172.16.21.2\share\file.txt

Para resolver este reto debemos analizar que archivo ha sido descargado en el sistema, examinamos los usuarios existentes en el sistema, allí encontramos el usuario agency_worker_1337

Este perfil de usuario no tiene una carpeta de descargas o downloads por lo que procedemos a examinar el escritorio y mis documentos

En la ruta Users/agency_worker_1337/Documents/Work/Plutonium Rhombus/ encontramos varios archivos

Hay un archivo de tipo Zone.Identifier, este tipo de archivos es de tipo ADS (Alternate Data Stream) y es utilizado por Internet Explorer para almacenar las zonas de seguridad. Para más información https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/6e3f7352-d11c-4d76-8c39-2516a9df36e8

Al leer el contenido del archivo encontramos la siguiente información

Con base en esta información establecemos que el archivo descargado fue PR-Rocket.jpg.

flag: \192.168.16.18\internal_only\CEO\Private\PR-Rocket.jpg

FE12 (100 pts)

What is the Steam ID, referred to as Steam ID 3, of the user? The format should exclude the square brackets.

Este reto consiste en encontrar el Steam ID 3 del usuario, nunca he usado Steam así que tuve que investigar un poco..

Realizando una búsqueda en el sistema de archivos encontré el siguiente archivo de configuración

El archivo localconfig.vdf contiene la configuración local de Steam, allí encontramos el ID 1061053188

En ese momento pensé que esa era la bandera… pero no podía estar más equivocado, así que tuve que replantear la estrategia y encontré otro archivo llamado loginusers.vdf

Allí encontré otro ID

Este ID tampoco es la flag, sigo buscando en un montón de archivos sin tener éxito, así que hice lo obvio…

Al buscar en google aparecen varias plataformas en linea para identificar el Steam ID 3, obtuve el resultado esperado con el resultado #2 y #3

Colocó el ID 76561199021318916 en el formulario

La aplicación nos arroja la siguiente información sobre el usuario Jimmy Circles

flag: U:1:1061053188

FM18 (250 pts)

A Steam game was launched on Tuesday, 28 January 2020 10:04:19. What was the name of this game?
Flag is all lower-case

Para identificar que juego de Steam se ejecutó el 28 de enero recurrimos al análisis de Application Compatibility Cache o Shimcache, este artefacto forense es utilizado por Windows para identificar problemas de compatilidad al ejecutar una aplicación. Este artefacto se encuentra en SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache, así que analizaremos el archivo de registro SYSTEM para identificar la ejecución del juego.

Ejecutamos regripper con el plugin shimcache o appcompatcache

rip.pl -r /home/dvirus/CTF/FORENSICS/FI03_E/Registry/SYSTEM -p shimcache | grep Steam | grep "Jan 28" 
rip.pl -r /home/dvirus/CTF/FORENSICS/FI03_E/Registry/SYSTEM -p appcompatcache | grep Steam | grep "Jan 28"

Con cualquiera de los dos plugins obtenemos la siguiente información

Tambien podemos utilizar Registry Explorer para confirmar la ejecución del juego

flag: adventure capitalist

FM17 (250 pts)

We know the user set up a custom scheduled task, we need to know what application was being called. Could you investigate the image provided and let us know the entire command, including any arguments, that the task was due to call.

Nuestra misión es encontrar una tarea programada creada por el usuario, vamos a la ruta C/Windows/system32/Tasks/ y examinamos la tareas programadas

fls ewf1 -r -l -m "/" | grep Task | grep -v Microsoft | cut -d " " -f1 | cut -d "|" -f2 | sort | uniq 

Con el comando ejecutado buscamos las tareas, omitimos las que sean nativas de Microsoft y cortamos algunos campos para obtener solo el listado de las tareas personalizadas (custom)

Otra forma de hacer la búsqueda es a través de autopsy

Evaluamos las tareas, en primera instancia me llama la atención la tarea Not a CRON así que evaluamos su contenido.

Ejecuto nuevamente el comando fls para identificar el inodo de la tarea.

fls ewf1 -r -l -m "/" | grep Task | grep -v Microsoft | cut -d " " -f1 | cut -d "|" -f2,3,4,5 | sort | uniq

Obtenemos el inodo 152 así que procedemos a recuperar el archivo

icat -f ntfs ewf1 152 > /home/dvirus/CTF/FORENSICS/FI03_E/FM17/Not_a_CRON

Ejecutamos el comando file para determinar el tipo de archivo

file Not_a_CRON

El archivo es un XM en UTF-16

Ejecutamos el comando strings con la bandera –encoding=l para realizar la lectura en UTF-16

strings --encoding=l  Not_a_CRON

Al final del archivo encontramos la sección Command:

flag: z:\tools\nc.exe -l -p1337 -e c:\windows\system32\cmd.exe

FH10 (500 pts)

The user of this machine used a chat application they thought to be secure. While the conversations are encrypted, it appears certain information is leaked. Have a look at the leaky data and see if you can find anything that will give us a clue what they are up to.
Flag format will be: this_is_a_flag

Para inicar con este reto debemos identificar que aplicaciones de chat o mensajería estaban instaladas en el sistema podemos hacer una búsqueda por palabra clave o simplemente mirar en el registro de windows.

Hacemos la búsqueda a través de autopsy o a través de la línea de comandos, he optado por la línea de comandos usando fls

fls ewf1 -r -l -m "/" | grep -i chat --color

Obtenemos dos opciones Steam o Keybase

En la descripción del reto indican que las comunicaciones están cifrados así que me inclino por Keybase

La primera opción es ver la carpeta de adjuntos

Users/agency_worker_1337/AppData/Local/Keybase/attachments/, allí encontramos un archivo, sin embargo al descargarlo y analizarlo no muestra información útil. También se identifican varios archivos en formato json sin nada que nos aporte a la solución del reto.

Existe otra ruta con artefactos de keybase /Users/agency_worker_1337/AppData/Roaming/Keybase/

Dentro de la carpeta Cache se pueden observar algunas imagenes


Esta carpeta contiene varias imagenes así que las organizo por tamaño y comienzo a buscar las imagenes de mayor tamaño

Una de las imágenes tiene lo que parece un texto en rojo


Damos clic en View Full Size Image y encontramos un texto con el formato de la bandera

flag: show_me_the_money

Parte 2: Análisis de Memoria RAM

Para los retos de análisis de memoria RAM se utilizaba el archivo files.allyourbases.co/fi02.zip

Al descomprimir el archivo encontramos un dump de memoria.

memory-image.vmem 7ea854fc529c7517dedbdf0c287a3c4e2a7f3903

FH04 (500pts)

Take a look at the memory image provided and see if you can see what was written on Notepad while it was open on the user's screen.
Note: you may see an extra letter 'y' at the end of the string. The flag ends with a single 'y' not two.

Identificamos el perfil con volatility

volatility -f memory-image.vmem imageinfo

Utilizamos el primer perfil sugerido Win7SP1x64

Ejecutamos volatility con el perfil y la opción pslist para obtener los procesos del sistema y determinar el PID del proceso Notepad

volatility -f memory-image.vmem --profile=Win7SP1x64 pslist

Notepad se ejecutó con el PID 2740

creamos la carpeta dumped para alojar los resultados de la siguiente operación

mkdir dumped

Ejecutamos volatility con la opción memdump para volcar la información del proceso 2740

volatility -f memory-image.vmem --profile=Win7SP1x64 memdump -D dumped/ -p 2740

Al finalizar la ejecución obtendremos el archivo 2740.dmp

Ejecutamos strings sobre el archivo dmp junto con un filtro para encontrar la bandera

strings  2740.dmp  | grep flag --color

Obtenemos un par de resultados interesantes:

Sin embargo ninguna de estas opciones es nuestra bandera ya que en la descripción del reto decía que la cadena terminaba con doble “y”

Ejecutamos strings con cotificación UTF-16 y encontramos nuestra flag

strings  --encoding=l 2740.dmp  | grep flag --color

flag: noting_notes_in_a_noting_way

FH05 (500 pts)

The attacker created a shared folder on the victims machine. Find this folder and give us the absolute path of the directory, including drive letter.

Debemos encontrar una carpeta creada por el atacante, luego de pasar un rato con volatility y no encontrar la respuesta pienso en lo que haría para crear una carpeta en un sistema y se me ocurre probar con net share, así que acudo a strings.

strings memory-image.vmem | grep "net share"

Obtenemos la siguiente información:

flag: c:\recyc1e_bin

Parte 3: Análisis de Paquetes

Para este reto nos comparten el archivo files.allyourbases.co/fm11.zip

Al descomprimir el archivo obtenemos:

FM11.pcap bfb9833c9be03be8be71ac733d3d1701dd584194

FM11 (250 pts)

We have managed to execute a keylogger on a bad guys machine. We have the output of the logger, but our analysts have not been able to decode it. Please take a look to see if there is any usable data.

Al abrir la captura con Wireshark obtenemos lo siguiente:

El tráfico corresponde a un keylogger USB y debemos obtener el texto capturado por el atacante.

Ejecutamos Tshark y filtramos por tráfico de tipo usb

tshark -r FM11.pcap -Y usb

Una de las razones por las cuales uso Tshark y no Wireshark es que me permite procesar grandes cantidades de datos de forma rápida lo cuál es dificil lograr directamente con Wireshark.

Para analizar el tráfico debo conocer los filtros de visualización del tráfico usb https://www.wireshark.org/docs/dfref/u/usb.html

Encontraremos una buena cantidad de filtros, nos interesa usb.capdata la cual retorna una secuencia de bytes relacionadas con Leftover Capture Data

Ejecutamos tshark con el filtro y nos devolverá una secuencia de bytes.

tshark -r FM11.pcap -Y usb  -T fields -e usb.capdata

Este mismo patrón lo había visto en el libro Hands-On Network Forensics: Investigate network attacks and find evidence using common network forensic tools y allí referencian un script para convertir estos bytes en strings.

El script se encuentra en https://raw.githubusercontent.com/thalex/CTF-Write-ups/master/picoCTF-2017/for80-just_keyp_trying/usbkeymap2.py

Al inspeccionar el script encontramos que lee un archivo llamado data.pcap, entonces o renombramos el archivo de la captura o cambiamos el nombre en el script.

Ejecutamos el script y nos arroja un texto que contiene la bandera

flag: you_type_too_much

Deja un comentario