Steganografija datotečnog sustava

Hej Habr.

Želio bih vam predstaviti mali projekt na steganografija, napravio u slobodno vrijeme od učenja.

Napravio sam projekt o skrivenoj pohrani informacija u datotečnom sustavu (dalje FS).
To se može koristiti za krađu povjerljivih informacija u obrazovne svrhe.

Steganografija datotečnog sustava

Kao prototip odabran je vrlo stari Linux FS ext2.

Provedba

Razmatranja implementacije

Ako je dobro "raspetljati" ext2 standard, onda možeš zamijeniti da u FS-u postoji tzv. Superblokovi, koji daje osnovne informacije o sustavu. Nakon što sam pronađen Blokiraj bitmapu и Inode tablica. Gotovo odmah se rodila ideja o snimanju informacija u trenutno prazne FS blokove. Sada je vrijedilo razmišljati o zaštiti od naoružanog programera heksadecimalni uređivač.

Ako pohranjujete skrivene informacije bez enkripcije, tada će, čak i unatoč zamućenosti u FS-u, i dalje biti previše uočljive, pogotovo ako programer zna što treba tražiti. Stoga je odlučeno šifrirati sve blokove izvorne datoteke. Izabrao sam blok šifru AES, ali kao što razumijete, to nije važno.

Kako bi se prilikom čitanja odvojili potrebni blokovi od svih ostalih, odlučeno je dodati poseban marker svakom bloku na početku bloka. Ovaj je token bio šifriran ovisno o broju bloka u izvornoj datoteci. Ovaj trik je odmah omogućio ne samo pronalaženje potrebnih blokova, već i prepoznavanje njihovog ispravnog redoslijeda.

Opći princip rada sustava.

Steganografija datotečnog sustava

Algoritam snimanja

Bodovi:

  • Prvo napišite neke informacije u izvorni datotečni sustav;
  • Izbrišite ove podatke (ne nužno sve);
  • Datoteka koju treba sakriti podijeljena je u blokove jednake duljine, dodajući marker;
  • Šifrirajte ove blokove;
  • Stavite šifrirane blokove u prazne FS blokove.

Za ljubitelje blok dijagrama

Ispod je blok dijagram algoritma snimanja. Algoritam prima četiri datoteke kao ulaz:
-Slika datotečnog sustava koji se može mijenjati;
- Datoteka podvrgnuta steganografiji;
-Datoteka s ključem za šifriranje za AES;
-Datoteka s markerom.
Steganografija datotečnog sustava

Odmah je vrijedno napomenuti da ovaj algoritam ima jedan nedostatak: nakon pisanja datoteke u FS, ne mogu upišite bilo što novo u FS, budući da sve nove informacije mogu završiti u blokovima koje smo dodijelili našoj komprimiranoj datoteci, iako to također otvara mogućnost "brzog prikrivanja tragova".

Ali sasvim je očito kako se to može popraviti: potrebno je prepisati algoritam za pisanje blokova u FS. Ovo je razumljiv, ali nevjerojatno dugotrajan zadatak.
Za dokaz koncepta nisam ovo implementirao.

Kao rezultat toga, sljedeće promjene bit će napravljene u FS-u; ovako izgleda FS prije steganografije (prethodno je snimljena audio datoteka).
Steganografija datotečnog sustava
A ovako izgleda FS s već zapakiranim podacima.
Steganografija datotečnog sustava

Algoritam čitanja

Bodovi:

  • Uz poznavanje ključa i načina konstruiranja markera, sastaviti prvih N markera, uz jamstvo da je N pomnoženo s duljinom bloka datotečnog sustava veće od duljine komprimirane datoteke;
  • Tražite blokove u FS-u počevši od markera;
  • Dešifrirajte primljene blokove i odvojite oznake;
  • Skupite rezultirajuće blokove ispravnim redoslijedom i dohvatite izvornu datoteku.

Za ljubitelje blok dijagrama

Ispod je blok dijagram algoritma snimanja. Algoritam prima tri datoteke kao ulaz:
-Slika datotečnog sustava;
-Datoteka s ključem za šifriranje za AES;
-Datoteka s markerom.
Steganografija datotečnog sustava

Nakon što se program pokrene, pojavljuje se datoteka za čitanje, koja će biti datoteka ekstrahirana iz steganografiranog datotečnog sustava; ako je ključ ili marker naveden netočno, datoteka za čitanje bit će prazna.
(za ljubitelje ljepote, možete umetnuti ne samo datoteku, već i "zaglavlje" koje sadrži metainformacije: naziv datoteke, prava, vrijeme zadnje izmjene itd.)

Automatizacija pokretanja

Radi praktičnosti, bash skripte su napisane za automatiziranje pokretanja na Linuxu (testirano na Ubuntu 16.04.3 LTS).
Pogledajmo lansiranje korak po korak.
Snimiti:

  1. sudo Copy_Flash.sh “DEVICE” - dohvaćanje FS slike s UREĐAJA (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – kreirajte virtualno okruženje, preuzmite potrebne biblioteke i pokrenite skriptu za pisanje;
  3. sudo ./Write_Flash.sh “UREĐAJ” – ponovno zapišite promijenjeni FS na UREĐAJ.

Čitanje:

  1. sudo Copy_Flash.sh “DEVICE” - dohvaćanje FS slike s UREĐAJA (flash);
  2. ./Read.sh “KEY” 'MARKER” - kreirajte virtualno okruženje, preuzmite potrebne biblioteke i pokrenite preskakanje za čitanje;
  3. U trenutnom direktoriju otvorite datoteku Read - ovo su komprimirane informacije.

Zaključak

Ovu steganografsku metodu vjerojatno treba poboljšati, dodatno testirati i proširiti na popularnije datotečne sustave, kao što je Masnoća32, NTFS и ext4.
Ali svrha ovog rada bila je pokazati princip po kojem je moguće izvršiti skriveno pohranjivanje informacija u datotečnom sustavu.
Uz pomoć takvih algoritama možete neustrašivo pohraniti informacije, a ako je, ako znate ključ, moguće hakirati takav sustav ne grubom silom (već vrlo dugim algoritmom), onda bez poznavanja ključa, ovo Čini mi se da je sustav apsolutno stabilan, ali to može poslužiti kao razlog za poseban članak.

Sav kod implementiran je u Python verziji 3.5.2. Primjer rada predstavljen na mom youtube kanalu. Puni kod projekta objavljen je na Github.
(Da, da, znam da za produkcijsku verziju treba pisati nešto “brzo”, npr. C 😉)
U ovoj implementaciji, veličina ulazne datoteke za steganografiju ne smije biti veća od 1000 kB.

Želim izraziti svoju zahvalnost korisniku PavelMSTU za dragocjene savjete u planiranju studije i preporuke za dizajn članka.

Izvor: www.habr.com

Dodajte komentar