Sorry, this entry is only available in European Spanish. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Este post ha sido escrito por: Jose Manuel Martinez CarrionTwitter: @JoseManu_94
Buenas a tod@s, lo primero de todo dar gracias a ironHackers por ofrecerme la oportunidad de aportar contenido en su blog, en este caso mostraremos como es la resolución del reto no. 7 de la fase online del CTF realizado para la CyberCamp 2018.

Enunciado

Por orden de un juez, se ha intervenido un equipo en casa de un sospechoso ciberdelincuente, por suerte su portátil aún se encontraba encendido cuando se produjo la detención. Se sabe que ha intentado eliminar pruebas, pero creemos que aún es posible obtener alguna. ¿Cuál era su nick en la red? (Respuesta: flag{NICK}).
Ficheros: dump.elf y volume.bin
Aquí teneis un enlace para poder descargaros los retos y probarlo vosotros mismos: RetosCyberCamp2018.zip

Solución

Tras descargar el archivo del reto y descomprimirlo nos encontramos con dos archivos, un archivo que contiene el volcado de memoria del sistema y el otro es una imagen de disco en binario (asumimos su contenido por los nombres de los archivos, podemos comprobarlo mediante strings):

Primero analizaremos que es el archivo .bin, para ello utilizaremos strings y vemos las primeras 4 lineas de la salida:

Nos encontramos con la imagen de un disco que tiene un cifrado LUKS mediante cbc-essiv:sha256, por lo que no se ve factible intentar obtener la clave mediante fuerza bruta.
Primero para montar la imagen utilizamos “kpartx”, esta herramienta nos permite montar una imagen de disco de forma sencilla:

sudo kpartx -a -v volume.bin

La salida de la orden anterior nos dice que la unidad fue mapeada a loop0p1. Una vez montada la partición en el sistema utilizamos cryptsetup para obtener información sobre el
cifrado de la unidad de disco:

Como podemos visualizar en la imagen, la clave maestra de la unidad cifrada es de 128 bits, y es una clave AES. Dado que el otro archivo con el que contamos es el volcado de la memoria de la máquina del sospechoso, si este en el momento del volcado tenía abierto el sistema cifrado o configurado su automontaje es posible obtener la clave maestra.
Para intentar obtener la clave maestra utilizamos findaes
(https://sourceforge.net/projects/findaes/), este software nos permite obtener las claves AES contenidas dentro de un archivo.
Tras compilar el software, lo ejecutamos sobre el archivo que contiene el volcado de la memoria del dispositivo del sospechoso:

En los datos generados por la ejecución de findaes, se muestra que hay una clave AES de 128 bits (84 bc d9 8c fc f2 de db 26 06 35 bf ca a9 a4 7d), esa clave es la clave maestra del disco cifrado
mediante LUKS. Para poder utilizarla necesitamos convertir la clave en hexadecimal a binario, para ello utilizamos “xxd”

echo "84 bc d9 8c fc f2 de db 26 06 35 bf ca a9 a4 7d" | xxd -r -p > keyCon 

la clave maestra ya en nuestras manos podemos descifrar la unidad de disco, para ello utilizamos de nuevo “cryptsetup” , mapeando la unidad descifrada con otro nombre, en este caso vamos a llamrlo bHDD:

sudo cryptsetup --master-key-file key luksOpen /dev/mapper/loop0p1 bHDD

Con la unidad ya descifrada podemos visualizar cual es realmente el formato de la partición, en este caso es una partición FAT32:

Tras montar la unidad y mirar su contenido, esta vacía, al parecer han borrado su contenido:

mount /dev/mapper/bHDD /mnt


Si su contenido no ha sido sobreescrito será posible recuperarlo, para ello podemos utilizar distintas herramientas, en nuestro caso utilizaremos “testdisk”.

Dado que es una partición y no un disco completo, establecemos que no hay tabla de particiones:

Utilizaremos las herramientas para sistemas de ficheros:

En este caso testdisk no nos ha reconocido el tipo de partición de forma automática, tendremos que establecerlo manualmente:

Habiendo establecido en testdisk el formato de la partición con la que estamos trabajando, seleccionamos la opción undelete para buscar archivos eliminados dentro de la unidad:

Y encontramos que hay un zip que fue borrado de la unidad, copiamos el zip a nuestro disco duro para trabajar sobre el.

Al intentar extraer el contenido del zip nos solicita una contraseña, probaremos la palabra iloveyou contenida en el nombre del propio archivo, la cual resulta si ser la clave que buscábamos:


Dado que lo que se nos solicita es el nick que utilizaba el sospechoso en la red, podemos asumir que este es _z3r0.c00l!_, con ello ya tenemos la solución del reto:

flag{_z3r0.c00l!_}
¿Me ayudas a compatirlo?