Hej Habr.
Želio bih vam predstaviti mali projekt na
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.
Kao prototip odabran je vrlo stari Linux FS
Provedba
Razmatranja implementacije
Ako je dobro "raspetljati" ext2 standard, onda možeš zamijeniti da u FS-u postoji tzv.
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
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.
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.
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).
A ovako izgleda FS s već zapakiranim podacima.
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.
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:
- sudo Copy_Flash.sh “DEVICE” - dohvaćanje FS slike s UREĐAJA (flash);
- ./Write.sh “FILE” “KEY” “MARKER” – kreirajte virtualno okruženje, preuzmite potrebne biblioteke i pokrenite skriptu za pisanje;
- sudo ./Write_Flash.sh “UREĐAJ” – ponovno zapišite promijenjeni FS na UREĐAJ.
Čitanje:
- sudo Copy_Flash.sh “DEVICE” - dohvaćanje FS slike s UREĐAJA (flash);
- ./Read.sh “KEY” 'MARKER” - kreirajte virtualno okruženje, preuzmite potrebne biblioteke i pokrenite preskakanje za čitanje;
- 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
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.
(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
Izvor: www.habr.com