Steganografia súborového systému

Ahoj Habr.

Rád by som vám predstavil malý projekt na steganografia, vyrobený vo voľnom čase zo štúdia.

Urobil som projekt o skrytom ukladaní informácií v súborovom systéme (ďalej FS).
Toto možno použiť na odcudzenie dôverných informácií na vzdelávacie účely.

Steganografia súborového systému

Ako prototyp bol vybraný veľmi starý Linux FS ext2.

Реализация

Úvahy o implementácii

Ak je dobré „rozmotať“ štandard ext2, tak môžete nahradiť, že vo FS je tzv. Superbloky, ktorý poskytuje základné informácie o systéme. Potom, čo som bol nájdený Blokovať bitmapu и Tabuľka Inode. Takmer okamžite sa zrodila myšlienka zaznamenávania informácií do momentálne prázdnych blokov FS. Teraz stálo za to premýšľať o ochrane pred ozbrojeným programátorom hex editor.

Ak ukladáte skryté informácie bez šifrovania, potom aj napriek ich rozmazanosti vo FS budú stále príliš nápadné, najmä ak programátor vie, čo má hľadať. Preto bolo rozhodnuté zašifrovať všetky bloky zdrojového súboru. Vybral som si blokovú šifru AES, ale ako ste pochopili, to nie je dôležité.

Aby sa pri čítaní oddelili potrebné bloky od všetkých ostatných, bolo rozhodnuté pridať do každého bloku na začiatok bloku špeciálnu značku. Tento token bol zašifrovaný v závislosti od čísla bloku v zdrojovom súbore. Tento trik okamžite umožnil nielen nájsť potrebné bloky, ale aj rozpoznať ich správne poradie.

Všeobecný princíp fungovania systému.

Steganografia súborového systému

Algoritmus záznamu

Body:

  • Najprv zapíšte nejaké informácie do zdrojového súborového systému;
  • Vymažte tieto informácie (nie nevyhnutne všetky);
  • Súbor, ktorý sa má skryť, sa rozdelí na bloky rovnakej dĺžky, pričom sa pridá značka;
  • Zašifrujte tieto bloky;
  • Umiestnite zašifrované bloky do prázdnych blokov FS.

Pre milovníkov blokových schém

Nižšie je bloková schéma záznamového algoritmu. Algoritmus prijíma štyri súbory ako vstup:
-Obrázok upraviteľného súborového systému;
-Súbor podlieha steganografii;
-Súbor so šifrovacím kľúčom pre AES;
-Súbor so značkou.
Steganografia súborového systému

Okamžite stojí za zmienku, že tento algoritmus má jednu nevýhodu: po zapísaní súboru do FS, nemôže zapíšte do FS čokoľvek nové, pretože každá nová informácia môže skončiť v blokoch, ktoré sme pridelili nášmu zazipovanému súboru, aj keď to tiež otvára možnosť „rýchlo zakryť naše stopy“.

Je však celkom zrejmé, ako sa to dá opraviť: je potrebné prepísať algoritmus na písanie blokov vo FS. Je to pochopiteľná, no neuveriteľne časovo náročná úloha.
Pre dôkaz koncepcie som to neimplementoval.

V dôsledku toho sa na FS vykonajú nasledujúce zmeny; takto vyzerá FS pred steganografiou (predtým bol nahraný zvukový súbor).
Steganografia súborového systému
A takto vyzerá FS s už zazipovanými informáciami.
Steganografia súborového systému

Algoritmus čítania

Body:

  • So znalosťou kľúča a spôsobu vytvárania značiek zostavte prvých N značiek so zárukou, že N vynásobené dĺžkou bloku súborového systému je väčšie ako dĺžka zazipovaného súboru;
  • Vyhľadajte bloky vo FS počnúc značkami;
  • Dešifrujte prijaté bloky a oddeľte značky;
  • Zozbierajte výsledné bloky v správnom poradí a získajte zdrojový súbor.

Pre milovníkov blokových schém

Nižšie je bloková schéma záznamového algoritmu. Algoritmus prijíma tri súbory ako vstup:
- obraz systému súborov;
-Súbor so šifrovacím kľúčom pre AES;
-Súbor so značkou.
Steganografia súborového systému

Po spustení programu sa zobrazí súbor Čítať, čo bude súbor extrahovaný zo steganografovaného súborového systému; ak bol kľúč alebo značka zadaná nesprávne, súbor Čítať bude prázdny.
(pre milovníkov krásy môžete vložiť nielen súbor, ale aj „hlavičku“ obsahujúcu metainformácie: názov súboru, práva, čas poslednej úpravy atď.)

Automatizácia spustenia

Pre pohodlie boli napísané bash skripty na automatizáciu spustenia v systéme Linux (testované na Ubuntu 16.04.3 LTS).
Pozrime sa na spustenie krok za krokom.
záznam:

  1. sudo Copy_Flash.sh „DEVICE“ - získajte obraz FS zo zariadenia DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – vytvorte virtuálne prostredie, stiahnite si potrebné knižnice a spustite skript na písanie;
  3. sudo ./Write_Flash.sh “DEVICE” – zmenený FS zapíšte znova do DEVICE.

Čítanie:

  1. sudo Copy_Flash.sh „DEVICE“ - získajte obraz FS zo zariadenia DEVICE (flash);
  2. ./Read.sh “KEY” 'MARKER” - vytvorte virtuálne prostredie, stiahnite si potrebné knižnice a spustite preskočenie na čítanie;
  3. V aktuálnom adresári otvorte súbor Čítať – toto sú zazipované informácie.

Záver

Táto steganografická metóda zrejme potrebuje vylepšenie, dodatočné testovanie a rozšírenie na populárnejšie súborové systémy, ako napr Fat32, NTFS и ext4.
Účelom tejto práce však bolo ukázať princíp, pomocou ktorého je možné vykonávať skryté ukladanie informácií v súborovom systéme.
Pomocou takýchto algoritmov môžete nebojácne ukladať informácie, a ak, ak poznáte kľúč, je možné hacknúť takýto systém nie hrubou silou (ale veľmi dlhým algoritmom), potom bez znalosti kľúča toto systém sa mi zdá byť absolútne stabilný, čo však môže slúžiť ako dôvod na samostatný článok.

Celý kód je implementovaný v Pythone verzie 3.5.2. Príklad práce prezentované na mojom youtube kanáli. Celý kód projektu je zverejnený na GitHub.
(Áno, áno, viem, že pre produkčnú verziu treba napísať niečo “rýchlo”, napr. C 😉)
V tejto implementácii by veľkosť vstupného súboru pre steganografiu nemala presiahnuť 1000 kB.

Chcem vyjadriť svoju vďaku používateľovi PavelMSTU za cenné rady pri plánovaní štúdie a odporúčania k dizajnu článku.

Zdroj: hab.com

Pridať komentár