mat2 0.4.0

mat2 est la nouvelle itération du défunt MAT, une suite logicielle pour nettoyer les métadonnées d’une multitude de formats de fichiers.

La récente sortie de la version 0.4.0 (3 octobre 2018) est l’occasion de faire découvrir ce projet, en deuxième partie de dépêche.

Logo de mat2

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 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, torrent, audio, … et parfois, on aimerait bien que ça ne soit pas le cas.

C’est pourquoi le projet Tails a proposé, dans le cadre du Google Summer of Code 2011 à un étudiant d’écrire un outil permettant de nettoyer les fichiers de leurs metadonnées. Le GSoC a été une réussite, donnant naissance au logiciel MAT, pour Metadata Anonymisation Toolkit, packagé 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 Python3, 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 son ancêtre, il est disponible sous licence LGPLv3, supporte un grand nombre de formats de fichiers (audio, video, 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 de faire 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 coté 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 tags, paramètres, attributs, fichiers, options dans tous les sens, pouvant embarquer une quantité invraisemblable de formats de fichiers 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 parseur plutôt que d’en utiliser un déjà disponible en Python3. Les fichiers audios sont gérés par la ô combien formidable bibliothèque mutagen, et les images via gdkPixBuf.

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 à Files (anciennement Nautilus), le gestionnaire de fichiers du projet GNOME : il suffit maintenant d’un simple clic-droit → nettoyer pour supprimer les métadonnées des fichiers sélectionnés !

Exemple d'utilisation de l'extension pour Nautilus

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.

Commentaires :
voir le flux atom
ouvrir dans le navigateur

(Source: LinuxFr.org : les dépêches)
Logo