Hallo, Habr.
Ik wil je een klein project voorstellen over , gemaakt in mijn vrije tijd van de studie.
Ik heb een project gemaakt over de verborgen opslag van informatie in een bestandssysteem (verder aangeduid als FS).
). Dit kan worden toegepast voor de diefstal van vertrouwelijke informatie voor educatieve doeleinden.

Als proefmonsters werd een vrij oud Linux FS gekozen .
Implementatie
Overwegingen voor de implementatie
Als je de standaard ext2 goed 'afraapt', kun je vervangen wat in de FS bestaat, zo genaamde , waarin de basisinformatie over het systeem is gegeven. Daarna vond ik en . Vrij snel kwam het idee op om informatie in momenteel lege blokken van de FS te schrijven. Nu moest er worden nagedacht over bescherming tegen een programmeur, gewapend met een .
. Als je verborgen informatie zonder encryptie opslaat, zal deze, zelfs ondanks de verspreiding over de FS, te opvallend zijn, vooral als de programmeur weet wat hij moet zoeken. Daarom werd besloten om alle blokken van het oorspronkelijke bestand te versleutelen. Ik koos een block cipher , maar zoals je begrijpt, is dat niet cruciaal.
Om de benodigde blokken van de rest te scheiden, werd besloten om voor ieder blok een speciaal marker aan het begin te voegen. Deze marker werd versleuteld afhankelijk van het bloknummer in het oorspronkelijke bestand. Deze truc stelde niet alleen in staat om de benodigde blokken te vinden, maar ook om hun juiste volgorde te bepalen.
Het algemene principe van het systeem.

Het schrijfalgoritme
In stappen:
- Eerst informatie in het oorspronkelijke bestandssysteem opslaan;
- Deze informatie verwijderen (niet per se alles);
- Het bestand dat verborgen moet worden, in blokken van gelijke lengte splitsen, met een marker toegevoegd;
- Deze blokken versleutelen;
- De versleutelde blokken in lege blokken van de FS plaatsen.
Voor liefhebbers van stroomdiagrammen
Hieronder bevindt zich een stroomdiagram van het schrijfalgoritme. Het algoritme ontvangt vier bestanden als invoer:
- Een afbeelding van het te wijzigen bestandssysteem;
- Het bestand dat aan steganografie onderhevig is;
- Een bestand met de encryptiesleutel voor AES;
- Een bestand met de marker.

Het valt meteen op dat dit algoritme één nadeel heeft: na het schrijven van een bestand in de FS, worden gebruikt kan er niets nieuws in de FS worden geschreven, omdat elke nieuwe informatie in die blokken kan komen die we aan ons gesteganografeerde bestand hebben toegewezen; dit opent echter ook de mogelijkheid voor 'snelle sporenwissen'.
Het is echter vrij duidelijk hoe dit kan worden verholpen: het moet de algoritme voor het schrijven van blokken in het bestandssysteem herschrijven. Dit is een begrijpelijke maar ongelooflijk tijdrovende taak.
Voor de Proof Of Concept heb ik dit niet geïmplementeerd.
Als resultaat zullen de volgende wijzigingen in het bestandssysteem optreden; zo ziet het bestandssysteem eruit vóór steganografie (er was een audiobestand geschreven).

En zo ziet het bestandssysteem eruit met al de steganografisch verwerkte informatie.

Leestalgooritme
In stappen:
- Met de kennis van de sleutel en de manier van het bouwen van markers, stel de eerste N markers op, met de garantie dat N, vermenigvuldigd met de blokgrootte van het bestandssysteem, groter is dan de lengte van het steganografisch bestand;
- Zoek naar blokken in het bestandssysteem die beginnen met de markers;
- Ontcijfer de verkregen blokken en scheid de markers;
- Verzamel de verkregen blokken in de juiste volgorde en verkrijg het oorspronkelijke bestand.
Voor liefhebbers van stroomdiagrammen
Hieronder staat het stroomschema van het schrijfalgoritme. De algoritme krijgt drie bestanden als invoer:
-Afbeelding van het bestandssysteem;
- Een bestand met de encryptiesleutel voor AES;
- Een bestand met de marker.

Na het uitvoeren van het programma verschijnt er een bestand Read, wat het bestand is dat is geëxtraheerd uit het steganografische bestandssysteem; als de sleutel of marker onjuist is opgegeven, zal het bestand Read leeg zijn.
(Voor liefhebbers van esthetiek kan je niet alleen een bestand invoegen, maar ook een 'header' met meta-informatie: bestandsnaam, rechten, tijd van laatste wijziging, enz.)
Automatisering van de uitvoer
Voor het gemak zijn er bash-scripts geschreven die het uitvoeren op Linux automatiseren (getest op Ubuntu 16.04.3 LTS).
Laten we de uitvoer stap voor stap bekijken.
Schrijven:
- sudo Copy_Flash.sh “DEVICE” — we verkrijgen de afbeelding van het bestandssysteem uit het DEVICE (USB-stick);
- .\/Write.sh “FILE” “KEY” “MARKER” – we creëren een virtuele omgeving, downloaden de benodigde bibliotheken en starten het script om te schrijven;
- sudo .\/Write_Flash.sh “DEVICE” – we schrijven het gewijzigde bestandssysteem opnieuw naar het DEVICE.
Lezen:
- sudo Copy_Flash.sh “DEVICE” — we verkrijgen de afbeelding van het bestandssysteem uit het DEVICE (USB-stick);
- .\/Read.sh “KEY” ‘MARKER” — we creëren een virtuele omgeving, downloaden de benodigde bibliotheken en starten het script om te lezen;
- Open het bestand Read in de huidige catalogus – dit is de steganografische informatie.
Conclusie
Deze methode van steganografie heeft waarschijnlijk verdere ontwikkeling, extra testen en uitbreiding naar meer populaire bestandssystemen nodig, zoals , en .
Maar het doel van dit werk was om het principe aan te tonen waarmee verborgen informatie in een bestandssysteem kan worden opgeslagen.
Met behulp van dergelijke algoritmen kan informatie zonder angst worden opgeslagen, en hoewel het mogelijk is om een dergelijk systeem te kraken met kennis van de sleutel - echter via een zeer langdurig algoritme - lijkt dit systeem zonder sleutel absoluut bestand tegen aanvallen. Dit kan echter aanleiding geven tot een apart artikel.
De hele code is geïmplementeerd in Python versie 3.5.2. te zien op mijn YouTube-kanaal. De volledige code van het project is gepubliceerd op .
(Ja, ik weet dat het voor productieversies nodig is om in iets 'snellers' te schrijven, zoals C 😉 )
In deze implementatie mag de grootte van het invoerbestand voor steganografie niet meer dan 1000 kB zijn.
Ik wil mijn dank uitspreken aan de gebruiker voor waardevolle adviezen bij het plannen van het onderzoek en aanbevelingen voor het opstellen van het artikel.
Bron: habr.com
