Le fichier qui a gardé son nom : ce que mémorise un en-tête gzip
Le défi
Un intrus a fait sortir un fichier blob.dat. Identifie le format, puis lis son en-tête. Nomme le fichier réellement volé.
Ce que tu vas apprendre
- Identifier des données gzip grâce au nombre magique 1F 8B
- Décoder les champs de l'en-tête gzip : CM, FLG, MTIME, XFL et OS
- Lire une chaîne terminée par NUL dans un hex dump
- Expliquer pourquoi renommer un fichier ne change pas son contenu
Compétences testées
Prérequis
- Lire de l'hexadécimal
- Ce qu'est une extension de fichier
Comment ça marche
Le nom et l'extension d'un fichier sont des étiquettes tenues par le système de fichiers : ce sont les octets à l'intérieur qui décident de sa vraie nature. La plupart des formats commencent par une signature fixe, et celle de gzip est 1F 8B.
Après la signature, un en-tête gzip (RFC 1952) fait dix octets : CM (08, deflate), FLG, un MTIME de quatre octets en little-endian, XFL et OS. Chaque bit de FLG annonce un champ optionnel qui suit. La commande gzip active 08 (FNAME) par défaut et enregistre le nom du fichier compressé, en texte clair terminé par un octet 00, avec la date de modification de ce fichier.
Renommer ensuite le .gz ne change que l'étiquette extérieure. Le nom d'origine reste le premier texte lisible du fichier, ce que file affiche justement sous la forme was "...".
Erreurs fréquentes
- Répondre blob.dat. C'est le nom que l'intrus a donné à l'archive, celui que tout le monde utilise depuis le début. La question porte sur ce qu'il y avait dedans.
- Répondre gzip. C'est le format, la première étape. Le but est le nom du fichier volé.
- Ne copier qu'une seule ligne. Le nom commence à l'offset
0x0A, vers la fin de la première ligne, et se poursuit sur la seconde ;l_2026-10.csvseul n'en est que la moitié. - Lire au-delà de l'octet 00. Le nom s'arrête au premier
00; les octets suivants sont des données compressées, et les lettres qu'on y trouve sont un hasard. - Prendre MTIME pour l'heure du vol. C'est la dernière modification du fichier source, le 30 oct., et non le moment où il a été copié vers l'extérieur.
Comment s'en protéger
- Inspecte les envois sortants selon leur contenu (magic bytes), pas selon leur nom ou leur extension, et signale les archives compressées envoyées vers des destinations inconnues.
- Lance
fileou un scanner de signatures sur chaque blob trouvé dans un dossier de staging pendant un incident : il retrouve noms et dates en quelques secondes et permet de cerner ce qui a été pris. - Garde les exports sensibles, comme la paie, dans des emplacements à accès contrôlé, avec des alertes sur les lectures en masse, pour qu'un seul compte compromis ne puisse pas les atteindre.
- Rappelle-toi que le champ est optionnel :
gzip -nomet le nom et la date, donc l'absence de FNAME ne prouve rien.