Steganografija po datotekama: skrivanje podataka direktno u sektorima

Kratak predgovor

Steganografija, ako se neko ne sjeća, krije informacije u nekim kontejnerima. Na primjer, na slikama (o kojima se raspravljalo ovdje и ovdje). Također možete sakriti podatke u servisnim tabelama sistema datoteka (o tome je pisano ovdje), i čak u servisnim paketima TCP protokola. Nažalost, sve ove metode imaju jedan nedostatak: da biste neprimjetno "ubacili" informacije u kontejner, potrebni su vam lukavi algoritmi koji uzimaju u obzir posebnosti unutrašnje strukture kontejnera. I problemi nastaju s otpornošću spremnika na manipulaciju: na primjer, ako malo uredite sliku, skrivene informacije se gube.

Da li je moguće nekako proći bez lukavih algoritama i suptilnih manipulacija podacima, a ipak osigurati funkcionalnost kontejnera i prihvatljiv nivo sigurnosti skrivenih podataka? Gledajući unapred, reći ću - da, možete! Čak ću ponuditi i pomoćni program.

Krvavi detalji metode

Osnovna ideja je jednostavna kao udarac u čelo: postoje oblasti na disku na koje operativni sistem nikada ne upisuje (ili u retkim slučajevima piše). Da bismo izbjegli potrebu za traženjem ovih područja pomoću lukavih algoritama, koristit ćemo redundanciju - to jest, duplicirat ćemo naše skrivene informacije mnogo, mnogo puta u svim sektorima diska. Zatim, odmah na vrhu sveg ovog sjaja, možete kreirati potrebne particije, formatirati sisteme datoteka, pisati datoteke i instalirati OS - svejedno, dio tajnih podataka će biti sačuvan i može se preuzeti, a ponovljeno umnožavanje će nam pomoći sastavite originalnu celinu od delova.

Prednost ove metode je očigledna: ne zavisimo od formata datoteke, pa čak ni od tipa sistema datoteka koji se koristi.

Nedostaci su takođe, mislim, očigledni:

  • Tajni podaci mogu se promijeniti samo potpunim ponovnim pisanjem cijelog diska, nakon čega slijedi ponovno kreiranje sadržaja vidljivog korisniku. Međutim, ne možete koristiti softver koji ponovo kreira disk iz slike: on će također ponovo kreirati prethodne tajne podatke.
  • Što je veći obim tajnih podataka, veća je vjerovatnoća gubitka nekih informacija.
  • Preuzimanje podataka sa diska može potrajati dugo. Od nekoliko minuta do nekoliko dana (moderni diskovi su veliki).

Sada pređimo na pojedinosti.

Jasno je da ako tajne podatke jednostavno razmažete po cijelom disku, oni će biti skriveni samo od golog oka. Ako svoj pogled opremite, recimo, uređivačem diskova, podaci će se pojaviti u svom sjaju. Stoga bi bilo dobro šifrirati podatke tako da se ne pojavljuju. Šifrovaćemo jednostavno, ali sa ukusom: koristeći aes256-cbc algoritam. Zatražit ćemo od korisnika ključ za šifriranje i pustiti ga da smisli dobru lozinku.

Sljedeće pitanje je kako možemo razlikovati "dobre" podatke od loših podataka. Ovdje će nam pomoći kontrolni zbroj, ali ne jednostavan, već SHA1. I šta? Dovoljno je dobar za git, pa će i nama odgovarati. Odlučeno: svakoj pohranjenoj informaciji dajemo kontrolni zbroj, a ako se nakon dešifriranja podudara, to znači da je dešifriranje bilo uspješno.

Također će vam trebati broj fragmenta i ukupna dužina tajnih podataka. Broj fragmenta služi za praćenje koje smo dijelove već dešifrirali, a koji su ostali. Ukupna dužina će nam biti korisna prilikom obrade posljednjeg fragmenta, kako ne bismo pisali nepotrebne podatke (odnosno, padding). Pa, pošto još uvijek imamo zaglavlje, tamo ćemo dodati naziv tajne datoteke. Bit će korisno nakon dešifriranja, kako ne biste pogodili kako ga otvoriti.

Testiranje metode u praksi

Za provjeru, uzmimo najčešći medij - fleš disk. Našao sam staru kapaciteta 1 GB, koja je sasvim pogodna za eksperimente. Ako ste, poput mene, došli na ideju da se ne zamarate fizičkim medijima, već da ga testirate na datoteci - slici diska, onda ću odmah reći: neće raditi. Kada formatira takav „disk“, Linux ponovo kreira datoteku, a svi neiskorišteni sektori će biti popunjeni nulama.

Kao mašina sa Linuxom, nažalost, morao sam da koristim meteorološku stanicu na Raspberry Pi 3 koja leži na balkonu. Tamo nema puno memorije, tako da nećemo sakriti velike fajlove. Ograničavamo se na maksimalnu veličinu od 10 megabajta. Takođe nema smisla skrivati ​​datoteke koje su premale: uslužni program zapisuje podatke na disk u klasterima od 4 KB. Stoga ćemo se u nastavku ograničiti na datoteku od 3 kb - ona se uklapa u jedan takav klaster.

Ismijavat ćemo fleš disk u fazama, provjeravajući nakon svake faze da li su skrivene informacije čitljive:

  1. Brzo formatiranje u FAT16 formatu sa veličinom klastera od 16 KB. To je ono što Windows 7 nudi da radi sa fleš diskom koji nema sistem datoteka.
  2. Punjenje fleš diska svim vrstama smeća za 50%.
  3. Punjenje fleš diska svim vrstama smeća za 100%.
  4. “Dugo” formatiranje u FAT16 formatu (prepisivanje svega).

