Sommaire
Une bonne histoire…
Un bon article commence souvent par une bonne histoire. Notre histoire parle d’un petit malin et de sa bande, CabinCr3w, qui ont cru bon d’aller pirater des sites Internet de forces de l’ordre aux États‐Unis. Le tout, afin de laisser fuiter des informations personnelles (identité, adresses et numéros de téléphones) de policiers, mais également de défigurer le site afin de signer leurs forfaits, avec une image d’une femme ne montrant que le haut de son bikini, sous lequel on peut lire « PwNd by w0rmer & CabinCr3w <3 u BiTch’s! ».
Le souci pour nos larrons, c’est que la police a regardé les métadonnées contenues dans la photo, prise avec un iPhone, et y a trouvé des coordonnées GPS, lui permettant d’aller rendre visite au domicile de la femme et d’attraper le malandrin, qui est maintenant en prison.
Historique
La plupart des fichiers contiennent des métadonnées : images, vidéos, documents bureautiques, torrents, audio, etc., et parfois, on aimerait bien que ça ne soit pas le cas.
C’est pourquoi le projet Tails a proposé à un étudiant, dans le cadre du Google Summer of Code 2011, d’écrire un outil permettant de « nettoyer » les fichiers de leurs métadonnées. Le GSoC a été une réussite, donnant naissance au logiciel MAT, pour Metadata Anonymisation Toolkit, empaqueté dans Debian, présent dans Tails, maintenu et utilisé… jusqu’en octobre 2016, où il a été annoncé la fin de sa maintenance.
Mais en juin 2018 est apparu mat2, le sujet de cet article !
mat2 ?
Écrit en Python 3, utilisant des outils d’analyse statique comme mypy et pylint, et avec une couverture de tests unitaires de 100 %, mat2 est résolument mieux codé et plus robuste que son ancêtre. Tout comme lui, il est disponible sous licence LGPL v3, prend en charge un grand nombre de formats de fichiers (audio, vidéo, bureautique, images, torrent…) et s’échine à en ôter un maximum de métadonnées.
Le format PDF
Par exemple, prenons le format PDF. Avec ses spécifications à rallonge, c’est une horreur à gérer : il est possible d’y embarquer du JavaScript, des images, des vidéos, des rendus 3D, de compresser les données, d’en chiffrer d’autres… C’est pour ça que mat2 utilise Cairo et Poppler, afin d’effectuer un rendu, page par page, du fichier PDF, sur une surface PNG, pour ensuite rassembler le tout, dans un nouveau fichier. Ainsi, plus aucune métadonnée ne sera présente dans le fichier de sortie. Le côté négatif, c’est qu’il n’est plus possible de sélectionner du texte, le PDF étant maintenant composé d’images. Mais mat2 fournit un mode de nettoyage plus léger, pouvant laisser des métadonnées, mais permettant de sélectionner du texte.
Le format OOXML
Un autre exemple serait le format Office Open XML de Microsoft, qui est également un enfer à part entière : bien qu’il y ait le terme Open dedans, personne (pas même Microsoft, dans sa suite Office) ne l’implémente dans sa version stricte. Il s’agit d’un gros tas de fichiers XML, entassés dans une archive ZIP, avec plein de balises, d’attributs, de paramètres, de fichiers, et d’options dans tous les sens, pouvant embarquer une quantité invraisemblable de formats de fichier différents : images, audio, vidéo, polices…
Dans ce cas‐ci, mat2 ne peut pas tricher en demandant à une bibliothèque de faire le rendu pour lui, donc, tout est géré à la main :
- certains fichiers sont supprimés de manière systématique, comme par exemple
word/people.xml
;
- certains attributs et balises, comme les rsid, sont supprimés ;
- les attributs XML sont ordonnés lexicographiquement, car les différents outils permettant de consulter des OOXML (MS Office, Abiword, LibreOffice, OpenOffice…) ont tendance à les écrire dans un ordre bien spécifique ;
- les fichiers sont eux aussi ordonnés lexicographiquement dans l’archive ZIP, pour la même raison que ci‐dessus ;
- certains fichiers sont conservés ou supprimés suivant leur type MIME interne, comme défini dans un des fichiers de l’archive faisant office de dictionnaire ;
- les révisions sont supprimées ;
- les métadonnées propres au format ZIP sont également supprimées ;
- certains fichiers ne peuvent pas être supprimés, et doivent contenir du XML valide, pour éviter que la suite Office de Microsoft n’affiche un avertissement lors de l’ouverture du document, ils sont donc réécrits pour ne contenir que le strict minimum.
Le reste
Les fichiers torrents utilisent le format Bencode, pour lequel il est plus facile d’écrire son propre analyseur XML plutôt que d’en utiliser un déjà disponible en Python 3. Les fichiers audio sont gérés par la ô combien formidable bibliothèque mutagen, et les images via GDK-PixBuf.
Interface utilisateur
Pour les personnes habituées à la ligne de commande, mat2 propose… une interface en ligne de commande. Mais mat2 est avant tout écrit pour les « gens normaux ». Après le succès mitigé des multiples réécritures d’interfaces graphiques pour la première itération de mat (les seules personnes en ayant dit du bien étaient des personnes malvoyantes), mat2 propose une extension à Fichiers (anciennement Nautilus), le gestionnaire de fichiers du projet GNOME : il suffit maintenant d’un simple clic droit, puis nettoyer, pour supprimer les métadonnées des fichiers sélectionnés !
La suite ?
Pour la suite, il est probable que d’autres gestionnaires de fichiers bénéficient d’une extension, et que d’autres formats de fichiers soient ajoutés, comme les vidéos ou encore les archives. Les formats de fichiers sont également régulièrement passés au crible, afin de voir s’il subsiste des métadonnées.