Steganografi i filsystemet

Hej, Habr.

Jeg vil præsentere et lille projekt om steganografi, lavet i min fritid fra studierne.

Jeg har lavet et projekt om skjult informationsopbevaring i filsystemet (herefter FS).
Det kan anvendes til at stjæle fortrolige oplysninger til uddannelsesmæssige formål.

Steganografi i filsystemet

Som et eksperimentelt eksempel blev et temmelig gammelt Linux FS valgt ext2.

Implementering

Overvejelser omkring implementeringen

Hvis man godt "temme" standarden ext2, kan man erstatte, at der i FS findes såkaldte Superblocks, hvor grundlæggende information om systemet gives. Jeg har fundet Block Bitmap og Inode Table. Næsten med det samme kom ideen om at skrive information i de tomme blokke i FS. Nu gjaldt det om at tænke over beskyttelse mod en programmør, bevæbnet med hex-editor.

Hvis man opbevarer den skjulte information uden kryptering, så selvom den er spredt i FS, vil den stadig være for iøjnefaldende, især hvis programmøren ved, hvad han skal lede efter. Derfor blev det besluttet at kryptere alle blokke fra den oprindelige fil. Jeg valgte blokkrypteringen AES, men som du forstår, er det ikke principielt.

For at adskille de nødvendige blokke fra alle de andre ved læsning, blev det besluttet at tilføje en særlig markør i starten af hver blok. Denne markør blev krypteret afhængigt af bloknummeret i den oprindelige fil. Denne trick gjorde ikke kun muligheden for at finde de nødvendige blokke, men også at kende deres rette rækkefølge.

Det overordnede princip i systemet.

Steganografi i filsystemet

Optagelsesalgoritme

Punkter:

  • Først indskrive nogen information i det oprindelige filsystem;
  • Slette denne information (ikke nødvendigvis alt);
  • Opdele filen til skjul i blokke af ens længde, tilføje markør;
  • Kryptere disse blokke;
  • Lægge de krypterede blokke i de tomme blokke i FS.

For dem, der elsker blokdiagrammer

Nedenfor er et blokdiagram af optagelsesalgoritmen. Algoritmen tager fire filer som input:
- Billede af det ændrede filsystem;
- Filen, der skal være i steganografi;
- Fil med krypteringsnøgle til AES;
- Fil med markør.
Steganografi i filsystemet

Det skal straks bemærkes, at denne algoritme har en ulempe: efter at filen er skrevet til FS, kan ikke At gemme noget nyt i filsystemet, da enhver ny information kan havne i de blokke, vi har tildelt vores steganografisk fil, men dette åbner også muligheden for 'hurtig sletning af spor'.

Men det er klart, hvordan man kan rette dette: det er nødvendigt at omskrive algoritmen for blokskrivning til filsystemet. Det er en forståelig, men utrolig tidskrævende opgave.
Jeg har ikke implementeret dette til Proof Of Concept.

Som et resultat vil der ske følgende ændringer i filsystemet; sådan ser filsystemet ud før steganografi (en lydfil er blevet gemt på forhånd).
Steganografi i filsystemet
Og sådan ser filsystemet ud med allerede steganografisk information.
Steganografi i filsystemet

Læsning algoritme

Punkter:

  • Med kendskab til nøglen og metoden til at konstruere markørerne, sammensætte de første N markører, med garantien for at N, ganget med længden af blokken i filsystemet, er større end længden af den steganografiske fil;
  • Udfør en søgning efter blokke i filsystemet, der begynder med markørerne;
  • Dekrypter de modtagne blokke og adskil markørerne;
  • Samle de modtagne blokke i korrekt rækkefølge og få den oprindelige fil.

For dem, der elsker blokdiagrammer

Nedenfor er et flowchart af skrivemethodelen. Algoritmen modtager tre filer som input:
-Billedet af filsystemet;
- Fil med krypteringsnøgle til AES;
- Fil med markør.
Steganografi i filsystemet

Når programmet er kørt, opstår der en fil kaldet Read, som vil være den udvundne fil fra den steganografiske filsystem; hvis nøglen eller markøren er angivet forkert, vil filen Read være tom.
(For dem der elsker æstetik, kan man ikke kun indsætte filen, men også en 'header', der indeholder metadata: filnavn, rettigheder, tid for seneste ændring osv.)

Automatisering af opstart

For nemheds skyld er der skrevet bash-scripts, der automatiserer opstarten på Linux (testet på Ubuntu 16.04.3 LTS).
Lad os gennemgå opstarten trin for trin.
Skrivning:

  1. sudo Copy_Flash.sh “DEVICE” — Vi får billedet af Filsystemet fra DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – Opretter et virtuelt miljø, downloader de nødvendige biblioteker og starter skrivningsscriptet;
  3. sudo ./Write_Flash.sh “DEVICE” – Vi skriver det ændrede filsystem tilbage til DEVICE.

Læsning:

  1. sudo Copy_Flash.sh “DEVICE” — Vi får billedet af Filsystemet fra DEVICE (flash);
  2. ./Read.sh “KEY” ‘MARKER” — Opretter et virtuelt miljø, downloader de nødvendige biblioteker og starter læsescriptet;
  3. Åbn filen Read i den aktuelle katalog – det er den steganografiske information.

Konklusion

Denne metode til steganografi kræver sandsynligvis ekstra arbejde, yderligere test og udvidelse til mere populære filsystemer såsom Fat32, NTFS og procfs.
Meningen med dette arbejde var at vise princippet, hvormed man kan foretage skjult opbevaring af information i filsystemet.
Med sådanne algoritmer kan man trygt opbevare information, og hvis man kender nøglen, kan man bryde et sådant system ikke ved total prøvning (men med en ret langsom algoritme), så uden kendskab til nøglen fremstår dette system for mig som helt robust; dog kan dette være en anledning til en separat artikel.

Hele koden er implementeret i Python version 3.5.2. Et eksempel på arbejdet er præsenteret på min YouTube-kanal. Hele projektkoden er uploadet til github.
(Ja, ja, jeg ved, at for produktionsversionen skal man skrive i noget 'hurtigere', for eksempel C 😉)
I denne implementering må størrelsen på inputfilen til steganografi ikke overstige 1000 kB.

Jeg vil gerne udtrykke min taknemmelighed til brugeren PavelMSTU for værdifulde råd ved planlægningen af forskningen og anbefalinger til artiklens udformning.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster