Steganografija pagal failus: duomenų slėpimas tiesiogiai sektoriuose

Trumpa pratarmė

Steganografija, jei kas neprisimena, kai kuriuose konteineriuose slepia informaciją. Pavyzdžiui, nuotraukose (aptarta čia и čia). Taip pat galite paslėpti duomenis failų sistemos paslaugų lentelėse (apie tai buvo parašyta čia), Ir netgi TCP protokolo paslaugų paketuose. Deja, visi šie metodai turi vieną trūkumą: norint nepastebimai „įterpti“ informaciją į konteinerį, reikia gudrių algoritmų, kurie atsižvelgtų į konteinerio vidinės struktūros ypatumus. Ir problemų kyla dėl konteinerio atsparumo manipuliavimui: pavyzdžiui, jei šiek tiek redaguojate paveikslėlį, paslėpta informacija prarandama.

Ar įmanoma kaip nors apsieiti be gudrių algoritmų ir subtilių manipuliacijų su duomenimis ir vis tiek užtikrinti konteinerio funkcionalumą bei priimtiną paslėptų duomenų saugumo lygį? Žvelgdamas į priekį, pasakysiu – taip, tu gali! Aš netgi pasiūlysiu naudingumą.

Kruvinos metodo detalės

Pagrindinė idėja paprasta kaip smūgis į kaktą: diske yra sričių, į kurias operacinė sistema niekada neįrašo (arba rašo retais atvejais). Kad nereikėtų ieškoti šių sričių naudojant gudrius algoritmus, naudosime dubliavimą – tai yra, daug daug kartų dubliuosime savo paslėptą informaciją visuose disko sektoriuose. Tada, ant viso šito puošnumo, galite kurti reikiamus skaidinius, formatuoti failų sistemas, rašyti failus ir įdiegti operacines sistemas – vis tiek dalis slaptų duomenų bus išsaugoti ir juos bus galima atkurti, o pasikartojantis dubliavimas mums padės. sudėkite originalią visumą iš gabalų.

Šio metodo pranašumas yra akivaizdus: mes nepriklausome nuo failo formato ar net nuo naudojamos failų sistemos tipo.

Trūkumai taip pat, manau, yra akivaizdūs:

  • Slaptus duomenis galima pakeisti tik visiškai perrašant visą diską, o po to iš naujo sukuriant vartotojui matomą turinį. Tačiau negalite naudoti programinės įrangos, kuri atkuria diską iš vaizdo: ji taip pat atkurs ankstesnius slaptus duomenis.
  • Kuo didesnis slaptų duomenų kiekis, tuo didesnė tikimybė prarasti dalį informacijos.
  • Duomenų gavimas iš disko gali užtrukti ilgai. Nuo kelių minučių iki kelių dienų (šiuolaikiniai diskai yra dideli).

Dabar pereikime prie specifikos.

Akivaizdu, kad jei slaptus duomenis tiesiog ištepsite po visą diską, jie bus tik paslėpti nuo plika akies. Jei savo žvilgsnį aprūpinsite, tarkime, disko redaktoriumi, duomenys bus rodomi visoje savo šlovėje. Todėl vertėtų duomenis užšifruoti, kad jie nepasirodytų. Užšifruosime paprastai, bet skoningai: naudodami aes256-cbc algoritmą. Mes paprašysime vartotojo šifravimo rakto ir leisime jam sugalvoti gerą slaptažodį.

Kitas klausimas yra, kaip galime atskirti „gerus“ duomenis nuo blogų duomenų. Čia mums padės kontrolinė suma, bet ne paprasta, o SHA1. Ir ką? Gitui užtenka, tad tiks ir mums. Nuspręsta: kiekvieną saugomą informaciją pateikiame su kontroline suma, o jei po iššifravimo ji sutampa, vadinasi, iššifravimas buvo sėkmingas.

Taip pat reikės fragmento numerio ir bendro slaptų duomenų ilgio. Fragmento numeris yra skirtas sekti, kuriuos gabalus jau iššifravome, o kurie liko. Bendras ilgis mums bus naudingas apdorojant paskutinį fragmentą, kad nerašytume nereikalingų duomenų (tai yra užpildymo). Na, kadangi vis dar turime antraštę, ten pridėsime slaptojo failo pavadinimą. Tai bus naudinga po iššifravimo, kad neatspėtumėte, kaip jį atidaryti.

Metodo išbandymas praktiškai

Norėdami patikrinti, paimkime labiausiai paplitusią laikmeną - „flash drive“. Radau seną 1 GB talpos, visai tinkantį eksperimentams. Jei jūs, kaip ir aš, sugalvojote nesijaudinti su fizine laikmena, o išbandyti ją faile - disko atvaizde, tada iš karto pasakysiu: tai neveiks. Formatuojant tokį „disko“, „Linux“ vėl sukuria failą, o visi nenaudojami sektoriai bus užpildyti nuliais.

Kaip mašinai su Linux, deja, teko naudoti oro stotį ant balkone gulinčio Raspberry Pi 3. Atminties ten nedaug, tad didelių failų neslėpsime. Apribojame save iki didžiausio 10 megabaitų dydžio. Taip pat nėra prasmės slėpti per mažus failus: programa įrašo duomenis į diską 4 KB klasteriuose. Todėl žemiau apsiribosime 3 kb failu – jis telpa į vieną tokį klasterį.

Iš „flash drive“ tyčiosimės etapais, po kiekvieno etapo tikrindami, ar paslėpta informacija yra įskaitoma:

  1. Greitas formatavimas FAT16 formatu su 16 KB klasterio dydžiu. Štai ką „Windows 7“ siūlo daryti su „flash drive“, kuriame nėra failų sistemos.
  2. 50% užpildykite „flash drive“ visomis šiukšlėmis.
  3. 100% užpildykite „flash drive“ visomis šiukšlėmis.
  4. „Ilgas“ formatavimas FAT16 formatu (viskas perrašoma).

Pirmieji du bandymai, kaip ir tikėtasi, baigėsi visiška pergale: programa sugebėjo iš „flash drive“ sėkmingai išgauti 10 megabaitų slaptų duomenų. Tačiau po to, kai „flash drive“ buvo užpildyta failais, įvyko gedimas:

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

Kaip matote, tik 158 klasteriai buvo sėkmingai iššifruoti (632 kilobaitai neapdorotų duomenų, o tai suteikia 636424 10 baitus naudingos apkrovos). Akivaizdu, kad čia nėra galimybės gauti 1 megabaitų, tačiau tarp šių grupių yra aiškiai pasikartojančių. Tokiu būdu net negalite atkurti 3 megabaito. Bet galime garantuoti, kad atkursime 120 kilobaitus slaptų duomenų iš „flash drive“ net jį suformatavus ir įrašius iki talpos. Tačiau eksperimentai rodo, kad iš tokio „flash drive“ visiškai įmanoma išgauti XNUMX kilobaitų ilgio failą.

Paskutinis testas, deja, parodė, kad visas „flash drive“ buvo perrašytas:

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

Neišliko nei vienas klasteris... Liūdna, bet ne tragiška! Prieš formatuodami pabandykime sukurti skaidinį „flash drive“ ir jau jame failų sistemą. Beje, jis atkeliavo iš gamyklos būtent tokiu formatu, tad nieko įtartino nedarome.
Tikėtina, kad laisvos vietos „flash drive“ šiek tiek sumažėjo.

Taip pat gana tikėtina, kad 10 megabaitų nepavyks paslėpti visiškai pilname diske. Tačiau dabar sėkmingai iššifruotų grupių skaičius išaugo daugiau nei dvigubai!

Total clusters read: 250752, decrypted: 405

Deja, neįmanoma surinkti megabaito iš gabalų, bet du šimtus kilobaitų yra lengva.

Na, o žinia apie paskutinį, 4-ąjį patikrinimą, šį kartą džiugina: visiškai suformatavus tokį „flash“ diską, visa informacija nebuvo sunaikinta! 120 kilobaitų slaptų duomenų puikiai telpa nenaudojamoje erdvėje.

Bandymo suvestinė lentelė:

Steganografija pagal failus: duomenų slėpimas tiesiogiai sektoriuose

Šiek tiek teorijos: apie laisvą erdvę ir nenaudojamus sektorius

Jei kada nors padalijote standųjį diską į skaidinius, galbūt pastebėjote, kad ne visada įmanoma paskirstyti visą laisvą vietą diske. Pirmasis skyrius visada prasideda tam tikra įtrauka (dažniausiai 1 megabaitas arba 2048 sektoriai). Už paskutinės sekcijos taip pat atsitinka, kad lieka maža nenaudojamų sektorių „uodega“. Ir kartais tarp sekcijų yra tarpų, nors ir retai.

Kitaip tariant, diske yra sektorių, kurių negalima pasiekti normaliai dirbant su disku, tačiau duomenis galima įrašyti į šiuos sektorius! O tai reiškia ir perskaityti. Pakoreguota dėl to, kad taip pat yra skaidinių lentelė ir įkrovos įkrovos kodas, kurie yra tuščioje disko pradžioje.

Truputį pailsėkime nuo skyrių ir pažiūrėkime į diską, taip sakant, iš paukščio skrydžio. Čia mes turime tuščią disko skaidinį. Sukurkime joje failų sistemą. Ar galime pasakyti, kad kai kurie disko sektoriai lieka neištrinti?

E-e-e - būgno ritinys! Atsakymas beveik visada bus taip! Iš tiesų, daugeliu atvejų kuriant failų sistemą į diską reikia įrašyti tik kelis paslaugų informacijos blokus, o kitu atveju skaidinio turinys nesikeičia.

Taip pat – grynai empiriškai – galime daryti prielaidą, kad failų sistema ne visada gali užimti visą jai skirtą erdvę iki paskutinio sektoriaus. Pavyzdžiui, FAT16 failų sistema, kurios klasterio dydis yra 64 kilobaitai, akivaizdžiai negali visiškai užimti skaidinio, kurio dydis nėra 64 kilobaitų kartotinis. Tokio skyriaus pabaigoje turės būti kelių sektorių „uodega“, neprieinama vartotojo duomenims saugoti. Tačiau šios prielaidos eksperimentiškai patvirtinti nepavyko.

Taigi, norėdami maksimaliai padidinti steganogramai skirtą vietą, turite naudoti failų sistemą su didesniu klasterio dydžiu. Taip pat galite sukurti skaidinį, net jei tai nėra būtina (pavyzdžiui, „flash drive“). Nereikia kurti tuščių ruožų ar palikti nepaskirstytų plotų – tai atkreips susidomėjusių miestiečių dėmesį.

Naudingumas eksperimentams

Galite paliesti programos šaltinio kodą čia

Norėdami sukurti, jums reikės Qt 5.0 ar naujesnės versijos ir OpenSSL. Jei kažkas neveikia, gali tekti redaguoti steganodisk.pro failą.

Galite pakeisti klasterio dydį nuo 4 KB iki, tarkime, 512 baitų (secretfile.h). Tuo pačiu padidės paslaugos informacijos kaina: antraštė ir kontrolinė suma užima fiksuotus 68 baitus.

Žinoma, turite paleisti programą su root vartotojo teisėmis ir atsargiai. Nebus jokių klausimų prieš perrašant nurodytą failą ar įrenginį!

Mėgautis.

Šaltinis: www.habr.com

Добавить комментарий