La plupart des formats de fichier commencent par quelques octets fixes, une signature de fichier ou nombre magique, qui identifient le format indépendamment du nom du fichier. Les systèmes d'exploitation et les programmes utilisent l'extension comme indice, mais la signature est ce que le fichier est réellement. C'est le fondement de la détection du type de fichier, de la validation des envois, de la récupération de données et du carving en investigation numérique. Inspectez les octets de n'importe quel fichier avec Analyse Forensique Binaire et d'Archives.
Signatures courantes
| Format | Signature (hex) | En texte | Décalage |
|---|---|---|---|
| Image PNG | 89 50 4E 47 0D 0A 1A 0A |
.PNG.... |
0 |
| Image JPEG | FF D8 FF |
... |
0 |
| Image GIF | 47 49 46 38 |
GIF8 |
0 |
| Image WebP | 52 49 46 46 .. .. .. .. 57 45 42 50 |
RIFF....WEBP |
0 |
| Image BMP | 42 4D |
BM |
0 |
| Image TIFF | 49 49 2A 00 (or 4D 4D 00 2A) |
II*. |
0 |
| Document PDF | 25 50 44 46 2D |
%PDF- |
0 |
| Archive ZIP (aussi DOCX, XLSX, JAR, APK) | 50 4B 03 04 |
PK.. |
0 |
| Fichier gzip | 1F 8B |
.. |
0 |
| Archive TAR | 75 73 74 61 72 |
ustar |
257 |
| Base de données SQLite | 53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00 |
SQLite format 3. |
0 |
| Exécutable ELF (Linux) | 7F 45 4C 46 |
.ELF |
0 |
| Exécutable Windows (EXE, DLL) | 4D 5A |
MZ |
0 |
| Archive 7-Zip | 37 7A BC AF 27 1C |
7z.... |
0 |
| Archive RAR | 52 61 72 21 1A 07 |
Rar!.. |
0 |
| Anciens fichiers Office (DOC, XLS) et MSI | D0 CF 11 E0 A1 B1 1A E1 |
........ |
0 |
| Audio MP3 avec balise ID3 | 49 44 33 |
ID3 |
0 |
| Vidéo MP4 / MOV | .. .. .. .. 66 74 79 70 |
....ftyp |
0 |
Les douze premières lignes ont été vérifiées en créant de vrais fichiers et en lisant leurs premiers octets, et les plus courantes ont été confirmées par l'outil file du système. Quelques formats placent le marqueur plus loin dans le fichier : le ustar de TAR est à l'octet 257 et MP4 a ftyp à l'octet 4.
Pourquoi les extensions ne suffisent pas
L'extension ne fait que partie du nom : n'importe qui peut la changer. Un programme renommé vacances.jpg reste un programme, et un PNG renommé .jpg reste un PNG : la plupart des visionneuses d'images le détectent par la signature et l'ouvrent quand même.
Où les signatures comptent
- Contrôle des envois de fichiers. Valider l'extension ou le
Content-Typeenvoyé par le navigateur ne suffit pas, car les deux sont contrôlés par l'attaquant. Comparez les premiers octets à la signature attendue et ré-encodez les images quand c'est possible. Voyez Aide-mémoire des types MIME. - Récupération de données et carving. Des outils parcourent l'espace disque brut à la recherche de signatures connues pour reconstruire des fichiers supprimés, même quand le système de fichiers ne les liste plus.
- Investigation numérique. Un écart entre extension et signature est un signal d'alerte classique ; les outils Analyse Forensique de Documents et Analyse Forensique d'Images regardent la vraie structure, pas seulement l'étiquette.
- Antivirus et passerelles de messagerie utilisent les signatures pour décider comment décompresser et analyser les pièces jointes.
Les conteneurs cachent ce qu'ils renferment
Un DOCX, XLSX, PPTX, JAR et APK sont tous des fichiers ZIP avec une organisation particulière : ils commencent donc par 50 4B 03 04 comme n'importe quelle archive. De même, les anciens DOC et XLS partagent une même signature de conteneur OLE. La signature indique le conteneur ; il faut regarder dedans pour connaître le vrai type.
Limites
- Les signatures sont courtes : un fichier peut commencer par une signature valide et contenir autre chose. Un fichier polyglotte est volontairement valide comme deux formats à la fois.
- Certains formats n'ont pas de signature (texte brut, CSV, audio brut) et doivent être reconnus à leur contenu.
- Les données en fin de fichier après la fin d'un fichier valide sont fréquentes dans les fichiers falsifiés ou concaténés, et une vérification de signature au début ne les verra pas.
À voir aussi : Octets magiques (magic bytes), Hexadécimal et Les bases de numération : binaire, octal et hexadécimal.