Ahoj, Habr.
Chci vám představit malý projekt na , který byl vytvořen ve volném čase od studia.
Vytvořil jsem projekt pro skryté ukládání informací do souborového systému (dále jen FS).
To lze použít k krádeži důvěrných informací pro vzdělávací účely.

Jako experimentální vzorek byla zvolena již poměrně stará linuxová FS .
Implementace
Úvahy o realizaci
Pokud se dobře „prozkoumá“ standard ext2, lze nahradit to, že ve FS existuje tzv. , ve kterém jsou uvedeny základní informace o systému. Po mě bylo nalezeno a . Téměř okamžitě vznikl nápad zapisovat informace do prázdných v tuto chvíli bloků FS. Nyní bylo třeba promyslet ochranu proti programátorovi ozbrojenému .
Pokud se skrytá informace ukládá bez šifrování, i když je rozptýlená po FS, stále bude příliš nápadná, zejména pokud programátor ví, co hledat. Proto bylo rozhodnuto šifrovat všechny bloky původního souboru. Vybral jsem blokové šifrování , ale jak chápete, to není zásadní.
Abychom oddělili potřebné bloky od všech ostatních při čtení, rozhodli jsme se přidat speciální marker na začátek každého bloku. Tento marker byl šifrován v závislosti na čísle bloku v původním souboru. Tato lest nejen umožnila najít potřebné bloky, ale také zjistit jejich správné pořadí.
Obecný princip fungování systému.

Algoritmus zápisu
Po jednotlivých bodech:
- Nejprve zapsat do původního souborového systému nějaké informace;
- Smazat tyto informace (ne nutně všechny);
- Soubor pro skrytí rozdělit na bloky stejné délky a přidat marker;
- Šifrovat tyto bloky;
- Umístit zašifrované bloky do prázdných bloků FS.
Pro milovníky blokových schémat
Níže je uvedeno blokové schéma algoritmu zápisu. Na vstupu algoritmus přijímá čtyři soubory:
-Obrázek měnitelný souborový systém;
-Soubor určený pro steganografii;
-Soubor s šifrovacím klíčem pro AES;
-Soubor s markerem.

Hned je třeba poznamenat, že tento algoritmus má jednu nevýhodu: po zapsání souboru do FS, zadávat URL (to nikdy nefungovalo, ale vstupní pole umožňovalo uvést URL, což zmátlo uživatele). zapisovat do FS něco nového, protože jakákoli nová informace může skončit v těch blocích, které jsme vyhradili našemu steganografovanému souboru, ale to zároveň otevírá možnost „rychlého zametání stop“.
Je však zřejmé, jak to lze opravit: je třeba přepsat algoritmus zápisu bloků do FS. Je to pochopitelný, ale nesmírně pracný úkol.
Pro Proof Of Concept jsem to neimplementoval.
V důsledku toho budou následující změny ve FS, takto vypadá FS před steganografií (předem byl zaznamenán audiový soubor).

A takto vypadá FS s již zakrytou informací.

Algoritmus čtení
Po jednotlivých bodech:
- Se znalostí klíče a způsobu vytváření markerů sestavit prvních N markerů, s garancí, že N, násobené délkou bloku souborového systému, je větší než délka zakryté souboru;
- Proveďte vyhledávání bloků ve FS, začínajících s markery;
- Dešifrovat získané bloky a oddělit markery;
- Sestavit získané bloky ve správném pořadí a získat původní soubor.
Pro milovníky blokových schémat
Níže je znázorněn blokový diagram algoritmu zápisu. Na vstupu algoritmu jsou tři soubory:
- Obraz souborového systému;
-Soubor s šifrovacím klíčem pro AES;
-Soubor s markerem.

Po spuštění programu se objeví soubor Read, který bude extrahovaný ze steganografického FS souboru. Pokud byly klíč nebo marker uvedeny nesprávně, soubor Read bude prázdný.
(pro milovníky krásy je možné vkládat nejen soubor, ale i 'hlavičku', obsahující meta-informace: název souboru, práva, čas poslední změny atd.)
Automatizace spuštění
Pro pohodlí byly napsány bash skripty, které automatizují spuštění na Linuxu (testováno na Ubuntu 16.04.3 LTS).
Probereme spuštění krok za krokem.
Zápis:
- sudo Copy_Flash.sh “DEVICE” — získáme obraz FS z DEVICE (flashe);
- .\/Write.sh “FILE” “KEY” “MARKER” – vytvoříme virtuální prostředí, stáhneme potřebné knihovny a spustíme skript na zápis;
- sudo .\/Write_Flash.sh “DEVICE” – zapsání upraveného FS opět na DEVICE.
Čtení:
- sudo Copy_Flash.sh “DEVICE” — získáme obraz FS z DEVICE (flashe);
- .\/Read.sh “KEY” 'MARKER' — vytvoříme virtuální prostředí, stáhneme potřebné knihovny a spustíme skript na čtení;
- V aktuálním adresáři otevřeme soubor Read – to je právě zakrytá informace.
Závěr
Tato metoda steganografie pravděpodobně potřebuje vylepšení, další testování a rozšíření na populárnější souborové systémy, jako jsou , a .
Ale cílem této práce bylo ukázat princip, pomocí kterého lze provést skryté ukládání informací do souborového systému.
S pomocí podobných algoritmů lze bezpečně ukládat informace, a pokud je možné takový systém prolomit při znalosti klíče, ačkoliv přes velmi dlouhý algoritmus, bez znalosti klíče se mi tento systém jeví jako zcela odolný; nicméně to může být důvod k samostatnému článku.
Veškerý kód je napsán v jazyce Python verze 3.5.2. je uveden na mém youtube kanále. Kompletní kód projektu je umístěn na .
(Ano, ano, vím, že pro produkční verzi je třeba psát v něčem 'rychlém', například v C 😉 )
V této implementaci nesmí velikost vstupního souboru pro steganografii překročit 1000 kB.
Chci poděkovat uživateli za cenné rady při plánování výzkumu a doporučení k sestavení článku.
Zdroj: habr.com
