Steganografi i filsystemet

Hej Habr.

Jeg vil gerne præsentere dig for et lille projekt om steganografilavet i min fritid.

Jeg lavede et projekt om skjult lagring af information i filsystemet (yderligere FS).
Dette kan bruges til at stjæle fortrolige oplysninger til uddannelsesformål.

Steganografi i filsystemet

En meget gammel Linux FS blev valgt som prototype ext2.

implementering

Implementeringsovervejelser

Hvis det er godt at "irritere" ext2-standarden, så kan vi erstatte, at der i FS er en såkaldt Superblokke, som giver grundlæggende oplysninger om systemet. Efter mig blev fundet blok bitmap и Inode tabel. Næsten øjeblikkeligt blev ideen om at skrive information i aktuelt tomme FS-blokke født. Nu var det værd at overveje beskyttelse fra en programmør bevæbnet med hex editor.

Hvis du gemmer skjult information uden kryptering, så vil den, selvom den er sløret i FS, stadig være for iøjnefaldende, især hvis programmøren ved, hvad han skal kigge efter. Derfor blev det besluttet at kryptere alle blokke af kildefilen. Jeg valgte blokchiffer AES, men som du kan se, er det lige meget.

For at adskille de nødvendige blokke fra alle de andre ved læsning, blev det besluttet at tilføje en speciel markør til hver blok i begyndelsen af ​​blokken. Denne markør blev krypteret afhængigt af bloknummeret i kildefilen. Et sådant trick tillod straks ikke kun at finde de rigtige blokke, men også at finde ud af deres rigtige rækkefølge.

Systemets generelle princip.

Steganografi i filsystemet

Skriv algoritme

Punkterne:

  • Først skal du skrive nogle oplysninger til det originale filsystem;
  • Slet disse oplysninger (ikke nødvendigvis alle);
  • Opdel filen for at gemme sig i blokke af samme længde ved at tilføje en markør;
  • Krypter disse blokke;
  • Placer krypterede blokke i tomme FS-blokke.

For elskere af flowcharts

Nedenfor er et blokdiagram over optagelsesalgoritmen. Algoritmen modtager fire filer som input:
-Billede af det udskiftelige filsystem;
-Fil underlagt steganografi;
-Fil med krypteringsnøgle til AES;
- Filer med en markør.
Steganografi i filsystemet

Det skal straks bemærkes, at denne algoritme har en ulempe: efter at have skrevet filen til FS, kan ikke skriv noget nyt til FS'en, da enhver ny information kan komme ind i de blokke, som vi har tildelt vores zippede fil, selvom dette også åbner muligheden for "hurtigt at dække over spor".

Men det er ret indlysende, hvordan dette kan rettes: det er nødvendigt at omskrive algoritmen til at skrive blokke til FS. Dette er en forståelig, men utrolig tidskrævende opgave.
For Proof Of Consept implementerede jeg ikke dette.

Resultatet vil være følgende ændringer i FS, sådan ser FS ud før steganografi (en lydfil blev tidligere optaget).
Steganografi i filsystemet
Og sådan ser FS ud med allerede zippede oplysninger.
Steganografi i filsystemet

Læsealgoritme

Punkterne:

  • Med kendskab til nøglen og metoden til at konstruere markører, komponer de første N markører med garanti for, at N ganget med længden af ​​filsystemblokken er større end længden af ​​den zippede fil;
  • Søg efter blokke i FS startende med markører;
  • Dekrypter modtagne blokke og separate markører;
  • Saml de resulterende blokke i den rigtige rækkefølge og få kildefilen.

For elskere af flowcharts

Nedenfor er et blokdiagram over optagelsesalgoritmen. Algoritmen modtager tre filer som input:
- Billedfilsystem;
-Fil med krypteringsnøgle til AES;
- Filer med en markør.
Steganografi i filsystemet

Efter programmet er kørt, vises Read-filen, som vil være den fil, der er udtrukket fra den steganograferede FS, hvis nøglen eller markøren blev angivet forkert, så vil Read-filen være tom.
(for elskere af smukhed, kan du blande ikke kun filen, men "headeren", der indeholder metainformation: filnavn, rettigheder, sidste ændrede tidspunkt osv.)

Start Automation

For nemheds skyld er der skrevet bash-scripts, der automatiserer lanceringen på Linux (testet på Ubuntu 16.04.3 LTS).
Lad os tage et kig på lanceringen trin for trin.
rekord:

  1. sudo Copy_Flash.sh "DEVICE" - få FS-billedet fra DEVICE (flash);
  2. ./Write.sh "FILE" "KEY" "MARKER" - opret et virtuelt miljø, download de nødvendige biblioteker og kør skrivescriptet;
  3. sudo ./Write_Flash.sh "DEVICE" - skriv den ændrede FS tilbage til DEVICE.

Læsning:

  1. sudo Copy_Flash.sh "DEVICE" - få FS-billedet fra DEVICE (flash);
  2. ./Read.sh "KEY" 'MARKER" - opret et virtuelt miljø, download de nødvendige biblioteker og kør scriptet til læsning;
  3. I den aktuelle mappe skal du åbne filen Læs - dette er den zippede information.

Konklusion

Denne metode til steganografi skal sandsynligvis forbedres, yderligere testes og udvides til mere populære filsystemer som f.eks Fat32, NTFS и ext4.
Men formålet med dette arbejde var at vise princippet om, at det er muligt at udføre skjult lagring af information i filsystemet.
Ved hjælp af sådanne algoritmer kan du frygtløst gemme information, og hvis et sådant system med viden om nøglen kan hackes ikke ved udtømmende søgning (men ved en meget lang algoritme), så uden at kende nøglen, vil dette system forekommer mig at være absolut stabil, men dette kan tjene som grund til en separat artikel.

Al kode er implementeret i Python version 3.5.2. Eksempel på arbejde vist på min youtube kanal. Den komplette projektkode er tilgængelig på github.
(Ja, ja, jeg ved, at du til produktionsversionen skal skrive i noget "hurtigt", for eksempel i C 😉 )
I denne implementering bør størrelsen af ​​inputfilen til steganografi ikke overstige 1000 kB.

Jeg vil gerne takke brugeren PavelMSTU for værdifulde råd i planlægningen af ​​undersøgelsen og anbefalinger til udformningen af ​​artiklen.

Kilde: www.habr.com

Tilføj en kommentar