Solution de prae_gitlab pour Échec OP 1/3

forensics mémoire linux

8 décembre 2024

Préparation de l’environnement

fcsc.raw étant une image dump avec des partitions, nous allons la binder sur un loopback-device pour pouvoir le monter :

$ losetup -P /dev/loop0 fcsc.raw

$ fdisk -l /dev/loop0 | grep "^/dev/loop0"
/dev/loop0p1    2048     4095     2048    1M BIOS boot
/dev/loop0p2    4096  1861631  1857536  907M Linux filesystem
/dev/loop0p3 1861632 20969471 19107840  9,1G Linux filesystem

$ cryptsetup luksOpen /dev/loop0p3 rootfs
Enter passphrase for /dev/loop0p3: fcsc2022

$ mount /dev/dm-4 rootfs/

Happy birthday !

Pour obtenir la date de création, un petit stat sur le bon fichier ou répertoire. Ici, je ne vais pas rentrer dans le système de fichiers avec un chroot pour éviter de toucher au système de fichiers et ni exécuter des binaires à l’intérieur, je préfère effectuer le stat à l’extérieur directement sur le “/” virtuel.

# note: notre root est monté sur le répertoire rootfs/ :
$ stat rootfs/ | grep Birth
Birth: 2022-03-27 05:44:49.000000000 +0200

# %w = birthday
$ stat --printf "%w\n" rootfs/
2022-03-27 05:44:49.000000000 +0200

Si on veut une confirmation, on peut étendre la recherche :

$ stat --printf "%w\n" rootfs/ rootfs/* | sort
2022-03-27 05:44:49.000000000 +0200
2022-03-27 05:44:49.000000000 +0200
2022-03-27 05:44:50.412031155 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:44:51.332031125 +0200
2022-03-27 05:45:49.420029218 +0200

La date de 2022-03-27 05:44:49 est la plus ancienne et apparait au moins deux fois. Ou sinon avec debugfs sans avoir besoin de monter le système de fichiers :

$ debugfs /dev/dm-4
debugfs : stat /
Inode: 2   Type: directory    Mode:  0755   Flags: 0x80000
Generation: 0    Version: 0x00000000:00000019
User:     0   Group:     0   Project:     0   Size: 4096
File ACL: 0
Links: 19   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x623fde42:d69540ac -- Sun Mar 27 05:47:14 2022
 atime: 0x623fdec0:5ccbbd18 -- Sun Mar 27 05:49:20 2022
 mtime: 0x623fde42:d69540ac -- Sun Mar 27 05:47:14 2022
crtime: 0x623fddb1:00000000 -- Sun Mar 27 05:44:49 2022    <=== creation date
Size of extra inode fields: 32
Inode checksum: 0x6b547bcc
EXTENTS:
(0):9235
debugfs : quit

L’auteur indique en rouge qu’il faut la date UTC, on constate qu’avec notre +0200, la date indiquée est donc “zonée”. Il suffit de retrancher 2h dans la date de création, donc 03:44:49, notre flag sera donc :

FCSC{2022-03-27T03:44:49Z}