Hé Habr.
J'aimerais vous présenter un petit projet sur
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.
Un très vieux Linux FS a été choisi comme prototype
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
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
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.
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.
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é).
Et voici à quoi ressemble le FS avec les informations déjà compressées.
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.
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.
Запись:
- sudo Copy_Flash.sh « DEVICE » - récupère l'image FS de DEVICE (flash) ;
- ./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 ;
- sudo ./Write_Flash.sh « DEVICE » – écrivez à nouveau le FS modifié sur DEVICE.
Lecture:
- sudo Copy_Flash.sh « DEVICE » - récupère l'image FS de DEVICE (flash) ;
- ./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 ;
- 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
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.
(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
Source: habr.com