Steganografie podle souborů: skrytí dat přímo v sektorech

Malá předmluva

Steganografie, pokud si někdo nepamatuje, skrývá informace v některých kontejnerech. Například na obrázcích (diskutováno zde и zde). Můžete také skrýt data v servisních tabulkách souborového systému (o tom bylo psáno zde), a dokonce v servisních paketech protokolu TCP. Bohužel všechny tyto metody mají jednu nevýhodu: abyste mohli nepostřehnutelně „vložit“ informace do kontejneru, potřebujete mazané algoritmy, které berou v úvahu zvláštnosti vnitřní struktury kontejneru. A problémy vznikají s odolností kontejneru vůči manipulaci: pokud například obrázek mírně upravíte, skryté informace se ztratí.

Je možné se nějak obejít bez mazaných algoritmů a rafinovaných manipulací s daty a přitom zajistit funkčnost kontejneru a přijatelnou úroveň zabezpečení skrytých dat? Při pohledu dopředu řeknu - ano, můžete! Dokonce vám nabídnu utilitu.

Krvavé detaily metody

Základní myšlenka je jednoduchá jako rána do čela: na disku jsou oblasti, na které operační systém nikdy nezapisuje (nebo zapisuje ve vzácných případech). Abychom se vyhnuli nutnosti hledat tyto oblasti pomocí mazaných algoritmů, použijeme redundanci – to znamená, že budeme naše skryté informace duplikovat mnoho, mnohokrát napříč všemi sektory disku. Pak můžete přímo na vrcholu vší té nádhery vytvářet potřebné oddíly, formátovat souborové systémy, zapisovat soubory a instalovat operační systémy - stejně bude část tajných dat uložena a lze je získat a opakované duplikování nám pomůže poskládat z dílků původní celek.

Výhoda této metody je zřejmá: nejsme závislí na formátu souboru, dokonce ani na typu použitého souborového systému.

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

  • Tajná data lze změnit pouze úplným přepsáním celého disku a následným opětovným vytvořením obsahu viditelného pro uživatele. Nemůžete však použít software, který znovu vytvoří disk z obrazu: obnoví také předchozí tajná data.
  • Čím větší je objem tajných dat, tím větší je pravděpodobnost ztráty některých informací.
  • Načítání dat z disku může trvat dlouho. Od několika minut po několik dní (moderní disky jsou velké).

Nyní přejděme ke specifikům.

Je jasné, že pokud tajná data jednoduše rozmažete po celém disku, budou skryta pouze před pouhým okem. Pokud svůj pohled vybavíte dejme tomu diskovým editorem, data se objeví v celé své kráse. Proto by bylo dobré data zašifrovat, aby se nezobrazovala. Šifrovat budeme jednoduše, ale vkusně: pomocí algoritmu aes256-cbc. Požádáme uživatele o šifrovací klíč a necháme ho vymyslet dobré heslo.

Další otázkou je, jak můžeme rozlišit „dobrá“ data od špatných dat. Zde nám pomůže kontrolní součet, ale ne jednoduchý, ale SHA1. a co? Pro git je dost dobrý, takže se bude hodit i nám. Rozhodnuto: ke každé uložené informaci poskytujeme kontrolní součet, a pokud se po dešifrování shoduje, znamená to, že dešifrování bylo úspěšné.

Budete také potřebovat číslo fragmentu a celkovou délku tajných dat. Číslo fragmentu má sledovat, které kousky jsme již rozluštili a které zbývají. Celková délka se nám bude hodit při zpracování posledního fragmentu, abychom nezapisovali zbytečná data (tedy padding). Protože stále máme záhlaví, přidáme tam název tajného souboru. Bude to užitečné po dešifrování, abyste nehádali, jak jej otevřít.

Vyzkoušení metody v praxi

Pro kontrolu si vezmeme nejběžnější médium – flash disk. Našel jsem starý s kapacitou 1 GB, který se na experimenty docela hodí. Pokud jste stejně jako já přišli s myšlenkou neobtěžovat se fyzickými médii, ale otestovat je na souboru - obrazu disku, pak hned řeknu: nebude to fungovat. Při formátování takového „disku“ Linux vytvoří soubor znovu a všechny nepoužité sektory budou vyplněny nulami.

Jako stroj s Linuxem jsem bohužel musel použít meteostanici na Raspberry Pi 3 ležící na balkóně. Není tam moc paměti, takže nebudeme schovávat velké soubory. Omezujeme se na maximální velikost 10 megabajtů. Také nemá smysl skrývat příliš malé soubory: obslužný program zapisuje data na disk ve 4 KB clusterech. Níže se proto omezíme na soubor o velikosti 3 kb – vejde se do jednoho takového clusteru.

Flash disk budeme zesměšňovat postupně a po každé fázi zkontrolujeme, zda jsou skryté informace čitelné:

  1. Rychlé formátování ve formátu FAT16 s velikostí clusteru 16 KB. To je to, co Windows 7 nabízí dělat s flash diskem, který nemá souborový systém.
  2. Zaplnění flash disku všemi druhy odpadu o 50%.
  3. Zaplnění flash disku všemi druhy odpadu o 100%.
  4. „Dlouhé“ formátování ve formátu FAT16 (přepsání všeho).

