Steganografie bez souborů: skrýváme data přímo v sektorech

Malé úvodní slovo

Steganografie, pokud si někdo nepamatuje, je skrývání informací v nějakých kontejnerech. Například v obrázcích (bylo to projednáno tady a tady). Také je možné skrýt data v systémových tabulkách souborového systému (o tom se psalo tady), a dokonce v systémových paketech protokolu TCP. Bohužel, všechny tyto metody mají jednu nevýhodu: abychom mohli nenápadně "vkládat" informace do kontejneru, potřebujeme složité algoritmy, které zohledňují vlastnosti vnitřní struktury kontejneru. A s odolností kontejneru vůči manipulacím vznikají problémy: například, pokud mírně upravíme obrázek, skryté informace se ztratí.

Je možné nějak se obejít bez složitých algoritmů a jemných manipulací s daty a přitom zajistit funkčnost kontejneru a přijatelnou úroveň ochrany skrytých dat? Odpověď je — ano, je to možné! A dokonce navrhnu utilitu.

Krveprolití podrobností metody

Hlavní myšlenka je jednoduchá jako úder kladivem do hlavy: na disku jsou oblasti, do kterých operační systém nikdy nepisuje (nebo píše ve vzácných případech). Abychom nemuseli tyto oblasti hledat složitými algoritmy, využijeme redundanci — to znamená, že naši skrytou informaci mnohokrát zkopírujeme po všech sektorech disku. Poté můžeme přímo nad tímto veškerým přepychu vytvářet potřebné oddíly, formátovat souborové systémy, zapisovat soubory a instalovat operační systémy — stejně část tajných dat zůstane zachována a dá se extrahovat, a mnohonásobná redundance nám pomůže složit z kousků původní celek.

Výhoda této metody je zřejmá: nezávisíme ani na formátu souborů, ani na typu používaného souborového systému.

Nevýhody jsou také, myslím, zřejmé:

  • Tajné údaje bude možné změnit pouze úplným přeopsáním celého disku, s následným obnovením viditelného obsahu pro uživatele. Přitom nelze používat software, který obnovuje disk z obrazu: obnoví i předchozí tajné údaje.
  • Čím větší je objem tajných údajů, tím větší je pravděpodobnost ztráty části informací.
  • Extrakce dat z disku může trvat hodně času. Od několika minut do několika dní (moderní disky jsou větší).

Teď přejdeme k detailům.

Je jasné, že pokud jen tak rozložíme tajné údaje po celém disku, budou skryty pouze před neozbrojeným okem. Pokud však ozbrojíme pohled, řekněme, diskovým editorem, data se ukáží v celé své kráse. Proto by bylo dobré, data zašifrovat, aby se neřešila. Šifrovat budeme jednoduše, ale s vkusem: podle algoritmu aes256-cbc. Klíč pro šifrování se zeptáme uživatele, ať si vymyslí dobré heslo.

Další otázka je, jak nám odlišit „správná“ data od poškozených. S tím nám pomůže kontrolní součet, a to ne ledajaký, ale SHA1. Proč ne? Pro git je dost dobrý, takže se pro nás také hodí. Rozhodnuto: každému uloženému fragmentu informace přidáme kontrolní součet, a pokud po dešifrování souhlasí — znamená to, že dešifrování bylo úspěšné.

Také budeme určitě potřebovat číslo fragmentu a celkovou délku tajných dat. Číslo fragmentu — abychom sledovali, které kousky jsme již dešifrovali, a které zbývají. Celková délka se nám hodí při zpracování posledního fragmentu, abychom nenapsali zbytečné údaje (to jest padding). A když už se nám stejně chystá hlavička, přidáme tam název tajného souboru. Ten nám bude užitečný po dešifrování, abychom nevykonávali zbytečné úvahy o tom, čím ho otevřít.

Otestujeme metodu v praxi.

K testování vezmeme nejrozšířenější médium — flash disk. Mám starý, 1 GB, což se pro experimenty dost hodí. Pokud vám, stejně jako mně, napadlo, že se nebudete trápit s fyzickými médii, ale otestujete to na souboru — obraze disku, tak hned řeknu: to nebude fungovat. Při formátování takového „disku“ Linux vytvoří soubor znovu a všechny nevyužité sektory budou vyplněny nulami.

Jako stroj s Linuxem, bohužel, jsem musel použít meteostanici na Raspberry Pi 3, co ležela na balkoně. Paměti tam není mnoho, takže velké soubory schovávat nebudeme. Omezíme se na maximální velikost 10 megabajtů. Příliš malé soubory také nemá smysl skrývat: utilitka píše data na disk po 4 kB klastrech. Proto se dole omezíme na soubor o velikosti 3 kB — ten se vejde do jednoho takového klastru.

S flash diskem se budeme zabývat postupně, přičemž po každém kroku zkontrolujeme, zda je skrytá informace čitelná:

  1. Rychlé formátování ve formátu FAT16 se velikostí clusteru 16 kB. To je to, co nabízí Windows 7 s flashdiskem, na kterém chybí souborový systém.
  2. Zaplňování flashdisku různým odpadem na 50 %.
  3. Zaplňování flashdisku různým odpadem na 100 %.
  4. „Dlouhé“ formátování ve formátu FAT16 (s přepsáním všeho).

