Steganografie in het bestandssysteem

Hallo, Habr.

Ik wil je een klein project voorstellen over steganografie, 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.

Steganografie in het bestandssysteem

Als proefmonsters werd een vrij oud Linux FS gekozen ext2.

Implementatie

Overwegingen voor de implementatie

Als je de standaard ext2 goed 'afraapt', kun je vervangen wat in de FS bestaat, zo genaamde Superblocks, waarin de basisinformatie over het systeem is gegeven. Daarna vond ik Block Bitmap en Inode Table. 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 hex-editor.

. 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 AES, 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.

Steganografie in het bestandssysteem

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.
Steganografie in het bestandssysteem

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).
Steganografie in het bestandssysteem
En zo ziet het bestandssysteem eruit met al de steganografisch verwerkte informatie.
Steganografie in het bestandssysteem

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.
Steganografie in het bestandssysteem

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:

  1. sudo Copy_Flash.sh “DEVICE” — we verkrijgen de afbeelding van het bestandssysteem uit het DEVICE (USB-stick);
  2. .\/Write.sh “FILE” “KEY” “MARKER” – we creëren een virtuele omgeving, downloaden de benodigde bibliotheken en starten het script om te schrijven;
  3. sudo .\/Write_Flash.sh “DEVICE” – we schrijven het gewijzigde bestandssysteem opnieuw naar het DEVICE.

Lezen:

  1. sudo Copy_Flash.sh “DEVICE” — we verkrijgen de afbeelding van het bestandssysteem uit het DEVICE (USB-stick);
  2. .\/Read.sh “KEY” ‘MARKER” — we creëren een virtuele omgeving, downloaden de benodigde bibliotheken en starten het script om te lezen;
  3. 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 Fat32, NTFS en procfs.
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. Werkzaamheidsvoorbeeld te zien op mijn YouTube-kanaal. De volledige code van het project is gepubliceerd op github.
(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 PavelMSTU voor waardevolle adviezen bij het plannen van het onderzoek en aanbevelingen voor het opstellen van het artikel.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster