Steganografia minulých súborov: skrytie údajov priamo v sektoroch

Krátky predslov

Steganografia, ak si niekto nepamätá, skrýva informácie v niektorých kontajneroch. Napríklad na obrázkoch (diskutované tu и tu). Môžete tiež skryť údaje v servisných tabuľkách súborového systému (o tom sa písalo tu), a dokonca v servisných paketoch protokolu TCP. Bohužiaľ, všetky tieto metódy majú jednu nevýhodu: na nepostrehnuteľné „vloženie“ informácií do kontajnera potrebujete prefíkané algoritmy, ktoré zohľadňujú zvláštnosti vnútornej štruktúry kontajnera. A problémy vznikajú s odolnosťou kontajnera voči manipulácii: ak napríklad mierne upravíte obrázok, skryté informácie sa stratia.

Dá sa nejako zaobísť bez prefíkaných algoritmov a jemných manipulácií s údajmi a pritom zabezpečiť funkčnosť kontajnera a prijateľnú úroveň bezpečnosti skrytých údajov? Pri pohľade do budúcnosti poviem - áno, môžete! Dokonca ponúknem aj pomôcku.

Krvavé detaily metódy

Základná myšlienka je jednoduchá ako rana do čela: na disku sú oblasti, na ktoré operačný systém nikdy nezapisuje (alebo v zriedkavých prípadoch zapisuje). Aby sme sa vyhli potrebe hľadať tieto oblasti pomocou prefíkaných algoritmov, použijeme redundanciu – to znamená, že budeme naše skryté informácie duplikovať mnohokrát vo všetkých sektoroch disku. Potom, priamo na vrchole celej tejto nádhery, môžete vytvárať potrebné oddiely, formátovať súborové systémy, zapisovať súbory a inštalovať operačné systémy – napriek tomu sa časť tajných údajov uloží a bude možné ich získať, pričom nám pomôže opakované duplikovanie. poskladať pôvodný celok z dielikov.

Výhoda tejto metódy je zrejmá: nie sme závislí od formátu súboru, ba ani od typu použitého súborového systému.

Nevýhody sú tiež, myslím, zrejmé:

  • Tajné údaje je možné zmeniť iba úplným prepísaním celého disku a následným opätovným vytvorením obsahu viditeľného pre používateľa. Nemôžete však použiť softvér, ktorý znova vytvorí disk z obrazu: obnoví aj predchádzajúce tajné údaje.
  • Čím väčší je objem tajných údajov, tým väčšia je pravdepodobnosť straty niektorých informácií.
  • Načítanie údajov z disku môže trvať dlho. Od niekoľkých minút až po niekoľko dní (moderné disky sú veľké).

Teraz prejdime ku špecifikám.

Je jasné, že ak jednoducho rozmažete tajné dáta po celom disku, budú skryté len pred voľným okom. Ak svoj pohľad vybavíte povedzme diskovým editorom, údaje sa objavia v plnej kráse. Preto by bolo dobré dáta zašifrovať, aby sa nezobrazovali. Šifrovať budeme jednoducho, ale vkusne: pomocou algoritmu aes256-cbc. Požiadame používateľa o šifrovací kľúč a necháme ho, aby vymyslel dobré heslo.

Ďalšou otázkou je, ako môžeme rozlíšiť „dobré“ údaje od zlých údajov. Tu nám pomôže kontrolný súčet, ale nie jednoduchý, ale SHA1. A čo? Pre git je dosť dobrý, takže sa bude hodiť aj nám. Rozhodnuté: ku každej uloženej informácii poskytujeme kontrolný súčet a ak sa po dešifrovaní zhoduje, znamená to, že dešifrovanie bolo úspešné.

Budete tiež potrebovať číslo fragmentu a celkovú dĺžku tajných údajov. Číslo fragmentu slúži na sledovanie toho, ktoré kúsky sme už rozlúštili a ktoré zostali. Celková dĺžka sa nám bude hodiť pri spracovaní posledného fragmentu, aby sme nezapisovali zbytočné dáta (teda padding). Keďže stále máme hlavičku, pridáme tam názov tajného súboru. Bude to užitočné po dešifrovaní, aby ste nehádali, ako ho otvoriť.

Testovanie metódy v praxi

Na kontrolu si vezmime najbežnejšie médium - flash disk. Našiel som starý s kapacitou 1 GB, ktorý sa na experimenty celkom hodí. Ak ste, ako ja, prišli s myšlienkou neobťažovať sa fyzickými médiami, ale testovať ich na súbore - obraz disku, potom hneď poviem: nebude to fungovať. Pri formátovaní takéhoto „disku“ Linux vytvorí súbor znova a všetky nepoužité sektory budú vyplnené nulami.

Ako stroj s Linuxom som, žiaľ, musel použiť meteorologickú stanicu na Raspberry Pi 3 ležiacom na balkóne. Nie je tam veľa pamäte, takže nebudeme skrývať veľké súbory. Obmedzujeme sa na maximálnu veľkosť 10 megabajtov. Nemá zmysel skrývať príliš malé súbory: nástroj zapisuje údaje na disk v klastroch s veľkosťou 4 kB. Preto sa nižšie obmedzíme na súbor s veľkosťou 3 kb - zmestí sa do jedného takého zhluku.

Flash disk zosmiešnime postupne a po každej fáze skontrolujeme, či sú skryté informácie čitateľné:

  1. Rýchle formátovanie vo formáte FAT16 s veľkosťou klastra 16 KB. To je to, čo Windows 7 ponúka robiť s flash diskom, ktorý nemá súborový systém.
  2. Naplnenie flash disku všetkými druhmi odpadu o 50%.
  3. Naplnenie flash disku všetkými druhmi odpadu o 100%.
  4. „Dlhé“ formátovanie vo formáte FAT16 (prepíše všetko).

