Steganografija u sistemu datoteka

Hej Habr.

Želim da vam predstavim jedan mali projekat steganografijapravio u slobodno vreme.

Napravio sam projekat o skrivenom skladištenju informacija u sistemu datoteka (dalje FS).
Ovo se može koristiti za krađu povjerljivih informacija u obrazovne svrhe.

Steganografija u sistemu datoteka

Za prototip je izabran veoma stari Linux FS ext2.

Реализация

Razmatranja o implementaciji

Ako je dobro "iritirati" ext2 standard, onda možemo zamijeniti da u FS postoji tzv. superblokovi, koji pruža osnovne informacije o sistemu. Nakon što su me našli blok bitmap и Inode Table. Gotovo odmah se rodila ideja ​​zapisivanja informacija u trenutno prazne FS blokove. Sada je vrijedilo razmisliti o zaštiti od programera naoružanog hex editor.

Ako pohranite skrivene informacije bez šifriranja, onda će, iako su mutne u FS-u, i dalje biti previše upadljive, pogotovo ako programer zna šta treba tražiti. Stoga je odlučeno da se šifriraju svi blokovi izvorne datoteke. Izabrao sam blok šifru AES, ali kao što vidite, nije važno.

Kako bi se prilikom čitanja odvojili potrebni blokovi od svih ostalih, odlučeno je da se doda poseban marker svakom bloku na početku bloka. Ovaj marker je šifriran ovisno o broju bloka u izvornom fajlu. Takav trik je odmah omogućio ne samo pronalaženje pravih blokova, već i njihov ispravan redoslijed.

Opšti princip sistema.

Steganografija u sistemu datoteka

Napiši algoritam

Bodovi:

  • Prvo, upišite neke informacije u originalni sistem datoteka;
  • Izbrišite ove informacije (ne nužno sve);
  • Podijelite datoteku da se sakrijete na blokove iste dužine dodavanjem markera;
  • Šifrirajte ove blokove;
  • Postavite šifrirane blokove u prazne FS blokove.

Za ljubitelje dijagrama toka

Ispod je blok dijagram algoritma snimanja. Algoritam prima četiri fajla kao ulaz:
-Slika promjenjivog sistema datoteka;
-Dosije podvrgnut steganografiji;
-Datoteka sa ključem za šifrovanje za AES;
-Dosije sa markerom.
Steganografija u sistemu datoteka

Odmah treba napomenuti da ovaj algoritam ima jedan nedostatak: nakon pisanja datoteke u FS, ne može napišite nešto novo u FS, jer svaka nova informacija može dospjeti u blokove koje smo dodijelili našoj zip datoteci, iako to također otvara mogućnost „brzog prikrivanja tragova“.

Ali sasvim je očigledno kako se to može popraviti: potrebno je prepisati algoritam za upisivanje blokova u FS. Ovo je razumljiv, ali nevjerovatno dugotrajan zadatak.
Za Proof Of Consept, ovo nisam implementirao.

Rezultat će biti sljedeće promjene u FS-u, ovako je FS izgledao prije steganografije (prethodno je snimljen audio fajl).
Steganografija u sistemu datoteka
A ovako izgleda FS sa već zipovanim informacijama.
Steganografija u sistemu datoteka

Algoritam čitanja

Bodovi:

  • Sa poznavanjem ključa i metode konstruisanja markera, sastavite prvih N markera, uz garanciju da je N pomnoženo sa dužinom bloka sistema datoteka veće od dužine zipovanog fajla;
  • Traži blokove u FS počevši od markera;
  • Dešifrirajte primljene blokove i zasebne markere;
  • Sastavite rezultirajuće blokove ispravnim redoslijedom i nabavite izvorni fajl.

Za ljubitelje dijagrama toka

Ispod je blok dijagram algoritma snimanja. Algoritam prima tri fajla kao ulaz:
- Sistem datoteka slika;
-Datoteka sa ključem za šifrovanje za AES;
-Dosije sa markerom.
Steganografija u sistemu datoteka

Nakon što se program pokrene, pojavljuje se Read datoteka, koja će biti datoteka ekstrahirana iz steganografskog FS-a, ako je ključ ili marker pogrešno naveden, tada će datoteka Read biti prazna.
(za ljubitelje lepote, možete umetnuti ne samo fajl, već i "zaglavlje" koje sadrži meta-informacije: naziv fajla, prava, vreme poslednje izmene, itd.)

Pokrenite automatizaciju

Radi praktičnosti, napisane su bash skripte koje automatizuju pokretanje na Linuxu (testirano na Ubuntu 16.04.3 LTS).
Pogledajmo pokretanje korak po korak.
Record:

  1. sudo Copy_Flash.sh "DEVICE" - preuzmite sliku FS sa UREĐAJA (flash);
  2. ./Write.sh "FILE" "KEY" "MARKER" - kreirajte virtuelno okruženje, preuzmite potrebne biblioteke i pokrenite skriptu za pisanje;
  3. sudo ./Write_Flash.sh "DEVICE" - zapišite izmijenjeni FS nazad na UREĐAJ.

Čitanje:

  1. sudo Copy_Flash.sh "DEVICE" - preuzmite sliku FS sa UREĐAJA (flash);
  2. ./Read.sh “KEY” 'MARKER” - kreirajte virtuelno okruženje, preuzmite potrebne biblioteke i pokrenite skriptu za čitanje;
  3. U trenutnom direktoriju otvorite datoteku Read - ovo je zipovana informacija.

zaključak

Ovu metodu steganografije vjerovatno treba poboljšati, dodatno testirati i proširiti na popularnije sisteme datoteka kao što su npr fat32, NTFS и ext4.
Ali svrha ovog rada bila je pokazati princip po kojem je moguće izvršiti skriveno skladištenje informacija u sistemu datoteka.
Uz pomoć takvih algoritama, možete neustrašivo pohranjivati ​​informacije, a ako se, uz poznavanje ključa, takav sistem može hakirati ne iscrpnom pretragom (već vrlo dugim algoritmom), onda bez poznavanja ključa ovaj sistem čini mi se apsolutno stabilnim, međutim, to može poslužiti kao razlog za poseban članak.

Sav kod je implementiran u Python verziji 3.5.2. Primjer rada istaknuto na mom youtube kanalu. Kompletna šifra projekta dostupna je na adresi GitHub.
(Da, da, znam da za produkcijsku verziju trebate napisati nešto "brzo", na primjer, u C 😉 )
U ovoj implementaciji, veličina ulazne datoteke za steganografiju ne bi trebala prelaziti 1000 kB.

Želim da se zahvalim korisniku PavelMSTU za vrijedne savjete u planiranju studije i preporuke za dizajn članka.

izvor: www.habr.com

Dodajte komentar