A fájlrendszerbeli steganográfia.

Helló, Habr.

Szeretném bemutatni Önöknek ezt a kis projektet a steganográfiáról, 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 fájlrendszerbeli steganográfia.

A kísérleti példaként egy viszonylag régi linuxos fájlrendszert választottam, ext2.

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 Superblocks, amely a rendszer alapvető információit tartalmazza. Ezen kívül felfedeztem Block Bitmap és Inode Table. 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 hex-szerkesztővel.

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, AES, 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.

A fájlrendszerbeli steganográfia.

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.
A fájlrendszerbeli steganográfia.

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).
A fájlrendszerbeli steganográfia.
Így néz ki a fájlrendszer a már steganografált információval.
A fájlrendszerbeli steganográfia.

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 fájlrendszerbeli steganográfia.

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:

  1. sudo Copy_Flash.sh “DEVICE” — nyerjük ki a fájlrendszer képét a DEVICE-ból (flash);
  2. ./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;
  3. sudo ./Write_Flash.sh “DEVICE” – írjuk vissza a módosított fájlrendszert a DEVICE-ra.

Olvasás:

  1. sudo Copy_Flash.sh “DEVICE” — nyerjük ki a fájlrendszer képét a DEVICE-ból (flash);
  2. ./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;
  3. 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 Fat32, NTFS és ext4.
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. Működési példa megtalálható a youtube csatornámon. A projekt teljes kódját megosztottam a github.
(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 PavelMSTU 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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster