Stéganographie hors des fichiers : cacher des données directement dans les secteurs

Une brĂšve introduction

La stĂ©ganographie, si quelqu'un ne s'en souvient pas, consiste Ă  cacher des informations dans divers conteneurs. Par exemple, dans des images (dĂ©jĂ  discutĂ© ici et ici). On peut Ă©galement cacher des donnĂ©es dans les tables de fichiers systĂšmes (dĂ©jĂ  abordĂ©es ici), et mĂȘme dans les paquets de protocole TCP. Malheureusement, toutes ces mĂ©thodes prĂ©sentent un inconvĂ©nient : pour insĂ©rer discrĂštement des informations dans un conteneur, il faut des algorithmes astucieux tenant compte des spĂ©cificitĂ©s internes du conteneur. Et avec la rĂ©sistance du conteneur aux manipulations, des problĂšmes peuvent survenir : par exemple, si l'on modifie lĂ©gĂšrement une image, les informations cachĂ©es peuvent ĂȘtre perdues.

Peut-on contourner ces algorithmes complexes et ces manipulations dĂ©licates, tout en garantissant le bon fonctionnement du conteneur et un niveau acceptable de prĂ©servation des donnĂ©es cachĂ©es ? Pour le dire en avance, oui, c'est possible ! Et je vais mĂȘme proposer un utilitaire.

Les détails sanglants de la méthode

L'idĂ©e principale est simple, comme un coup de massue sur la tĂȘte : sur le disque, il existe des zones dans lesquelles le systĂšme d'exploitation n'Ă©crit jamais (ou seulement dans de rares cas). Pour Ă©viter de devoir chercher ces zones avec des algorithmes astucieux, nous allons utiliser la redondance — c'est-Ă -dire dupliquer notre information cachĂ©e plusieurs fois dans tous les secteurs du disque. Ensuite, on peut crĂ©er les partitions nĂ©cessaires, formater les systĂšmes de fichiers, Ă©crire des fichiers et installer des systĂšmes d'exploitation — une partie des donnĂ©es secrĂštes sera toujours prĂ©servĂ©e et pourra ĂȘtre extraite, tandis que cette duplication aidera Ă  reconstituer l'ensemble Ă  partir des morceaux.

L'avantage de cette mĂ©thode est Ă©vident : nous ne dĂ©pendons ni du format des fichiers, ni mĂȘme du type de systĂšme de fichiers utilisĂ©.

Les inconvénients sont aussi, je pense, évidents :

  • Les donnĂ©es secrĂštes ne peuvent ĂȘtre modifiĂ©es qu'en réécrivant complĂštement l'intĂ©gralitĂ© du disque, suivie de la reconstitution du contenu visible pour l'utilisateur. De plus, il est interdit d'utiliser un logiciel qui recrĂ©e le disque Ă  partir d'une image : il recrĂ©era Ă©galement les anciennes donnĂ©es secrĂštes.
  • Plus le volume des donnĂ©es secrĂštes est important, plus la probabilitĂ© de perte d'une partie des informations est Ă©levĂ©e.
  • L'extraction des donnĂ©es d'un disque peut prendre beaucoup de temps. De quelques minutes Ă  quelques jours (les disques modernes sont plus grands).

Passons maintenant aux détails.

Il est clair que simplement Ă©taler des donnĂ©es sensibles sur tout le disque les rendra invisibles seulement Ă  l'Ɠil nu. Si l'on utilise un outil, tel qu'un Ă©diteur de disque, les donnĂ©es apparaĂźtront alors dans toute leur splendeur. Par consĂ©quent, il serait judicieux de chiffrer les donnĂ©es pour les dissimuler davantage. Nous allons chiffrer simplement mais avec finesse : selon l'algorithme aes256-cbc. Nous demanderons Ă  l'utilisateur de nous fournir la clĂ© de chiffrement et de choisir un bon mot de passe.

La question suivante est de savoir comment distinguer les « bonnes » données des données corrompues. Un hash, et pas n'importe lequel, mais un SHA1, nous sera utile ici. Pourquoi pas ? Pour git, il est suffisamment bon, donc il nous conviendra aussi. Décidé : nous allons doter chaque fragment d'information sauvegardé d'un hash, et si aprÚs déchiffrement celui-ci correspond, cela signifie que le déchiffrement a réussi.

