ZIP déguisé : lire les magic bytes d'un fichier plutôt que son extension
Le défi
Un analyste a récupéré report.pdf sur le portable d'un suspect, mais il ne s'ouvre jamais dans un lecteur PDF. Ouvrez-le dans la visionneuse hexadécimale, comparez les premiers octets aux signatures de référence, et indiquez le vrai format de conteneur.
Ce que tu vas apprendre
- Lire les premiers octets d'un fichier dans une visionneuse hexadécimale et reconnaître une signature de fichier connue
- Associer la signature 50 4B 03 04 ('PK') à la famille des conteneurs ZIP
- Expliquer pourquoi l'extension d'un fichier n'est que des métadonnées alors que les magic bytes font foi
- Reconnaître que les documents Office et les APK sont en réalité des conteneurs ZIP
- Écarter les hypothèses PDF, RAR et 7-Zip en comparant leurs signatures d'en-tête distinctes
Compétences testées
Prérequis
- Aisance dans la lecture de valeurs d'octets hexadécimales
- Savoir qu'une extension de fichier peut être modifiée librement sans altérer le contenu
Comment ça marche
Chaque format de fichier courant commence par une séquence fixe d'octets appelée nombre magique ou signature. Le système d'exploitation et la plupart des visionneuses, en revanche, décident de l'application à lancer en se basant sur l'extension du fichier, une métadonnée du nom que n'importe quel utilisateur peut modifier en une seconde. C'est cet écart que ce challenge exploite : un fichier nommé report.pdf dont le contenu réel n'est pas du tout un PDF.
Un vrai PDF commence par les octets ASCII 25 50 44 46, qui forment %PDF. Le fichier que vous avez sous les yeux commence quant à lui par 50 4B 03 04. Les deux premiers octets, 50 4B, sont l'ASCII PK, les initiales de Phil Katz, créateur du format ZIP, et 03 04 est le marqueur d'en-tête de fichier local. Cette séquence de quatre octets est la signature caractéristique d'une archive ZIP.
Cela va bien au-delà des fichiers renommés. Les documents Office modernes (.docx, .xlsx, .pptx), les JAR Java et les APK Android sont tous des conteneurs ZIP portant une extension différente. Un défenseur qui se fie à l'extension va mal trier chacun d'entre eux. Le réflexe fiable est toujours le même : ouvrir l'en-tête et lire les magic bytes.
Erreurs fréquentes
- Faire confiance à l'extension. Supposer que
report.pdfest un PDF parce que le nom le dit. Le nom est une métadonnée ; les octets sont le fichier. - Mal interpréter 50 4B en pensant que 'PK est illisible'. Passer à côté de la colonne ASCII où
50 4Bs'affiche clairement commePK, l'indice révélateur de la famille ZIP. - Confondre ZIP avec RAR ou 7-Zip. RAR commence par
52 61 72 21('Rar!') et 7-Zip par37 7A BC AF; seul50 4B 03 04correspond au ZIP. - S'arrêter à 'c'est une archive'. La consigne demande le format de conteneur précis, et la signature n'en désigne qu'un seul : ZIP.
Comment s'en protéger
La détection et le triage doivent se baser sur le contenu, pas sur le nom des fichiers, et tout fichier téléversé doit être validé selon son type réel avant d'être stocké ou traité.
- Utilisez un identifiant basé sur le contenu (une vérification de type libmagic) sur chaque fichier téléversé ou mis en quarantaine, plutôt que sur son extension.
- Pour une liste blanche de téléversement, vérifiez que les magic bytes correspondent au type déclaré et rejetez les incohérences, car dissimuler un ZIP en PDF est une technique de contrebande classique.
- Traitez toute signature de la famille ZIP (
50 4B 03 04) portant une extension non liée à une archive comme suspecte et faites-la analyser plus en profondeur. - Lors de la décompression d'archives inconnues, faites-le dans un bac à sable et prémunissez-vous contre le path traversal (Zip Slip) au sein des entrées.