Bestandssysteemsteganografie

Hé Habr.

Ik wil u graag een klein project voorstellen steganografie, gemaakt in mijn vrije tijd tijdens het studeren.

Ik heb een project gemaakt over verborgen opslag van informatie in het bestandssysteem (verder ФС).
Dit kan worden gebruikt om vertrouwelijke informatie te stelen voor educatieve doeleinden.

Bestandssysteemsteganografie

Als prototype werd gekozen voor een zeer oude Linux FS ext2.

uitvoering

Implementatieoverwegingen

Als het goed is om de ext2-standaard te ‘ontrafelen’, dan kun je vervangen dat er in de FS een zogenaamde Superblokken, dat basisinformatie over het systeem biedt. Nadat ik gevonden was Bitmap blokkeren и Inode-tabel. Vrijwel onmiddellijk werd het idee geboren om informatie op te nemen in de momenteel lege FS-blokken. Nu was het de moeite waard om na te denken over bescherming tegen een gewapende programmeur hex-editor.

Als je verborgen informatie zonder encryptie opslaat, zal deze, ondanks de wazigheid ervan in de FS, nog steeds te opvallend zijn, vooral als de programmeur weet waar hij op moet letten. Daarom werd besloten om alle blokken van het bronbestand te coderen. Ik heb voor blokcodering gekozen AES, maar zoals u begrijpt, is dit niet belangrijk.

Om bij het lezen de benodigde blokken van alle andere te scheiden, werd besloten om aan elk blok aan het begin van het blok een speciale markering toe te voegen. Dit token werd gecodeerd afhankelijk van het bloknummer in het bronbestand. Deze truc maakte het meteen mogelijk om niet alleen de benodigde blokken te vinden, maar ook om de juiste volgorde ervan te herkennen.

Algemeen werkingsprincipe van het systeem.

Bestandssysteemsteganografie

Opname-algoritme

De punten:

  • Schrijf eerst wat informatie naar het bronbestandssysteem;
  • Verwijder deze informatie (niet noodzakelijkerwijs alles);
  • Het te verbergen bestand wordt verdeeld in blokken van gelijke lengte, waarbij een markering wordt toegevoegd;
  • Versleutel deze blokken;
  • Plaats gecodeerde blokken in lege FS-blokken.

Voor liefhebbers van blokdiagrammen

Hieronder ziet u een blokdiagram van het opnamealgoritme. Het algoritme ontvangt vier bestanden als invoer:
-Afbeelding van een aanpasbaar bestandssysteem;
-Bestand onderworpen aan steganografie;
-Bestand met encryptiesleutel voor AES;
-Vijl met marker.
Bestandssysteemsteganografie

Het is de moeite waard om meteen op te merken dat dit algoritme één nadeel heeft: na het schrijven van het bestand naar de FS, niet mogen schrijf alles wat nieuw is in de FS, omdat alle nieuwe informatie terecht kan komen in de blokken die we aan ons gecomprimeerde bestand hebben toegewezen, hoewel dit ook de mogelijkheid opent om “snel onze sporen uit te wissen.”

Maar het is vrij duidelijk hoe dit kan worden opgelost: het is noodzakelijk om het algoritme voor het schrijven van blokken in de FS te herschrijven. Dit is een begrijpelijke, maar ongelooflijk tijdrovende taak.
Voor Proof Of Consept heb ik dit niet geïmplementeerd.

Als gevolg hiervan zullen de volgende wijzigingen worden aangebracht in de FS; zo ziet de FS eruit vóór de steganografie (er werd eerder een audiobestand opgenomen).
Bestandssysteemsteganografie
En zo ziet de FS eruit met de informatie al ingepakt.
Bestandssysteemsteganografie

Algoritme lezen

De punten:

  • Met kennis van de sleutel en de methode voor het construeren van markeringen, stelt u de eerste N markeringen samen, met de garantie dat N vermenigvuldigd met de lengte van het bestandssysteemblok groter is dan de lengte van het gecomprimeerde bestand;
  • Zoek naar blokken in de FS, beginnend met markeringen;
  • Ontcijfer de ontvangen blokken en scheid de markeringen;
  • Verzamel de resulterende blokken in de juiste volgorde en verkrijg het bronbestand.

Voor liefhebbers van blokdiagrammen

Hieronder ziet u een blokdiagram van het opnamealgoritme. Het algoritme ontvangt drie bestanden als invoer:
-Bestandssysteemimage;
-Bestand met encryptiesleutel voor AES;
-Vijl met marker.
Bestandssysteemsteganografie

Nadat het programma is uitgevoerd, verschijnt het leesbestand, het bestand dat is geëxtraheerd uit het gesteganografeerde bestandssysteem; als de sleutel of markering onjuist is opgegeven, is het leesbestand leeg.
(voor liefhebbers van schoonheid kun je niet alleen het bestand tussenvoegen, maar ook een “header” met meta-informatie: bestandsnaam, rechten, tijdstip van laatste wijziging, enz.)

Automatisering van het opstarten

Voor het gemak zijn bash-scripts geschreven om de lancering op Linux te automatiseren (getest op Ubuntu 16.04.3 LTS).
Laten we de lancering stap voor stap bekijken.
record:

  1. sudo Copy_Flash.sh “DEVICE” - haal de FS-afbeelding op van DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – creëer een virtuele omgeving, download de benodigde bibliotheken en voer het schrijfscript uit;
  3. sudo ./Write_Flash.sh “DEVICE” – schrijf de gewijzigde FS opnieuw naar DEVICE.

Lezing:

  1. sudo Copy_Flash.sh “DEVICE” - haal de FS-afbeelding op van DEVICE (flash);
  2. ./Read.sh “KEY” 'MARKER” - creëer een virtuele omgeving, download de benodigde bibliotheken en voer de skipt uit om te lezen;
  3. Open in de huidige map het leesbestand - dit is de gezipte informatie.

Conclusie

Deze steganografiemethode moet waarschijnlijk worden verbeterd, extra getest en uitgebreid naar meer populaire bestandssystemen, zoals Fat32, NTFS и ext4.
Maar het doel van dit werk was om het principe te laten zien waarmee het mogelijk is om verborgen informatie in het bestandssysteem op te slaan.
Met behulp van dergelijke algoritmen kun je onbevreesd informatie opslaan, en als je, als je de sleutel kent, een dergelijk systeem niet met brute kracht (maar met een heel lang algoritme) kunt hacken, dan is dit zonder de sleutel te kennen systeem lijkt mij absoluut stabiel, maar dit kan aanleiding zijn voor een apart artikel.

Alle code is geïmplementeerd in Python versie 3.5.2. Voorbeeld van werk gepresenteerd op mijn YouTube-kanaal. De volledige code van het project staat op GitHub.
(Ja, ja, ik weet dat je voor de productieversie iets “snel” moet schrijven, bijvoorbeeld C 😉)
In deze implementatie mag de grootte van het invoerbestand voor steganografie niet groter zijn dan 1000 kB.

Ik wil mijn dank uitspreken aan de gebruiker PavelMSTU voor waardevol advies bij het plannen van het onderzoek en aanbevelingen over de opzet van het artikel.

Bron: www.habr.com

Voeg een reactie