Il sera Ă©galement nĂ©cessaire d'avoir un numĂ©ro de fragment et la longueur totale des donnĂ©es sensibles. Le numĂ©ro de fragment est pour suivre quels morceaux nous avons dĂ©jĂ  dĂ©chiffrĂ©s et lesquels restent Ă  faire. La longueur totale sera utile lors du traitement du dernier fragment, afin de ne pas Ă©crire de donnĂ©es superflues (c'est-Ă -dire du padding). Et puisque nous en sommes dĂ©jĂ  Ă  mentionner un en-tĂȘte, ajoutons-y le nom du fichier secret. Celui-ci sera utile aprĂšs dĂ©chiffrement pour savoir comment l'ouvrir.

Testons la méthode en pratique.

Pour le test, prenons le support le plus courant : une clĂ© USB. J'ai trouvĂ© une vieille clĂ© de 1 Go, ce qui est tout Ă  fait adĂ©quat pour les expĂ©riences. Si, comme moi, vous avez pensĂ© Ă  ne pas vous embĂȘter avec des supports physiques et Ă  tester sur un fichier—une image disque, je vais vous le dire tout de suite : ça ne fonctionnera pas. Lors de la formatage d'un tel « disque », linux crĂ©e le fichier Ă  nouveau, et tous les secteurs non utilisĂ©s seront remplis de zĂ©ros.

En tant que machine avec linux, j'ai malheureusement dĂ» utiliser une station mĂ©tĂ©o dĂ©laissĂ©e sur le balcon, Ă  base de Raspberry Pi 3. Il n'y a pas beaucoup de mĂ©moire lĂ -bas, donc nous ne cacherons pas de gros fichiers. Nous limiterons la taille maximale Ă  10 mĂ©gaoctets. Des fichiers trop petits ne valent pas non plus la peine d'ĂȘtre cachĂ©s : l'outil Ă©crit les donnĂ©es sur le disque en clusters de 4 Ko. Donc, en bas, nous allons nous limiter Ă  un fichier de 3 Ko—il tient dans un tel cluster.

Nous allons procéder progressivement avec la clé USB, vérifiant aprÚs chaque étape si les informations cachées sont lisibles :

  1. Formatage rapide en FAT16 avec une taille de cluster de 16 Ko. C'est ce que propose Windows 7 pour une clé USB dépourvue de systÚme de fichiers.
  2. Remplissage de la clé USB avec toutes sortes de fichiers indésirables à 50%.
  3. Remplissage de la clé USB avec toutes sortes de fichiers indésirables à 100%.
  4. Formatage « long » en FAT16 (avec réécriture complÚte).

Les deux premiers tests se sont logiquement soldés par un succÚs total : l'outil a pu extraire avec succÚs 10 mégaoctets de données secrÚtes de la clé USB. Cependant, aprÚs avoir saturé la clé avec des fichiers, une erreur s'est produite :

Total des clusters lus : 250752, décryptés : 158
ERREUR : impossible d'écrire le secretFile incomplet

Comme nous le voyons, seuls 158 clusters (632 Ko de donnĂ©es brutes, soit 636424 octets de charge utile) ont pu ĂȘtre dĂ©chiffrĂ©s avec succĂšs. Il est Ă©vident que 10 mĂ©gaoctets ne peuvent ĂȘtre obtenus ainsi, et il y a clairement des doublons parmi ces clusters. MĂȘme 1 mĂ©gaoctet ne pourra plus ĂȘtre rĂ©cupĂ©rĂ© de cette maniĂšre. Cependant, nous pouvons garantir que 3 Ko de donnĂ©es secrĂštes seront rĂ©cupĂ©rĂ©es de la clĂ© USB mĂȘme aprĂšs qu'elle aura Ă©tĂ© formatĂ©e et remplie Ă  ras bord. NĂ©anmoins, les expĂ©riences montrent qu'il est possible d'extraire un fichier de 120 Ko de cette clĂ©.

Le dernier test a malheureusement montré que la clé USB a été complÚtement réécrite :

$ sudo ./steganodisk -p password /dev/sda
Taille du périphérique : 250752 clusters
250700 99%
Total des clusters lus : 250752, déchiffrés : 0
ERREUR : impossible d'écrire le secretFile incomplet

Aucun cluster n'a Ă©tĂ© conservé  C'est triste, mais pas tragique ! Essayons de crĂ©er une partition sur la clĂ© avant de la formater, et d'y mettre le systĂšme de fichiers. D'ailleurs, elle est arrivĂ©e d'usine avec un tel formatage, donc nous ne faisons rien de suspect.
Il est tout à fait prévisible que l'espace disponible sur la clé USB ait légÚrement diminué.

