Stéganographie du système de fichiers

Hé Habr.

J'aimerais vous présenter un petit projet sur stéganographie, réalisé pendant mon temps libre après mes études.

J'ai réalisé un projet sur le stockage caché d'informations dans le système de fichiers (plus loin FS).
Cela peut être utilisé pour voler des informations confidentielles à des fins éducatives.

Stéganographie du système de fichiers

Un très vieux Linux FS a été choisi comme prototype ext2.

exécution

Considérations de mise en œuvre

S'il est bon de "démêler" la norme ext2, alors vous pouvez remplacer le fait que dans le FS il y a ce qu'on appelle Superblocs, qui fournit des informations de base sur le système. Après avoir été trouvé Bloquer le bitmap и Table des inodes. Presque immédiatement, l'idée d'enregistrer des informations dans des blocs FS actuellement vides est née. Maintenant, cela valait la peine de penser à se protéger d'un programmeur armé éditeur hexadécimal.

Si vous stockez des informations cachées sans cryptage, même malgré leur flou dans le FS, elles resteront trop visibles, surtout si le programmeur sait quoi rechercher. Par conséquent, il a été décidé de chiffrer tous les blocs du fichier source. J'ai choisi le chiffrement par blocs AES, mais comme vous le comprenez, ce n'est pas important.

Pour séparer les blocs nécessaires de tous les autres lors de la lecture, il a été décidé d'ajouter un marqueur spécial à chaque bloc au début du bloc. Ce jeton était chiffré en fonction du numéro de bloc dans le fichier source. Cette astuce a immédiatement permis non seulement de trouver les blocs nécessaires, mais aussi de reconnaître leur bon ordre.

Principe général de fonctionnement du système.

Stéganographie du système de fichiers

Algorithme d'enregistrement

Les points:

  • Écrivez d’abord quelques informations dans le système de fichiers source ;
  • Supprimez ces informations (pas nécessairement toutes) ;
  • Le fichier à masquer est divisé en blocs d'égale longueur, en ajoutant un marqueur ;
  • Chiffrez ces blocs ;
  • Placez les blocs chiffrés dans des blocs FS vides.

Pour les amateurs de schémas fonctionnels

Vous trouverez ci-dessous un schéma fonctionnel de l'algorithme d'enregistrement. L'algorithme reçoit quatre fichiers en entrée :
-Image d'un système de fichiers modifiable ;
-Dossier soumis à la stéganographie ;
-Fichier avec clé de cryptage pour AES ;
-Fichier avec marqueur.
Stéganographie du système de fichiers

Précisons d'emblée que cet algorithme présente un inconvénient : après avoir écrit le fichier dans le FS, ne doit pas écrire quelque chose de nouveau dans le FS, puisque toute nouvelle information peut se retrouver dans les blocs que nous avons alloués à notre fichier zippé, même si cela ouvre également la possibilité de « brouiller rapidement nos traces ».

Mais il est assez évident comment cela peut être résolu : il est nécessaire de réécrire l'algorithme d'écriture des blocs dans le FS. C'est une tâche compréhensible, mais incroyablement longue.
Pour Proof Of Consept, je n'ai pas implémenté cela.

En conséquence, les modifications suivantes seront apportées au FS ; voici à quoi ressemble le FS avant la stéganographie (un fichier audio a été préalablement enregistré).
Stéganographie du système de fichiers
Et voici à quoi ressemble le FS avec les informations déjà compressées.
Stéganographie du système de fichiers

Algorithme de lecture

Les points:

  • Avec la connaissance de la clé et de la méthode de construction des marqueurs, composer les N premiers marqueurs, avec la garantie que N multiplié par la longueur du bloc du système de fichiers est supérieur à la longueur du fichier zippé ;
  • Rechercher des blocs dans le FS commençant par des marqueurs ;
  • Déchiffrer les blocs reçus et séparer les marqueurs ;
  • Collectez les blocs résultants dans le bon ordre et obtenez le fichier source.

Pour les amateurs de schémas fonctionnels

Vous trouverez ci-dessous un schéma fonctionnel de l'algorithme d'enregistrement. L'algorithme reçoit trois fichiers en entrée :
-Image du système de fichiers ;
-Fichier avec clé de cryptage pour AES ;
-Fichier avec marqueur.
Stéganographie du système de fichiers

Après l'exécution du programme, le fichier Read apparaît, qui sera le fichier extrait du système de fichiers stéganographié ; si la clé ou le marqueur a été mal spécifié, alors le fichier Read sera vide.
(pour les amoureux de la beauté, vous pouvez insérer non seulement le fichier, mais un « header » contenant des méta-informations : nom du fichier, droits, heure de la dernière modification, etc.)

Automatisation des startups

Pour plus de commodité, des scripts bash ont été écrits pour automatiser le lancement sous Linux (testé sur Ubuntu 16.04.3 LTS).
Regardons le lancement étape par étape.
Запись:

  1. sudo Copy_Flash.sh « DEVICE » - récupère l'image FS de DEVICE (flash) ;
  2. ./Write.sh « FILE » « KEY » « MARKER » – créez un environnement virtuel, téléchargez les bibliothèques nécessaires et exécutez le script d'écriture ;
  3. sudo ./Write_Flash.sh « DEVICE » – écrivez à nouveau le FS modifié sur DEVICE.

Lecture:

  1. sudo Copy_Flash.sh « DEVICE » - récupère l'image FS de DEVICE (flash) ;
  2. ./Read.sh « KEY » 'MARKER » - créez un environnement virtuel, téléchargez les bibliothèques nécessaires et exécutez le skipt pour la lecture ;
  3. Dans le répertoire actuel, ouvrez le fichier Read - il s'agit des informations compressées.

Conclusion

Cette méthode de stéganographie nécessite probablement des améliorations, des tests supplémentaires et une extension à des systèmes de fichiers plus populaires, tels que Fat32, NTFS и ext4.
Mais le but de ce travail était de montrer le principe selon lequel il est possible d'effectuer un stockage caché d'informations dans le système de fichiers.
Avec l'aide de tels algorithmes, vous pouvez stocker des informations sans crainte, et si, si vous connaissez la clé, il est possible de pirater un tel système non pas par force brute (mais par un algorithme très long), alors sans connaître la clé, cela le système me semble absolument stable, cependant, cela peut servir de motif pour un article séparé.

Tout le code est implémenté dans Python version 3.5.2. Exemple de travail présenté sur ma chaîne youtube. Le code complet du projet est publié sur github.
(Oui, oui, je sais que pour la version de production il faut écrire quelque chose de « rapide », par exemple C 😉)
Dans cette implémentation, la taille du fichier d'entrée pour la stéganographie ne doit pas dépasser 1000 XNUMX Ko.

Je souhaite exprimer ma gratitude à l'utilisateur PavelMSTU pour de précieux conseils dans la planification de l’étude et des recommandations sur la conception de l’article.

Source: habr.com

Ajouter un commentaire