První dva testy podle očekávání skončily úplným vítězstvím: nástroj dokázal úspěšně extrahovat 10 megabajtů tajných dat z flash disku. Po zaplnění kapacity jednotky flash soubory však došlo k chybě:

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

Jak vidíte, bylo úspěšně dešifrováno pouze 158 klastrů (632 kilobajtů nezpracovaných dat, což dává 636424 10 bajtů užitečného zatížení). Je jasné, že zde není žádný způsob, jak získat 1 megabajtů, a přesto jsou mezi těmito clustery zjevně duplikáty. Tímto způsobem nemůžete obnovit ani 3 megabajt. Můžeme ale zaručit, že obnovíme 120 kilobajty tajných dat z flash disku i poté, co bude naformátován a zapsán do kapacity. Experimenty však ukazují, že z takového flash disku je docela možné extrahovat soubor dlouhý XNUMX kilobajtů.

Poslední test bohužel ukázal, že byl přepsán 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 se ani jeden shluk... Smutné, ale ne tragické! Před formátováním se pokusíme vytvořit oddíl na flash disku a již v něm souborový systém. Mimochodem přesně s tímto formátováním přišel z výroby, takže neděláme nic podezřelého.
Dá se celkem očekávat, že dostupné místo na flash disku mírně ubylo.

Poměrně se také očekává, že na zcela zaplněném disku nešlo schovat 10 megabajtů. Nyní se ale počet úspěšně dešifrovaných clusterů více než zdvojnásobil!

Total clusters read: 250752, decrypted: 405

Bohužel je nemožné sestavit megabajt z kusů, ale dvě stě kilobajtů je snadné.

No, zpráva o poslední, 4. kontrole, je tentokrát radostná: úplné naformátování takového flash disku nevedlo ke zničení všech informací! 120 kilobajtů tajných dat se perfektně vejde do nevyužitého prostoru.

Souhrnná tabulka testu:

Steganografie podle souborů: skrytí dat přímo v sektorech

Trochu teoretizování: o volném prostoru a nevyužitých sektorech

Pokud jste někdy rozdělili pevný disk na oddíly, možná jste si všimli, že není vždy možné alokovat veškerý volný prostor na disku. První sekce vždy začíná nějakým odsazením (obvykle 1 megabajt nebo 2048 sektorů). Za poslední sekcí se také stává, že zůstává malý „ocásek“ nevyužitých sektorů. A někdy jsou mezi sekcemi mezery, i když zřídka.

Jinými slovy, na disku jsou sektory, ke kterým se při běžné práci s diskem nedostanete, ale do těchto sektorů lze zapisovat data! A to znamená přečíst si to taky. Upraveno o to, že je zde i tabulka oddílů a kód bootloaderu, které jsou umístěny v prázdné oblasti na začátku disku.

Pojďme si na chvíli odpočinout od sekcí a podívat se na disk takříkajíc z ptačí perspektivy. Zde máme prázdný oddíl na disku. Vytvoříme v něm souborový systém. Můžeme říci, že některé sektory na disku zůstanou nevymazané?

E-e-e - buben! Odpověď bude téměř vždy ano! Ve většině případů se vytvoření souborového systému skutečně omezí na zapsání pouze několika bloků servisních informací na disk, a jinak se obsah oddílu nemění.

A také – čistě empiricky – můžeme předpokládat, že souborový systém nemůže vždy zabírat veškerý prostor, který je mu přidělen, až do posledního sektoru. Například souborový systém FAT16 s velikostí clusteru 64 kilobajtů zjevně nemůže zcela obsadit oddíl o velikosti, která není násobkem 64 kilobajtů. Na konci takové sekce bude muset být „ocas“ několika sektorů, nepřístupných pro ukládání uživatelských dat. Tento předpoklad se však nepodařilo experimentálně potvrdit.

Chcete-li tedy maximalizovat prostor dostupný pro steganogram, musíte 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). Není třeba vytvářet prázdné úseky nebo nechávat nepřidělené plochy – to přitáhne pozornost zainteresovaných občanů.

Pomůcka pro experimenty

Můžete se dotknout zdrojového kódu nástroje zde

K sestavení budete potřebovat Qt verze 5.0 nebo vyšší a OpenSSL. Pokud něco nefunguje, možná budete muset upravit soubor steganodisk.pro.

Velikost clusteru můžete změnit ze 4 KB na řekněme 512 bajtů (v secretfile.h). Současně se zvýší náklady na servisní informace: hlavička a kontrolní součet zabírají pevných 68 bajtů.

Nástroj musíte spouštět samozřejmě s uživatelskými právy root a opatrně. Před přepsáním zadaného souboru nebo zařízení nebudou kladeny žádné otázky!

Užijte si to.

Zdroj: www.habr.com

Přidat komentář