Helló, Habr.
Szeretném bemutatni Önöknek ezt a kis projektet a , amelyet szabadidőmben készítettem az iskolai tanulmányaim mellett.
Készítettem egy projektet az információk rejtett tárolásáról a fájlrendszerben (továbbiakban FS).
). Ezt alkalmazni lehet a bizalmas információk ellopására oktatási célokra.

A kísérleti példaként egy viszonylag régi linuxos fájlrendszert választottam, .
Megvalósítás
Megvalósítási megfontolások
Ha alaposan megvizsgáljuk a standard ext2-t, kiderül, hogy a fájlrendszerben létezik úgynevezett , amely a rendszer alapvető információit tartalmazza. Ezen kívül felfedeztem és . Szinte azonnal megszületett az ötlet, hogy információkat írjunk a jelenleg üres blokkokba a fájlrendszerben. Most ki kellett találni a védelmet a programozó ellen, aki .
van felfegyverezve. Ha a rejtett információt titkosítás nélkül tároljuk, akkor, még ha elmosódott is a fájlrendszeren, akkor is túl feltűnő lesz, különösen, ha a programozó tudja, mit kell keresnie. Ezért úgy döntöttem, hogy titkosítom az összes blokkot az eredeti fájlban. A blokkszivárgást választottam a titkosításhoz, , de mint tudja, ez nem lényeges.
A szükséges blokkok és a többi között a blokk olvasásakor minden blokk elejére egy külön jelölőt helyeztem el. Ez a jelölő az eredeti fájl blokk száma alapján van titkosítva. Ez a trükk azonnal lehetővé tette, hogy ne csak a szükséges blokkokat találjuk meg, hanem azok helyes sorrendjét is megtudjuk.
A rendszer működésének általános elve.

Az írási algoritmus
Pontosabban:
- Először is, valamilyen információt kell írni az eredeti fájlrendszerbe;
- Töröljük ezt az információt (nem szükséges az összeset);
- A rejtett fájlt azonos hosszúságú blokkokra kell bontani, jelölőt hozzáadva;
- Titkosítsuk ezeket a blokkokat;
- Helyezzük el a titkosított blokkokat az üres FS blokkokba.
A blokklánc kedvelőinek
Alább egy blokkdiagramot talál az írási algoritmushoz. Az algoritmus négy fájlt vesz be:
- A módosítható fájlrendszer képe;
- A steganográfiára szánt fájl;
- Az AES titkosítási kulcsot tartalmazó fájl;
- A jelölőt tartalmazó fájl.

Azonnal meg kell jegyezni, hogy ennek az algoritmusnak van egy hátránya: az új fájl FS-be írása után nem lehet nem lehet újabb információt írni az FS-be, mivel bármilyen új információ a blokkokba kerülhet, amelyeket a steganográfiás fájlunknak adtunk, de ez lehetőséget ad a "gyors nyomok eltüntetésére".
De elég nyilvánvaló, hogyan lehet ezt javítani: újra kell írni a fájlrendszer blokkírás algoritmusát. Ez világos, de hihetetlenül munkaigényes feladat.
A Proof Of Concept-hez ezt nem valósítottam meg.
Ennek eredményeként a következő változások következnek be a fájlrendszerben, a fájlrendszer így néz ki a steganográfia előtt (előzetesen egy audiofájlt írtak).

Így néz ki a fájlrendszer a már steganografált információval.

Olvasási algoritmus
Pontosabban:
- A kulcs és a jelölők felépítésének ismeretével állítsuk össze az első N jelölőt, garantálva, hogy N, a fájlrendszer blokk hosszával szorozva, nagyobb, mint a steganografált fájl hossza;
- Keressük meg a fájlrendszerben azokat a blokkokat, amelyek jelölőkkel kezdődnek;
- Dekódoljuk a kapott blokkokat és elválasztjuk a jelölőket;
- Rendezzük össze a kapott blokkokat a helyes sorrendbe, és kapjuk meg az eredeti fájlt.
A blokklánc kedvelőinek
Alább látható a blokkdiagram a felvételi algoritmushoz. Az algoritmus három fájlt kap bemenetként:
-A fájlrendszer képe;
- Az AES titkosítási kulcsot tartalmazó fájl;
- A jelölőt tartalmazó fájl.

A program futása után létrejön egy Read nevű fájl, amely az a fájl, amit a steganográfikus fájlrendszerből nyerünk ki; ha a kulcs vagy a jelölő helytelenül van megadva, a Read fájl üres lesz.
(a szépség kedvelői számára nemcsak fájlokat érdemes beágyazni, hanem egy 'fejlécet' is, amely metaadatokat tartalmaz: fájl neve, jogosultságok, utolsó módosítás ideje stb.)
A program indításának automatizálása
Kényelmi okokból bash szkripteket írtam, amelyek automatizálják a Linux indítását (tesztelve az Ubuntu 16.04.3 LTS-n).
Nézzük meg a lépéseket.
Írás:
- sudo Copy_Flash.sh “DEVICE” — nyerjük ki a fájlrendszer képét a DEVICE-ból (flash);
- ./Write.sh “FILE” “KEY” “MARKER” – létrehozunk egy virtuális környezetet, letöltjük a szükséges könyvtárakat, és elindítjuk a szkriptet az íráshoz;
- sudo ./Write_Flash.sh “DEVICE” – írjuk vissza a módosított fájlrendszert a DEVICE-ra.
Olvasás:
- sudo Copy_Flash.sh “DEVICE” — nyerjük ki a fájlrendszer képét a DEVICE-ból (flash);
- ./Read.sh “KEY” ‘MARKER” — létrehozunk egy virtuális környezetet, letöltjük a szükséges könyvtárakat, és elindítjuk a szkriptet az olvasáshoz;
- Az aktuális könyvtárban nyissuk meg a Read fájlt – ez a steganográfikus információ.
Zárás
Ez a steganográfiai módszer valószínűleg finomításra, további tesztelésre és népszerűbb fájlrendszerekre való kiterjesztésre szorul, mint például , és .
De a munka célja az volt, hogy bemutassam azt az elvet, amellyel rejtett információt lehet tárolni a fájlrendszerben.
Ezekkel a algoritmusokkal biztonságosan tárolható az információ, és ha a kulcs ismeretében egy ilyen rendszert le lehet bontani nem teljes kombinatorikai próbával (de egy meglehetősen hosszú algoritmussal), akkor a kulcs ismerete nélkül számomra ez a rendszer teljesen ellenállónak tűnik, persze ez külön cikk témája is lehet.
Az összes kód a 3.5.2-es Python nyelven készült. megtalálható a youtube csatornámon. A projekt teljes kódját megosztottam a .
(Igen, tudom, hogy a production verziónál valami "gyorsabb" nyelven kellene írni, például C-ben 😉)
Ebben a megvalósításban a steganográfiás bemeneti fájl mérete nem haladhatja meg az 1000 kB-ot.
Szeretném megköszönni a felhasználónak az értékes tanácsokat a kutatás tervezésében és a cikk megírásához fűzött ajánlásokat.
Forrás: habr.com