Prvé dva testy, ako sa očakávalo, skončili úplným víťazstvom: obslužnému programu sa podarilo úspešne extrahovať 10 megabajtov tajných údajov z flash disku. Po naplnení kapacity jednotky flash súbormi však došlo k zlyhaniu:

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

Ako vidíte, iba 158 klastrov bolo úspešne dešifrovaných (632 kilobajtov nespracovaných údajov, čo dáva 636424 10 bajtov užitočného zaťaženia). Je jasné, že tu nie je možné získať 1 megabajtov, a predsa medzi týmito klastrami sú jednoznačne duplikáty. Týmto spôsobom nemôžete obnoviť ani 3 megabajt. Môžeme však zaručiť, že z flash disku obnovíme 120 kilobajty tajných údajov aj po jeho naformátovaní a zapísaní do kapacity. Experimenty však ukazujú, že z takéhoto flash disku je celkom možné extrahovať súbor dlhý XNUMX kilobajtov.

Posledný test, žiaľ, ukázal, že bol prepísaný celý flash disk:

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

Nezachoval sa ani jeden zhluk... Smutné, ale nie tragické! Pred formátovaním sa pokúsme vytvoriť oddiel na jednotke flash a už v ňom systém súborov. Ten mimochodom prišiel z výroby presne s týmto formátovaním, takže nerobíme nič podozrivé.
Dá sa celkom očakávať, že dostupný priestor na flash disku sa mierne zmenšil.

Celkom očakávané je aj to, že 10 megabajtov sa nedalo ukryť na úplne zaplnený disk. Teraz sa však počet úspešne dešifrovaných klastrov viac ako zdvojnásobil!

Total clusters read: 250752, decrypted: 405

Nanešťastie nie je možné zostaviť megabajt z kúskov, ale dvesto kilobajtov je ľahké.

Správa o poslednej, štvrtej kontrole je tentokrát radostná: úplné naformátovanie takejto jednotky flash neviedlo k zničeniu všetkých informácií! 4 kilobajtov tajných dát sa perfektne zmestí do nevyužitého priestoru.

Súhrnná tabuľka testu:

Steganografia minulých súborov: skrytie údajov priamo v sektoroch

Trochu teoretizovania: o voľnom priestore a nevyužitých sektoroch

Ak ste niekedy rozdelili pevný disk na oddiely, možno ste si všimli, že nie vždy je možné na disku prideliť všetok voľný priestor. Prvá časť vždy začína nejakým odsadením (zvyčajne 1 megabajt alebo 2048 sektorov). Za poslednou sekciou sa tiež stáva, že zostáva malý „chvost“ nevyužitých sektorov. A niekedy sú medzi sekciami medzery, aj keď zriedka.

Inými slovami, na disku sú sektory, ku ktorým sa pri bežnej práci s diskom nedá dostať, no do týchto sektorov sa dajú zapisovať dáta! A to znamená aj prečítať si to. Upravené o to, že je tu aj tabuľka oddielov a kód bootloadera, ktoré sa nachádzajú v prázdnej oblasti na začiatku disku.

Poďme si na chvíľu od úsekov oddýchnuť a pozrieť sa na disk takpovediac z vtáčej perspektívy. Tu máme prázdnu partíciu na disku. Vytvorme v ňom súborový systém. Dá sa povedať, že niektoré sektory na disku zostanú nevymazané?

E-e-e - bubon! Odpoveď bude takmer vždy áno! Vo väčšine prípadov vytvorenie súborového systému skutočne spočíva v zapísaní iba niekoľkých blokov servisných informácií na disk a inak sa obsah oddielu nemení.

A tiež - čisto empiricky - môžeme predpokladať, že súborový systém nemôže vždy zaberať celý priestor, ktorý je mu pridelený, až do posledného sektora. Napríklad súborový systém FAT16 s veľkosťou klastra 64 kilobajtov zjavne nemôže úplne obsadiť oddiel s veľkosťou, ktorá nie je násobkom 64 kilobajtov. Na konci takejto časti bude musieť byť „chvost“ niekoľkých sektorov, neprístupných pre ukladanie používateľských údajov. Tento predpoklad sa však nepodarilo experimentálne potvrdiť.

Takže, aby ste maximalizovali priestor dostupný pre steganogram, musíte použiť súborový systém s väčšou veľkosťou klastra. Môžete tiež vytvoriť oddiel, aj keď to nie je potrebné (napríklad na jednotke flash). Nie je potrebné vytvárať prázdne úseky alebo nechávať nepridelené plochy – to pritiahne pozornosť zainteresovaných občanov.

Pomôcka pre experimenty

Môžete sa dotknúť zdrojového kódu pomôcky tu

Na zostavenie budete potrebovať Qt verziu 5.0 alebo vyššiu a OpenSSL. Ak niečo nefunguje, možno budete musieť upraviť súbor steganodisk.pro.

Veľkosť klastra môžete zmeniť zo 4 KB na povedzme 512 bajtov (v secretfile.h). Zároveň sa zvýšia náklady na servisné informácie: hlavička a kontrolný súčet zaberajú pevných 68 bajtov.

Pomôcku musíte spustiť, samozrejme, s právami užívateľa root a opatrne. Pred prepísaním zadaného súboru alebo zariadenia nebudú kladené žiadne otázky!

Užite si to.

Zdroj: hab.com

Pridať komentár