Steganografia v súborovom systéme

Ahoj, Habr.

Chcem vám predstaviť malý projekt o steganografii, ktorý bol vytvorený vo voľnom čase od štúdia.

Vytvoril som projekt na skryté uchovávanie informácií v súborovom systéme (ďalej len FS).
). Toto sa dá využiť na krádež citlivých informácií na vzdelávacie účely.

Steganografia v súborovom systéme

Ako experimentálny vzor bola vybraná veľmi stará linuxová FS ext2.

Implementácia

Úvahy o realizácii

Ak dôkladne preskúmame štandard ext2, môžeme zistiť, že v FS existuje takzvaný Superbloki, kde sú uvedené základné informácie o systéme. Počas výskumu som našiel Block Bitmap a Inode Table. Takmer ihneď sa zrodila myšlienka zapisovať informácie do momentálne prázdnych blokov FS. Teraz bolo potrebné premyslieť ochranu pred programátorom vybaveným hex-editorom.

Ak sa bude skrytá informácia uchovávať bez šifrovania, aj keď je rozptýlená po FS, aj tak bude príliš nápadná, najmä ak programátor bude vedieť, čo hľadať. Preto bolo rozhodnuté šifrovať všetky bloky pôvodného súboru. Vybral som blokový šifrovací algoritmus AES, ale ako chápete, nie je to zásadné.

Na oddelenie potrebných blokov od ostatných pri čítaní bolo rozhodnuté pridať do každého bloku špeciálny marker na začiatok bloku. Tento marker bol šifrovaný v závislosti od čísla bloku v pôvodnom súbore. Takýto trik okamžite umožnil nielen nájsť potrebné bloky, ale aj zistiť ich správny poriadok.

Celkový princíp fungovania systému.

Steganografia v súborovom systéme

Algoritmus zápisu

Po jednotlivých krokoch:

  • Najprv zapísať do pôvodného súborového systému nejaké informácie;
  • Odstrániť tieto informácie (nie je nutné všetky);
  • Súbor na skrytie roztrhnúť na bloky rovnakej dĺžky, pridávajúc marker;
  • Tento blok zašifrovať;
  • Zašifrované bloky umiestniť do prázdnych blokov FS.

Pre milovníkov blokových schém

Nižšie je uvedená bloková schéma algoritmu zápisu. Na vstupe dostáva algoritmus štyri súbory:
-Obraz meniteľného súborového systému;
-Súbor určený na steganografiu;
-Súbor s kľúčom na šifrovanie pre AES;
-Súbor s markerom.
Steganografia v súborovom systéme

Hneď treba poznamenať, že tento algoritmus má jednu nevýhodu: po zápise súboru do FS nie je možné není možné do FS zapísať niečo nové, pretože akákoľvek nová informácia sa môže dostať do tých blokov, ktoré sme pridelili nášmu skrytému súboru, avšak to otvára možnosť 'rýchlej likvidácie stôp'.

Je zrejmé, ako to možno opraviť: je potrebné prepísať algoritmus zápisu blokov do FS. Je to zrozumiteľná, ale neuveriteľne pracná úloha.
Pre Proof Of Concept som to neimplementoval.

Výsledkom budú nasledujúce zmeny vo FS, takto vyzerá FS pred steganografiou (predtým bol zaznamenaný audio súbor).
Steganografia v súborovom systéme
A takto vyzerá FS s už steganografickými informáciami.
Steganografia v súborovom systéme

Algoritmus čítania

Po jednotlivých krokoch:

  • So znalosťou kľúča a spôsobu výstavby markerov zostaviť prvé N markerov, s garanciou, že N, vynásobené dĺžkou bloku súborového systému, je väčšie ako dĺžka steganografického súboru;
  • Vykonať vyhľadávanie blokov v FS, začínajúcich s markerami;
  • Dešifrovať získané bloky a oddeliť markery;
  • Zostaviť získané bloky v správnom poradí a získať pôvodný súbor.

Pre milovníkov blokových schém

Nižšie je uvedená bloková schéma algoritmu zápisu. Na vstupe algoritmus dostáva tri súbory:
-Obraz súborového systému;
-Súbor s kľúčom na šifrovanie pre AES;
-Súbor s markerom.
Steganografia v súborovom systéme

Po práci programu sa objaví súbor Read, ktorý bude vytiahnutý zo steganografického FS, ak bol kľúč alebo marker zadaný nesprávne, súbor Read bude prázdny.
(pre milovníkov pekného designu je možné vkladať nielen súbor, ale aj "hlavičku", obsahujúcu meta informácie: názov súboru, práva, čas poslednej zmeny atď.)

Automatizácia spustenia

Pre pohodlie boli napísané bash skripty, ktoré automatizujú spustenie na Linuxe (testované na Ubuntu 16.04.3 LTS).
Prejdime si spustenie po krokoch.
Zápis:

  1. sudo Copy_Flash.sh "DEVICE" — získavame obraz FS z DEVICE (flash);
  2. .\/Write.sh "FILE" "KEY" "MARKER" – vytvoríme virtuálne prostredie, stiahneme potrebné knižnice a spustíme skript na zápis;
  3. sudo .\/Write_Flash.sh "DEVICE" – zapisujeme upravený FS späť na DEVICE.

Čítanie:

  1. sudo Copy_Flash.sh "DEVICE" — získavame obraz FS z DEVICE (flash);
  2. .\/Read.sh "KEY" 'MARKER' — vytvoríme virtuálne prostredie, stiahneme potrebné knižnice a spustíme skript na čítanie;
  3. V aktuálnom adresári otvoríme súbor Read – to je steganografická informácia.

Záver

Tento spôsob steganografie pravdepodobne potrebuje vylepšiť, dodatočné testovanie a rozšíriť na populárnejšie súborové systémy, ako sú Fat32, NTFS a ext4.
Ale cieľom tejto práce bolo ukázať princíp, prostredníctvom ktorého je možné uskutočniť skryté uchovávanie informácií v súborovom systéme.
S pomocou takýchto algoritmov je možné bez obáv uchovávať informácie, a ak je pri poznaní kľúča takýto systém možné prelomiť nie úplným prehľadávaním (ale veľmi dlhým algoritmom), tak bez poznania kľúča sa tento systém javí ako absolútne odolný, hoci to môže byť dôvodom na samostatný článok.

Celý kód je implementovaný v jazyku Python verzie 3.5.2. Príklad fungovania je predstavený na mojom youtube kanáli. Kompletný kód projektu je zverejnený na github.
(Áno-áno, viem, že pre produkčnú verziu by sa malo písať v niečom "rýchlom", napríklad v C 😉 )
V tejto implementácii by veľkosť vstupného súboru pre steganografiu nemala presiahnuť 1000 kB.

Chcem vyjadriť vďaku používateľovi PavelMSTU za cenné rady pri plánovaní výskumu a odporúčania na úpravu článku.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster