8 déc. 2007

Steganographie -=] part 2 [=-

Toujours dans le cadre de nos travaux sur la steganographie, je me suis attaquée à l'écriture d'une implémentation "deux-en-un" de canaux de communication, en local cette fois-ci.

Ici, l'objectif est de faire communiquer deux applications de manière furtive sur un même ordinateur. Les deux applications ne nécessitant ni des privilèges égaux, ni des privilèges équivalents.

Le premier type de canal est un "covert storage channel" (je ne connais aucune traduction officielle du terme en français). Cela consiste en le placement d'un verrou posix sur un fichier par une première application. La seconde teste la
présence de ce verrou à intervalle régulier et considère selon les résultats qu'un bit 0 ou 1 lui a été transmis.

La difficulté réside ici dans la synchronisation des deux processus. Il est possible de la faire via le timestamp, en mettant le processus en sommeil tant que le timestamp n'est pas congru à 0 (mod 5) par exemple...

Le second canal est un "probalistic channel", il consiste en la mesure d'un phénomène par le processus récepteur, et la modification de la probabilité de réalisation de celui-ci par le processus émetteur.

Ici, la mesure se fera donc sur le taux de présence du verrou sur un fichier pour 100 tentatives d'accès par exemple. Si celui-ci dépasse un certain seuil (95% par exemple), on considère la réception d'un bit 1, sinon 0.

L'implémentation utilisera donc la fonction lockf dont voici un extrait de la page de man:


#include int lockf(int fd, int cmd, off_t len);
[...]

F_TLOCK
Comme F_LOCK mais l'appel n'est pas bloquant,
il renvoie une erreur si le fichier est déjà verrouillé.

F_ULOCK
Déverrouiller la section indiquée du fichier.
Ceci peut conduire une section verrouillée à
être découpée en deux sections.

F_TEST
Verifier s'il y a un verrou : l'appel renvoie 0
si la section indiquée est libre ou verrouillée
par le processus appelant, et -1 avec EACCES dans
errno si un autre processus possède le verrou.

J'ai entrepris la rédaction d'un code, ce dernier est plutôt simple, mais il s'avère très difficile de synchroniser correctement les deux processus. Les examens ayant grignotés mon temps libre, je suis forcé de remettre à plus tard la release du code...

Aucun commentaire: