Accueil mansteg : stéganographie dans les manpages
Post
Annuler

mansteg : stéganographie dans les manpages

Les pages de manuel UNIX, les manpages, se situent généralement dans l’arborescence /usr/share/man et sont stockées compressées (gzippées). Elles permettent d’obtenir des informations sur des commandes ou sur des fonctions du langage C et bien plus encore, le tout en utilisant la commande man.

Si l’on décompresse l’une de ces pages de manuel, on découvre des lignes de textes dans un langage de mise en forme nommé Troff.

J’ai développé un petit outil de stéganographie qui utilise les manpages pour dissimuler des informations.

mansteg utilise en effet la possibilité d’insérer des commentaires dans un document troff, commentaires qui ne sont pas visibles lors du rendu de la page de manuel.

Pour cacher un message, mansteg va l’encoder en base64, le découper en blocks de 64 octets et placer le résultat sous forme de lignes de commentaires dans une page de manuel.

L’avantage de cette méthode est qu’il n’y a aucune contrainte de taille comme c’est souvent le cas avec les outils de stéganographie.

Prenons en exemple avec le texte suivant :

Steganography is the art and science of writing hidden messages in such a way that no one apart from the intended recipient knows of the existence of the message; this is in contrast to cryptography, where the existence of the message itself is not disguised, but the content is obscured.

Que nous allons dissimuler dans la page de manuel de la commande wget (/usr/share/man/man1/wget.1.gz) :

1
python hide.py message.txt /usr/share/man/man1/wget.1.gz

Pour étudier le résultat, on décompresse wget.1.gz (gunzip wget.1.gz) et on affiche son contenu. Les premières lignes sont :

1
2
3
4
5
6
7
8
9
10
11
12
13
.\" U3RlZ2Fub2dyYXBoeSBpcyB0aGUgYXJ0IGFuZCBzY2llbmNlIG9mIHdyaXRpbmcg
.\" aGlkZGVuIG1lc3NhZ2VzIGluIHN1Y2ggYSB3YXkKdGhhdCBubyBvbmUgYXBhcnQg
.\" ZnJvbSB0aGUgaW50ZW5kZWQgcmVjaXBpZW50IGtub3dzIG9mIHRoZSBleGlzdGVu
.\" Y2Ugb2YgdGhlCm1lc3NhZ2U7IHRoaXMgaXMgaW4gY29udHJhc3QgdG8gY3J5cHRv
.\" Z3JhcGh5LCB3aGVyZSB0aGUgZXhpc3RlbmNlIG9mIHRoZQptZXNzYWdlIGl0c2Vs
.\" ZiBpcyBub3QgZGlzZ3Vpc2VkLCBidXQgdGhlIGNvbnRlbnQgaXMgb2JzY3VyZWQu
.\" Cg==
.\" ****************************************************************
.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.3
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading

On retrouve notre message encodé, suivi d’une série d’astérisques, ajoutés par mansteg pour délimiter nos commentaires des commentaires déjà présents, puis le début de la page de manuel à proprement parler.

Pour récupérer notre message, rien de plus simple :

1
2
3
4
5
# python extract.py /usr/share/man/man1/wget.1.gz
Steganography is the art and science of writing hidden messages in such a way
that no one apart from the intended recipient knows of the existence of the
message; this is in contrast to cryptography, where the existence of the
message itself is not disguised, but the content is obscured.

Les données sont très facilement récupérables pour quelqu’un qui aurait vu le ‘truc’ étant donné que l’algorithme base64 est réversible et utilisé couramment. Il est donc préférable de crypter le document à cacher avant de l’insérer dans une page de manuel, par exemple avec gpg.

C’est développé en Python et téléchargeable ici :

mansteg.tar.bz2

Published January 06 2011 at 12:25

Cet article est sous licence CC BY 4.0 par l'auteur.