Filsystem steganografi

Hei Habr.

Jeg vil gjerne presentere et lite prosjekt om steganografi, laget på fritiden fra å studere.

Jeg laget et prosjekt om skjult lagring av informasjon i filsystemet (videre FS).
Dette kan brukes til å stjele konfidensiell informasjon for pedagogiske formål.

Filsystem steganografi

En veldig gammel Linux FS ble valgt som prototype ext2.

implementering

Implementeringshensyn

Hvis det er greit å "nøste opp" ext2-standarden, så kan du erstatte at det i FS er en s.k. Superblokker, som gir grunnleggende informasjon om systemet. Etter at jeg ble funnet Blokker bitmap и Inode tabell. Nesten umiddelbart ble ideen om å registrere informasjon i tomme FS-blokker født. Nå var det verdt å tenke på beskyttelse fra en programmerer bevæpnet hex editor.

Hvis du lagrer skjult informasjon uten kryptering, vil den, til tross for uskarpheten i FS, fortsatt være for iøynefallende, spesielt hvis programmereren vet hva han skal se etter. Derfor ble det besluttet å kryptere alle blokkene i kildefilen. Jeg valgte blokkchiffer AES, men som du forstår er ikke dette viktig.

For å skille de nødvendige blokkene fra alle de andre ved lesing, ble det besluttet å legge til en spesiell markør til hver blokk i begynnelsen av blokken. Dette tokenet ble kryptert avhengig av blokknummeret i kildefilen. Dette trikset gjorde det umiddelbart mulig ikke bare å finne de nødvendige blokkene, men også å gjenkjenne deres riktige rekkefølge.

Generelt driftsprinsipp for systemet.

Filsystem steganografi

Opptaksalgoritme

Poengene:

  • Skriv først litt informasjon til kildefilsystemet;
  • Slett denne informasjonen (ikke nødvendigvis alle);
  • Filen som skal skjules er delt inn i blokker av samme lengde, og legger til en markør;
  • Krypter disse blokkene;
  • Plasser krypterte blokker i tomme FS-blokker.

For elskere av blokkdiagram

Nedenfor er et blokkskjema over opptaksalgoritmen. Algoritmen mottar fire filer som input:
- Bilde av et modifiserbart filsystem;
- Fil underlagt steganografi;
-Fil med krypteringsnøkkel for AES;
- Fil med markør.
Filsystem steganografi

Det er verdt å merke seg med en gang at denne algoritmen har en ulempe: etter å ha skrevet filen til FS, kan ikke skriv noe nytt inn i FS, siden all ny informasjon kan ende opp i blokkene som vi har allokert til vår zippede fil, selv om dette også åpner for muligheten for å "raskt dekke sporene våre."

Men det er ganske åpenbart hvordan dette kan fikses: det er nødvendig å omskrive algoritmen for å skrive blokker i FS. Dette er en forståelig, men utrolig tidkrevende oppgave.
For Proof Of Consept implementerte jeg ikke dette.

Som et resultat vil følgende endringer bli gjort i FS; dette er hvordan FS ser ut før steganografi (en lydfil ble tidligere tatt opp).
Filsystem steganografi
Og slik ser FS ut med informasjonen som allerede er zippet opp.
Filsystem steganografi

Lesealgoritme

Poengene:

  • Med kunnskap om nøkkelen og metoden for å konstruere markører, komponer de første N markørene, med garantien at N multiplisert med lengden på filsystemblokken er større enn lengden på den zippede filen;
  • Søk etter blokker i FS starter med markører;
  • Dechiffrer de mottatte blokkene og separer markørene;
  • Samle de resulterende blokkene i riktig rekkefølge og få kildefilen.

For elskere av blokkdiagram

Nedenfor er et blokkskjema over opptaksalgoritmen. Algoritmen mottar tre filer som input:
-filsystembilde;
-Fil med krypteringsnøkkel for AES;
- Fil med markør.
Filsystem steganografi

Etter at programmet har kjørt, vises Read-filen, som vil være filen som er trukket ut fra det steganograferte filsystemet; hvis nøkkelen eller markøren ble spesifisert feil, vil Read-filen være tom.
(for elskere av skjønnhet, kan du sette inn ikke bare filen, men en "header" som inneholder metainformasjon: filnavn, rettigheter, sist endrede tidspunkt, etc.)

Automatisering av oppstart

For enkelhets skyld ble bash-skript skrevet for å automatisere lanseringen på Linux (testet på Ubuntu 16.04.3 LTS).
La oss se på lanseringen trinn for trinn.
Запись:

  1. sudo Copy_Flash.sh "DEVICE" - få FS-bildet fra DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – lag et virtuelt miljø, last ned de nødvendige bibliotekene og kjør skriveskriptet;
  3. sudo ./Write_Flash.sh “DEVICE” – skriv den endrede FS-en igjen til DEVICE.

Lesning:

  1. sudo Copy_Flash.sh "DEVICE" - få FS-bildet fra DEVICE (flash);
  2. ./Read.sh “KEY” 'MARKER» - lag et virtuelt miljø, last ned de nødvendige bibliotekene og kjør skipt for lesing;
  3. I gjeldende katalog åpner du Read-filen - dette er den zippede informasjonen.

Konklusjon

Denne steganografimetoden trenger sannsynligvis forbedring, ytterligere testing og utvidelse til mer populære filsystemer, som f.eks Fat32, NTFS и ext4.
Men hensikten med dette arbeidet var å vise prinsippet for at det er mulig å utføre skjult lagring av informasjon i filsystemet.
Ved hjelp av slike algoritmer kan du fryktløst lagre informasjon, og hvis, hvis du kjenner nøkkelen, er det mulig å hacke et slikt system ikke med brute force (men med en veldig lang algoritme), uten å vite nøkkelen, dette systemet virker for meg å være absolutt stabilt, men dette kan tjene som en grunn for en egen artikkel.

All kode er implementert i Python versjon 3.5.2. Eksempel på arbeid presentert på min youtube-kanal. Hele koden for prosjektet er lagt ut på GitHub.
(Ja, ja, jeg vet at for produksjonsversjonen må du skrive noe "raskt", for eksempel C 😉)
I denne implementeringen bør størrelsen på inndatafilen for steganografi ikke overstige 1000 kB.

Jeg vil uttrykke min takknemlighet til brukeren PavelMSTU for verdifulle råd i planleggingen av studien og anbefalinger om utformingen av artikkelen.

Kilde: www.habr.com

Legg til en kommentar