První dva testy skončily očekávaným vítězstvím: utilita dokázala úspěšně vytáhnout 10 megabajtů tajných dat z flashdisku. Po tom, co byl flashdisk zcela naplněn soubory, však došlo k chybě:

Celkové přečtené shluky: 250752, dešifrované: 158
CHYBA: nelze zapisovat neúplný secretFile

Jak vidíme, podařilo se úspěšně dešifrovat pouze 158 clusterů (632 kB surových dat, což dává 636424 bajtů užitečné zátěže). Je jasné, že zde nelze nasbírat 10 megabajtů, a mezi těmito clustery jsou zjevně duplicity. Dokonce 1 megabajt takto již neobnovíme. Ale můžeme zaručit, že 3 kB tajných dat obnovíme z flashdisku i po jeho naformátování a opětovném naplnění. Nicméně experimenty ukazují, že z takového flashdisku je zcela možné vytáhnout soubor o velikosti 120 kB.

Poslední test bohužel ukázal, že flashdisk byl zcela přepsán:

$ sudo .\/steganodisk -p password \/dev\/sda
Velikost zařízení: 250752 klastry
250700 99%
Celkový počet přečtených clusterů: 250752, dešifrováno: 0
CHYBA: nelze zapisovat neúplný secretFile

Žádný cluster nezůstal... Je to smutné, ale ne tragické! Zkusíme před formátováním vytvořit na flashdisku oddíl a v něm souborový systém. Mimochodem, přišel z výroby právě s takovým formátováním, takže neděláme nic podezřelého.
Bylo celkem očekávané, že dostupné místo na flashdisku se mírně zmenšilo.

Také bylo celkem očekávané, že 10 megabajtů se přece jen nepodařilo skrýt na zcela zaplněném disku. Ale nyní se počet úspěšně dešifrovaných clusterů zvýšil více než dvakrát!

Celkový počet přečtených clusterů: 250752, dešifrovaných: 405

Megabajty, bohužel, nelze složit z kousků, ale 200 kilobajtů bez problémů.

A zpráva o posledním, 4. testu, tentokrát radostná: úplné formátování takového flashdisku nevedlo k zničení všech informací! 120 kB tajných dat se skvěle vešlo do nevyužívaného prostoru.

Souhrnná tabulka testování:

Steganografie bez souborů: skrýváme data přímo v sektorech

Trochu teoretizování: o volném místě a nevyužívaných sektorech

Pokud jste někdy rozdělili pevný disk na oddíly, mohli jste si všimnout, že není vždy možné přidělit veškeré volné místo na disku. První oddíl obvykle začíná s určitým odstupem (obvykle to je 1 megabajt, nebo 2048 sektorů). Za posledním oddílem také může zůstat malý "ocásek" z nevyužitých sektorů. A mezi oddíly někdy zůstávají mezery, i když ne často.

Jinými slovy, na disku existují sektory, ke kterým není přístup při běžném používání disku, ale data do těchto sektorů je možné zapsat! A tedy i přečíst. S přihlédnutím k tomu, že zde existuje ještě tabulka oddílů a zaváděcí kód, které jsou umístěny právě v prázdné oblasti na začátku disku.

Odvrhněme na chvíli oddíly a podívejme se na disk z výšky, takříkajíc, ptačí perspektivy. Máme na disku prázdný oddíl. Vytvoříme v něm souborový systém. Můžeme říci, že některé sektory na disku zůstaly nezapsané?

A-a-a — bubnování! Odpověď bude téměř vždy — ano! Vždyť ve většině případů se vytvoření souborového systému zčásti soustředí na zápis pouze několika bloků provozních informací na disk, zatímco obsah oddílu se jinak mění.

A také — čistě empiricky — lze předpokládat, že souborový systém nemůže vždy obsadit veškeré vyhrazené místo až do posledního sektoru. Například souborový systém FAT16 s velikostí clusteru 64 kilobajtů očividně nemůže plně obsadit oddíl o velikosti, která není násobkem 64 kilobajtů. Na konci takového oddílu zůstane "ocásek" několika sektorů, který nebude k dispozici pro ukládání uživatelských dat. Nicméně toto předpoklady nebylo experimentálně potvrzeno.

Takže, abychom maximalizovali místo dostupné pro steganogram, je třeba použít souborový systém s větší velikostí clusteru. Můžete také vytvořit oddíl, i když to není nutné (například na flash disku). Vytvářet prázdné oddíly nebo nechávat nevyužité oblasti není nutné — to přitáhne pozornost zvědavých občanů.

Nástroj pro experimenty

Zdroje nástroje si můžete osahat zde

Pro sestavení bude potřeba Qt verze 5.0 a vyšší a OpenSSL. Pokud něco nejde sestavit — možná budete muset upravit soubor steganodisk.pro.

Můžete změnit velikost clusteru z 4 KB na, dejme tomu, 512 bajtů (v secretfile.h). Přitom se zvýší náklady na správné informace: hlavička a kontrolní součet zabírají fixních 68 bajtů.

Utility je třeba spouštět samozřejmě s právy uživatele root, a to s opatrností. Nebudou žádné dotazy před přepsáním uvedeného souboru nebo zařízení!

Užijte si to.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster