Fájlrendszer szteganográfia

Szia Habr.

Szeretnék egy kis projektet bemutatni nektek szteganográfia, a tanulástól szabadidőmben készült.

Készítettem egy projektet az információ rejtett tárolásáról a fájlrendszerben (továbbiakban FS).
Ez felhasználható bizalmas információk oktatási célú ellopására.

Fájlrendszer szteganográfia

Egy nagyon régi Linux FS-t választottak prototípusnak ext2.

Реализация

Megvalósítási szempontok

Ha jó az ext2 szabványt "feloldani", akkor azt le lehet cserélni, hogy az FS-ben van egy ún. Szuperblokkok, amely alapvető információkat tartalmaz a rendszerről. Miután megtaláltam Bitmap blokkolása и Inode táblázat. Szinte azonnal megszületett az ötlet, hogy az információkat a jelenleg üres FS blokkokba rögzítsék. Most érdemes volt elgondolkodni a felfegyverzett programozó elleni védelemben hex szerkesztő.

Ha titkosítás nélkül tárolja a rejtett információkat, akkor az FS elmosódása ellenére is túlságosan szembetűnő lesz, különösen, ha a programozó tudja, mit kell keresnie. Ezért úgy döntöttek, hogy a forrásfájl összes blokkját titkosítják. A blokk titkosítást választottam AES, de mint érti, ez nem fontos.

Annak érdekében, hogy olvasás közben a szükséges blokkokat az összes többitől elkülönítsék, úgy döntöttek, hogy minden blokkhoz külön jelölőt adnak a blokk elején. Ez a token a forrásfájl blokkszámától függően lett titkosítva. Ez a trükk azonnal lehetővé tette nemcsak a szükséges blokkok megtalálását, hanem azok helyes sorrendjének felismerését is.

A rendszer általános működési elve.

Fájlrendszer szteganográfia

Rögzítési algoritmus

A pontokon:

  • Először írjon néhány információt a forrásfájlrendszerbe;
  • Törölje ezt az információt (nem feltétlenül az összeset);
  • Az elrejteni kívánt fájlt egyenlő hosszúságú blokkokra osztjuk, hozzáadva egy markert;
  • Titkosítsa ezeket a blokkokat;
  • Helyezze el a titkosított blokkokat az üres FS blokkokba.

A blokkdiagram szerelmeseinek

Az alábbiakban a rögzítési algoritmus blokkdiagramja látható. Az algoritmus négy fájlt kap bemenetként:
-Módosítható fájlrendszer képe;
- Szteganográfia hatálya alá tartozó fájl;
-Fájl titkosítási kulccsal az AES-hez;
- Reszelő jelölővel.
Fájlrendszer szteganográfia

Azonnal érdemes megjegyezni, hogy ennek az algoritmusnak van egy hátránya: miután a fájlt az FS-be írta, nem írjon be bármi újat az FS-be, mivel minden új információ a zip-fájlunkhoz hozzárendelt blokkokba kerülhet, bár ez is lehetőséget ad arra, hogy „gyorsan lefedjük nyomainkat”.

De teljesen nyilvánvaló, hogyan lehet ezt javítani: át kell írni a blokkok írási algoritmusát az FS-ben. Ez érthető, de hihetetlenül időigényes feladat.
A Proof Of Consept esetében ezt nem hajtottam végre.

Ennek eredményeként a következő változtatások lesznek az FS-ben: így néz ki az FS a szteganográfia előtt (korábban egy hangfájlt rögzítettek).
Fájlrendszer szteganográfia
És így néz ki az FS a már becsomagolt információkkal.
Fájlrendszer szteganográfia

Olvasási algoritmus

A pontokon:

  • A kulcs és a markerek létrehozásának módszerének ismeretében állítsa össze az első N markert, garantálva, hogy N szorozva a fájlrendszer blokk hosszával nagyobb, mint a tömörített fájl hossza;
  • Blokkok keresése az FS-ben markerekkel kezdődően;
  • A kapott blokkok megfejtése és a markerek szétválasztása;
  • Gyűjtsd össze a kapott blokkokat a megfelelő sorrendben, és szerezd be a forrásfájlt.

A blokkdiagram szerelmeseinek

Az alábbiakban a rögzítési algoritmus blokkdiagramja látható. Az algoritmus három fájlt kap bemenetként:
-Fájlrendszer kép;
-Fájl titkosítási kulccsal az AES-hez;
- Reszelő jelölővel.
Fájlrendszer szteganográfia

A program futása után megjelenik a Read fájl, amely a szteganográf fájlrendszerből kivont fájl lesz, ha a kulcs vagy a jelölő rosszul lett megadva, akkor a Read fájl üres lesz.
(a szépség szerelmesei nem csak a fájlt, hanem egy „fejlécet” is beilleszthetnek, amely metainformációkat tartalmaz: fájlnév, jogok, utolsó módosítás ideje stb.)

Indítási automatizálás

A kényelem kedvéért bash szkripteket írtak, hogy automatizálják az indítást Linuxon (Ubuntu 16.04.3 LTS-en tesztelték).
Nézzük az indítást lépésről lépésre.
Rekord:

  1. sudo Copy_Flash.sh „DEVICE” - szerezze be az FS-képet a DEVICE-ről (flash);
  2. ./Write.sh „FILE” „KEY” „MARKER” – hozzon létre egy virtuális környezetet, töltse le a szükséges könyvtárakat és futtassa az írási szkriptet;
  3. sudo ./Write_Flash.sh „DEVICE” – írja be újra a megváltozott FS-t a DEVICE-ba.

Olvasás:

  1. sudo Copy_Flash.sh „DEVICE” - szerezze be az FS-képet a DEVICE-ről (flash);
  2. ./Read.sh “KEY” 'JELÖLŐ” - hozzon létre egy virtuális környezetet, töltse le a szükséges könyvtárakat, és futtassa a kihagyást olvasáshoz;
  3. Az aktuális könyvtárban nyissa meg a Read fájlt - ez a tömörített információ.

Következtetés

Ez a szteganográfiai módszer valószínűleg fejlesztésre, további tesztelésre és kiterjesztésre szorul a népszerűbb fájlrendszerekre, mint pl Fat32, NTFS и ext4.
De ennek a munkának az volt a célja, hogy bemutassa azt az elvet, amely alapján lehetséges az információ rejtett tárolása a fájlrendszerben.
Az ilyen algoritmusok segítségével félelem nélkül tárolhat információkat, és ha a kulcs ismeretében nem nyers erővel (hanem nagyon hosszú algoritmussal) lehet feltörni egy ilyen rendszert, akkor a kulcs ismerete nélkül ez Számomra teljesen stabilnak tűnik a rendszer, de ez okul szolgálhat egy külön cikkre.

Minden kód a Python 3.5.2-es verziójában van implementálva. Példa a munkára bemutattam a youtube csatornámon. A projekt teljes kódja itt található GitHub.
(Igen, igen, tudom, hogy a gyártási verzióhoz valami "gyors"-ba kell írni, pl. C 😉)
Ebben a megvalósításban a szteganográfia bemeneti fájljának mérete nem haladhatja meg az 1000 kB-ot.

Szeretném kifejezni hálámat a felhasználónak PavelMSTU értékes tanácsokért a tanulmány megtervezéséhez és a cikk kialakítására vonatkozó ajánlásokért.

Forrás: will.com

Hozzászólás