Prva dva testa, kao što se i očekivalo, završila su potpunom pobjedom: uslužni program je uspio izvući 10 megabajta tajnih podataka sa fleš diska. Ali nakon što je fleš disk bio popunjen do kapaciteta datotekama, dogodio se kvar:

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile

Kao što vidite, uspješno je dešifrovano samo 158 klastera (632 kilobajta sirovih podataka, što daje 636424 bajta korisnog opterećenja). Jasno je da ovdje ne postoji način da se dobije 10 megabajta, a ipak među ovim klasterima očito ima duplikata. Na ovaj način ne možete povratiti čak ni 1 megabajt. Ali možemo garantovati da ćemo oporaviti 3 kilobajta tajnih podataka sa fleš diska čak i nakon što je formatiran i upisan u kapacitet. Međutim, eksperimenti pokazuju da je sa takvog fleš diska sasvim moguće izdvojiti datoteku dugu 120 kilobajta.

Posljednji test je, nažalost, pokazao da je cijeli fleš disk prepisan:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile

Niti jedan grozd nije preživio... Tužno, ali ne i tragično! Prije formatiranja, pokušajmo napraviti particiju na fleš disku, a već u njoj sistem datoteka. Inače, došao je iz tvornice upravo sa ovim formatiranjem, tako da ne radimo ništa sumnjivo.
Sasvim je očekivano da se raspoloživi prostor na fleš disku neznatno smanjio.

Takođe je sasvim očekivano da se 10 megabajta ne može sakriti na potpuno punom disku. Ali sada se broj uspješno dešifriranih klastera više nego udvostručio!

Total clusters read: 250752, decrypted: 405

Nažalost, nemoguće je sastaviti megabajt od komada, ali dvije stotine kilobajta je lako.

Pa, vijest o posljednjoj, 4. provjeri, ovog puta je radosna: potpuno formatiranje takvog fleš diska nije dovelo do uništenja svih informacija! 120 kilobajta tajnih podataka savršeno se uklapa u neiskorišteni prostor.

Tabela sažetka testa:

Steganografija po datotekama: skrivanje podataka direktno u sektorima

Malo teoretiziranja: o slobodnom prostoru i neiskorištenim sektorima

Ako ste ikada podijelili svoj tvrdi disk na particije, možda ste primijetili da nije uvijek moguće dodijeliti sav slobodan prostor na disku. Prvi dio uvijek počinje nekim uvlačenjem (obično 1 megabajt ili 2048 sektora). Iza zadnjeg odeljka takođe se dešava da ostane mali „rep“ neiskorištenih sektora. I ponekad postoje praznine između sekcija, iako rijetko.

Drugim riječima, na disku postoje sektori kojima se ne može pristupiti tokom normalnog rada sa diskom, ali se podaci mogu upisivati ​​u te sektore! A to znači i čitanje. Prilagođeno tome da postoji i tabela particija i kod za pokretanje, koji se nalaze u praznom području na početku diska.

Odmorimo se malo od sekcija i pogledajmo disk iz ptičje perspektive, da tako kažem. Ovdje imamo praznu particiju na disku. Kreirajmo sistem datoteka u njemu. Možemo li reći da neki sektori na disku ostaju neizbrisani?

E-e-e - bubanj! Odgovor će skoro uvek biti da! Zaista, u većini slučajeva, kreiranje sistema datoteka se svodi na pisanje samo nekoliko blokova servisnih informacija na disk, a inače se sadržaj particije ne mijenja.

I također - čisto empirijski - možemo pretpostaviti da sistem datoteka ne može uvijek zauzimati sav prostor koji mu je dodijeljen do posljednjeg sektora. Na primjer, FAT16 sistem datoteka sa veličinom klastera od 64 kilobajta očigledno ne može u potpunosti zauzeti particiju čija veličina nije višestruka od 64 kilobajta. Na kraju takvog odjeljka morat će biti „rep“ od nekoliko sektora, nedostupnih za pohranjivanje korisničkih podataka. Međutim, ova se pretpostavka nije mogla eksperimentalno potvrditi.

Dakle, da biste maksimalno povećali raspoloživi prostor za steganogram, morate koristiti sistem datoteka sa većom veličinom klastera. Također možete kreirati particiju, čak i ako to nije potrebno (na primjer, na fleš disku). Nema potrebe praviti prazne sekcije ili ostavljati neraspoređena područja - to će privući pažnju zainteresovanih građana.

Uslužni program za eksperimente

Možete dodirnuti izvorni kod uslužnog programa ovdje

Da biste napravili, trebat će vam Qt verzija 5.0 ili novija i OpenSSL. Ako nešto ne radi, možda ćete morati urediti steganodisk.pro datoteku.

Možete promijeniti veličinu klastera sa 4 KB na, recimo, 512 bajtova (u secretfile.h). Istovremeno će se povećati cijena informacija o usluzi: zaglavlje i kontrolni zbroj zauzimaju fiksnih 68 bajtova.

Morate pokrenuti uslužni program, naravno, s root korisničkim pravima i s oprezom. Neće se postavljati pitanja prije prepisivanja određene datoteke ili uređaja!

Uživajte.

izvor: www.habr.com

Dodajte komentar