Il est Ă©galement assez prĂ©visible que 10 mĂ©gaoctets n'aient pas pu ĂȘtre cachĂ©s sur un disque totalement saturĂ©. Mais maintenant, le nombre de clusters dĂ©chiffrĂ©s avec succĂšs a doublĂ© !

Total des clusters lus : 250752, déchiffrés : 405

Malheureusement, il ne sera pas possible de rassembler des mégaoctets à partir des morceaux, mais il sera facile d'obtenir deux cents kilooctets.

Et maintenant, la nouvelle réjouissante du dernier, 4e test : le formatage complet de cette clé USB n'a pas entraßné la destruction de toutes les informations ! 120 Ko de données secrÚtes ont parfaitement trouvé leur place dans l'espace non utilisé.

Tableau récapitulatif des tests :

Stéganographie hors des fichiers : cacher des données directement dans les secteurs

Un peu de théorie : à propos de l'espace libre et des secteurs inutilisés

Si vous avez dĂ©jĂ  partitionnĂ© un disque dur, vous avez pu remarquer qu'il n'est pas toujours possible d'utiliser tout l'espace libre sur le disque. La premiĂšre partition commence toujours avec un certain dĂ©calage (gĂ©nĂ©ralement 1 mĂ©gaoctet, ou 2048 secteurs). Il arrive aussi qu'il reste un petit « queue » de secteurs non utilisĂ©s aprĂšs la derniĂšre partition. De plus, il reste parfois des espaces entre les partitions, mĂȘme si c'est rare.

En d'autres termes, il y a des secteurs sur le disque auxquels il n'est pas possible d'accéder lors d'une utilisation normale, mais il est possible d'y écrire des données ! Par conséquent, il est aussi possible de les lire. Cela, en tenant compte du fait qu'il existe également une table de partitions et un code de démarrage qui se trouvent précisément dans la zone vide au début du disque.

Détournons notre attention des partitions et regardons le disque d'une perspective différente. Imaginons qu'il y ait une partition vide sur le disque. Nous allons y créer un systÚme de fichiers. Peut-on dire que certains secteurs sur le disque sont restés non écrasés ?

Et — roulement de tambour ! La rĂ©ponse sera pratiquement toujours — oui ! En effet, dans la plupart des cas, la crĂ©ation d'un systĂšme de fichiers revient Ă  n'Ă©crire que quelques blocs d'informations de service sur le disque, tandis que le reste du contenu de la partition reste inchangĂ©.

De plus — empiriquement parlant — on peut supposer que le systĂšme de fichiers ne peut pas toujours utiliser tout l'espace qui lui est attribuĂ© jusqu'au dernier secteur. Par exemple, le systĂšme de fichiers FAT16 avec une taille de cluster de 64 kilooctets ne pourra Ă©videmment pas occuper entiĂšrement une partition dont la taille n'est pas un multiple de 64 kilooctets. À la fin d'une telle partition, il faudra laisser une « queue » de quelques secteurs, inaccessible pour le stockage de donnĂ©es utilisateurs. Cependant, cette hypothĂšse n'a pas pu ĂȘtre confirmĂ©e expĂ©rimentalement.

Ainsi, pour maximiser l'espace disponible pour la stĂ©ganographie, il est nĂ©cessaire d'utiliser un systĂšme de fichiers avec une taille de cluster plus grande. On peut aussi crĂ©er une partition, mĂȘme si ce n'est pas nĂ©cessaire (par exemple sur une clĂ© USB). Il n'est pas nĂ©cessaire de crĂ©er des partitions vides ou de laisser des zones non allouĂ©es - cela attirera l'attention des personnes intĂ©ressĂ©es.

Outil pour les expérimentations

Vous pouvez jeter un Ɠil aux sources de l'outil ici

Pour la compilation, Qt version 5.0 ou supĂ©rieure et OpenSSL sont nĂ©cessaires. Si quelque chose ne compile pas, il faudra peut-ĂȘtre ajuster le fichier steganodisk.pro.

Vous pouvez modifier la taille du cluster de 4 Ko Ă , disons, 512 octets (dans secretfile.h). Cela augmentera les coĂ»ts liĂ©s aux informations de service : l'en-tĂȘte et le contrĂŽle de redondance cyclique occupent 68 octets fixes.

Bien sûr, vous devez lancer l'outil avec les droits de l'utilisateur root, et ce, avec prudence. Aucune question ne sera posée avant la réécriture du fichier ou du périphérique spécifié !

Profitez-en.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster