Bonjour, Habr.
Je voudrais vous présenter un petit projet de , réalisé pendant mon temps libre.
J'ai conçu un projet sur le stockage caché d'informations dans le système de fichiers (ci-après SF).
). Cela peut être utilisé pour le vol d'informations confidentielles à des fins éducatives.

Comme exemple, j'ai choisi un système de fichiers Linux assez ancien .
Mise en œuvre
Considérations sur la mise en œuvre
Si l'on examine bien le standard ext2, on peut constater qu'il existe ce qu'on appelle des , qui contiennent des informations essentielles sur le système. J'ai également trouvé et . L'idée est donc rapidement née d'enregistrer des informations dans des blocs vides du système de fichiers. Il fallait maintenant réfléchir à une protection contre un programmeur armé d'un .
Si l'information cachée est stockée sans cryptage, même si elle est masquée dans le système de fichiers, elle attirera quand même trop l'attention, surtout si le programmeur sait ce qu'il doit chercher. Il a donc été décidé de crypter tous les blocs du fichier source. J'ai choisi un chiffrement par blocs , mais comme vous le comprenez, ce n'est pas essentiel.
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 au début de chaque bloc. Ce marqueur était chiffré en fonction du numéro de bloc dans le fichier source. Cette astuce a permis non seulement de localiser les blocs nécessaires, mais aussi de connaître leur ordre correct.
Principe général de fonctionnement du système.

Algorithme d'écriture
En étapes :
- Tout d'abord, enregistrer dans le système de fichiers source des informations quelconques ;
- Supprimer ces informations (pas nécessairement toutes) ;
- Diviser le fichier à cacher en blocs de longueur égale, en ajoutant un marqueur ;
- Crypter ces blocs ;
- Placer les blocs cryptés dans des blocs vides du système de fichiers.
Pour les amateurs de diagrammes
Voici un diagramme de flux de l'algorithme d'écriture. À l'entrée, l'algorithme reçoit quatre fichiers :
-Image du système de fichiers modifiable ;
-Fichier à stéganographier ;
-Fichier avec la clé de cryptage pour AES ;
-Fichier avec le marqueur.

Il convient de noter que cet algorithme a un inconvénient : après l'écriture d'un fichier dans le système de fichiers, il n'est pas possible Il est nécessaire d'enregistrer de nouvelles informations dans le système de fichiers, car toute nouvelle information peut rejoindre les blocs que nous avons dédiés à notre fichier stéganographié. Cependant, cela ouvre la possibilité d'un « effacement rapide des traces ».
Il est assez évident comment cela peut être corrigé : il est nécessaire de réécrire l'algorithme d'enregistrement des blocs dans le système de fichiers. C'est une tâche compréhensible, mais incroyablement laborieuse.
Je ne l'ai pas réalisé pour la preuve de concept.
Ainsi, les modifications suivantes apparaîtront dans le système de fichiers ; voici à quoi ressemble le système de fichiers avant la stéganographie (un fichier audio a été préalablement enregistré).

Et voici à quoi ressemble le système de fichiers avec des informations déjà stéganographiées.

Algorithme de lecture
En étapes :
- Connaissant la clé et la méthode de construction des marqueurs, constituez les premiers N marqueurs, en garantissant que N, multiplié par la longueur du bloc du système de fichiers, est supérieur à la longueur du fichier stéganographié.
- Effectuez une recherche de blocs dans le système de fichiers, commençant par les marqueurs.
- Décryptez les blocs obtenus et séparez les marqueurs.
- Assemblez les blocs obtenus dans le bon ordre pour reconstituer le fichier d'origine.
Pour les amateurs de diagrammes
Ci-dessous est présentée un organigramme de l'algorithme d'enregistrement. L'algorithme reçoit en entrée trois fichiers :
- Image du système de fichiers ;
-Fichier avec la clé de cryptage pour AES ;
-Fichier avec le marqueur.

Après l'exécution du programme, un fichier Read apparaît, qui sera le fichier extrait du système de fichiers stéganographié. Si la clé ou le marqueur a été spécifié incorrectement, le fichier Read sera vide.
(pour les amateurs d'esthétiques, il est possible d'incorporer non seulement le fichier, mais aussi un "en-tête" contenant des métadonnées : nom du fichier, droits, date de dernière modification, etc.)
Automatisation du lancement
Pour plus de commodité, des scripts bash ont été écrits, automatisant le lancement sous Linux (testé sur Ubuntu 16.04.3 LTS).
Décomposons le lancement en étapes.
Écriture :
- sudo Copy_Flash.sh "DEVICE" — obtenir l'image du système de fichiers à partir de DEVICE (flash) ;
- .\/Write.sh "FILE" "KEY" "MARKER" – créer un environnement virtuel, télécharger les bibliothèques nécessaires et exécuter le script d'écriture ;
- sudo .\/Write_Flash.sh "DEVICE" – réécrire le système de fichiers modifié sur DEVICE.
Lecture :
- sudo Copy_Flash.sh "DEVICE" — obtenir l'image du système de fichiers à partir de DEVICE (flash) ;
- .\/Read.sh "KEY" 'MARKER' — créer un environnement virtuel, télécharger les bibliothèques nécessaires et exécuter le script de lecture ;
- Dans le répertoire actuel, ouvrez le fichier Read – c'est l'information stéganographiée.
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 , et .
L'objectif de ce travail était de démontrer le principe permettant de réaliser un stockage caché d'informations dans le système de fichiers.
Avec de tels algorithmes, il est possible de stocker des informations sans crainte ; et si, en connaissant la clé, il est possible de casser un tel système sans brute force (mais avec un algorithme assez long), alors sans connaissance de la clé, ce système me semble absolument résistant, bien que cela puisse servir de sujet pour un article séparé.
Tout le code est écrit en Python version 3.5.2. présenté sur ma chaîne YouTube. Le code complet du projet est disponible sur .
(Oui-oui, je sais qu'il faudrait écrire en quelque chose de "rapide" pour la version de production, comme en C 😉 )
Dans cette implémentation, la taille du fichier d'entrée pour la stéganographie ne doit pas dépasser 1000 kB.
Je tiens à remercier l'utilisateur pour ses conseils précieux lors de la planification de la recherche et ses recommandations sur la rédaction de l'article.
Source : habr.com
