mat2 0.4.0

72
11
oct.
2018
Sécurité

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 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 !

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.

Aller plus loin

  • # Exiftool

    Posté par  (site web personnel) . Évalué à 8. Dernière modification le 11 octobre 2018 à 11:02.

    Salute,

    Merci pour l'article. J'utilise Exiftool uniquement (requirements de mat2), je m'en sers uniquement sur des photos/vidéos.

    Concernant le clic droit, j'utilise caja-actions avec exiftool -all= %F -overwrite_original.

    Tcho !

    • [^] # Re: Exiftool

      Posté par  . Évalué à 1.

      Je me sers également d'Exiftool. Il a l'avantage de ne pas créer de fichiers supplémentaires, ce qui, sauf erreur de ma part, n'est pas le cas de Mat2

      Note that MAT2 will not clean files in-place, but will produce, for
      example, with a file named "myfile.png" a cleaned version named
      "myfile.cleaned.png"

      Poster une information ne signifie pas nécessairement adhésion

      • [^] # Re: Exiftool

        Posté par  (site web personnel) . Évalué à 5.

        Oui, c'est voulu, parce que c'est la manière la plus simple de gérer les cas où le nettoyage se passe mal; par exemple si le fichier est corrompu. Il ne faut pas oublier que mat2 s'utilise également au travers d'un extension Nautilus: un "clic-droit, nettoyer" sur un dossier contenant toutes les photos de 2018 est vite arrivé, et ça devient une galère sans nom de faire comprendre à l'utilisateur ou l'utilisatrice quels fichiers n'ont pas été nettoyés. Avec une copie, c'est plus évident, même si effectivement, dans un monde parfait, il n'y aurait pas besoin de faire ça.

        Ho, et certains nettoyages peuvent engendrer une perte de qualité; le fait que mat2 fasse une copie me permet d'éviter (ou du moins de réduire) la quantité de mails d'insultes que je reçois ;)

  • # Installer

    Posté par  . Évalué à 1.

    Comment l'installer sur Linux Mint ?

    arnauld

  • # ACAB?

    Posté par  . Évalué à -2.

    Le site officiel est hébergé sur un nom de domaine peu commun: 0xacab.org. Le « ACAB » (All Cops Are Bastard, notons), qui j'imagine est volontaire, me dérange personnellement: j'interprète ça comme de l'incitation à la haine. On s'éloigne bien évidemment de la technique avec ce commentaire, toutes mes excuses à ce propos, mais le logiciel Libre, c'est aussi (avant tout?) de la politique.

    • [^] # Re: ACAB?

      Posté par  (site web personnel) . Évalué à 2.

      Le « ACAB » (All Cops Are Bastard, notons), qui j'imagine est volontaire

      Source ?

    • [^] # Re: ACAB?

      Posté par  . Évalué à 10.

      C'est marqué dessus: All Codes Are Beautiful

      • [^] # Re: ACAB?

        Posté par  (site web personnel) . Évalué à 10. Dernière modification le 11 octobre 2018 à 18:09.

        All [Copylefts, Crashes, CRLFS, Cyberpunks, Characters, Case mods, Codes] Are Beautiful pour être précis, et j'ajouterais le fameux All Cats Are Beautiful.

        Mais d’un autre coté, c'est un choix politique complémentent conscient et assumé ♥

        • [^] # Re: ACAB?

          Posté par  . Évalué à 2.

          Le fait qu'ils aient mis Cyberpunks, les punks se réclamants anarchistes me fait me demander si ce n'est pas justement pour pouvoir se dédouaner qu'ils ont trouvé des rétroacronymes. C'est un peu comme quand on chante que le roi Dagobert ne sait pas s'habiller…

          • [^] # Re: ACAB?

            Posté par  . Évalué à 4.

            Le cyberpunk n'est pas un punk biomécanique mais un sous-genre de la science-fiction.

        • [^] # Re: ACAB?

          Posté par  . Évalué à 1. Dernière modification le 12 octobre 2018 à 08:51.

          supprimé pour cause de doublon…

    • [^] # Re: ACAB?

      Posté par  . Évalué à -1.

      Pauvres petits matraqueurs et détenteurs de flingues et défenseurs du capital. :(

    • [^] # Re: ACAB?

      Posté par  . Évalué à -2. Dernière modification le 12 octobre 2018 à 20:52.

      j'interprète ça comme de l'incitation à la haine

      C'est pas de l'incitation a la haine, c'est un constat :)

  • # Chouette outil

    Posté par  . Évalué à 6.

    Merci pour ce chouette outil,

    J'utilise mat depuis un moment comme compagnon de mon MUA (mutt), ce qui donne… matmutt.

    Dans mon cas les pièces jointes sont traitées par un script shell avant d'être passées à mutt, donc c'est à cette étape que j'invoque mat. Mais on doit pouvoir faire la même chose avec les hooks de mutt.

    Je ne me souviens pas avoir vu si c'était possible avec Thunderbird, mais ça peut donner des idées d'usage/intégration.

    Ce n'est en effet pas parfait car je pense qu'il n'inspecte pas les zips ; mais je lis que c'est prévu, alors cool !

  • # Scrambled Exif sous Android

    Posté par  (Mastodon) . Évalué à 10.

    Il y a un petit outil disponible sur F-Droid, donc pour Android, qui sert à ce genre de chose pour les images.
    Ça s'appelle Scrambled Exif, et quand on veut partager une image, on la partage à cette application, qui au bout d'un petit instant - le temps de nettoyer l'image - propose de la repartager ailleurs : mail, chat, bluetooth, outil de cracking du site de la CIA, etc.

    Yth.

  • # Fichier nettoyé plus gros que l'original

    Posté par  . Évalué à 8. Dernière modification le 13 octobre 2018 à 23:06.

    Je viens de tester le programme – fort pratique en effet – sur une petite image JPEG de 436.8 Kio (447 270 octets), mais je suis assez surpris de constater que le fichier nettoyé fait 475.2 Kio (486 554 octets). Et si je nettoie à nouveau ce fichier préalablement nettoyé, j’obtiens un fichier nettoyé.nettoyé qui fait 475.0 Kio (486 404 octets)…

    Ce ne serait donc pas une bête opération de copie qui serait effectuée pour travailler dessus, mais une complète réécriture qui – dans le cas présent – met en jeu un format destructeur, et donc entraînerait une perte de qualité/données ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.