Steganografija datotečnega sistema

Hej Habr.

Rad bi vam predstavil majhen projekt na steganografija, narejen v prostem času od študija.

Naredil sem projekt o skritem shranjevanju informacij v datotečnem sistemu (nadalje FS).
To se lahko uporabi za krajo zaupnih informacij v izobraževalne namene.

Steganografija datotečnega sistema

Za prototip je bil izbran zelo star Linux FS ext2.

Реализация

Premisleki glede izvajanja

Če je dobro "razvozlati" standard ext2, potem lahko zamenjate, da je v FS t.i. Superbloki, ki ponuja osnovne informacije o sistemu. Potem ko so me našli Blokiraj bitno sliko и Tabela Inode. Skoraj takoj se je rodila ideja o zapisovanju informacij v trenutno prazne bloke FS. Zdaj je bilo vredno razmišljati o zaščiti pred oboroženim programerjem hex urejevalnik.

Če skrite informacije shranjujete brez šifriranja, bodo kljub zamegljenosti v FS še vedno preveč vpadljive, še posebej, če programer ve, kaj iskati. Zato je bilo odločeno šifrirati vse bloke izvorne datoteke. Izbral sem blokovno šifro AES, vendar kot razumete, to ni pomembno.

Za ločitev potrebnih blokov od vseh drugih pri branju je bilo odločeno, da se vsakemu bloku na začetku bloka doda poseben marker. Ta žeton je bil šifriran glede na številko bloka v izvorni datoteki. Ta trik je takoj omogočil ne samo iskanje potrebnih blokov, ampak tudi prepoznavanje njihovega pravilnega vrstnega reda.

Splošno načelo delovanja sistema.

Steganografija datotečnega sistema

Algoritem snemanja

Na točke:

  • Najprej zapišite nekaj informacij v izvorni datotečni sistem;
  • Izbrišite te podatke (ne nujno vse);
  • Datoteka, ki jo želite skriti, je razdeljena na bloke enake dolžine in dodana oznaka;
  • Šifrirajte te bloke;
  • Šifrirane bloke postavite v prazne bloke FS.

Za ljubitelje blok diagramov

Spodaj je blokovni diagram snemalnega algoritma. Algoritem kot vhod prejme štiri datoteke:
- Slika spremenljivega datotečnega sistema;
- Datoteka, predmet steganografije;
-Datoteka s šifrirnim ključem za AES;
-Datoteka z markerjem.
Steganografija datotečnega sistema

Takoj je treba omeniti, da ima ta algoritem eno pomanjkljivost: po pisanju datoteke v FS, ne morem v FS vpišite karkoli novega, saj lahko vsaka nova informacija konča v blokih, ki smo jih dodelili naši stisnjeni datoteki, čeprav to odpira tudi možnost, da »hitro zabrišemo sledi«.

Toda povsem očitno je, kako je to mogoče popraviti: treba je prepisati algoritem za pisanje blokov v FS. To je razumljivo, a neverjetno dolgotrajno opravilo.
Za dokaz koncepta tega nisem implementiral.

Posledično bodo v FS narejene naslednje spremembe; tako izgleda FS pred steganografijo (zvočna datoteka je bila predhodno posneta).
Steganografija datotečnega sistema
In tako izgleda FS z že stisnjenimi informacijami.
Steganografija datotečnega sistema

Algoritem branja

Na točke:

  • S poznavanjem ključa in načina konstruiranja markerjev sestavite prvih N markerjev, pri čemer zagotovite, da je N pomnoženo z dolžino bloka datotečnega sistema večje od dolžine stisnjene datoteke;
  • Iskanje blokov v FS, ki se začnejo z oznakami;
  • Dešifrirajte prejete bloke in ločite oznake;
  • Zberite nastale bloke v pravilnem vrstnem redu in pridobite izvorno datoteko.

Za ljubitelje blok diagramov

Spodaj je blokovni diagram snemalnega algoritma. Algoritem kot vhod prejme tri datoteke:
- Slika datotečnega sistema;
-Datoteka s šifrirnim ključem za AES;
-Datoteka z markerjem.
Steganografija datotečnega sistema

Ko se program zažene, se prikaže datoteka za branje, ki bo datoteka, ekstrahirana iz steganografiranega datotečnega sistema; če je bil ključ ali oznaka naveden napačno, bo datoteka za branje prazna.
(za ljubitelje lepote lahko dodate ne samo datoteko, ampak tudi "glavo", ki vsebuje metainformacije: ime datoteke, pravice, čas zadnje spremembe itd.)

Avtomatizacija zagona

Za udobje so bili skripti bash napisani za avtomatizacijo zagona v sistemu Linux (preizkušeno na Ubuntu 16.04.3 LTS).
Oglejmo si zagon korak za korakom.
Posnetek:

  1. sudo Copy_Flash.sh “DEVICE” - pridobi sliko FS iz DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – ustvarite virtualno okolje, prenesite potrebne knjižnice in zaženite skript za pisanje;
  3. sudo ./Write_Flash.sh “DEVICE” – spremenjeni FS znova zapišite v DEVICE.

Branje:

  1. sudo Copy_Flash.sh “DEVICE” - pridobi sliko FS iz DEVICE (flash);
  2. ./Read.sh “KEY” 'MARKER' - ustvarite virtualno okolje, prenesite potrebne knjižnice in zaženite preskok za branje;
  3. V trenutnem imeniku odprite datoteko Read - to so stisnjene informacije.

Zaključek

Ta metoda steganografije verjetno potrebuje izboljšavo, dodatno testiranje in razširitev na bolj priljubljene datotečne sisteme, kot je npr Fat32, NTFS и ext4.
Toda namen tega dela je bil prikazati princip, po katerem je mogoče izvajati skrito shranjevanje informacij v datotečnem sistemu.
S pomočjo takšnih algoritmov lahko neustrašno shranjujete informacije in če, če poznate ključ, je mogoče tak sistem vdreti ne s surovo silo (ampak z zelo dolgim ​​algoritmom), potem brez poznavanja ključa to sistem se mi zdi popolnoma stabilen, vendar je to lahko razlog za ločen članek.

Vsa koda je implementirana v Python različici 3.5.2. Primer dela predstavljen na mojem youtube kanalu. Celotna koda projekta je objavljena na github.
(Ja, ja, vem, da moraš za produkcijsko verzijo pisati nekaj “hitrega”, na primer C 😉)
Pri tej izvedbi velikost vhodne datoteke za steganografijo ne sme presegati 1000 kB.

Želim izraziti svojo hvaležnost uporabniku PavelMSTU za dragocene nasvete pri načrtovanju študije in priporočila pri oblikovanju članka.

Vir: www.habr.com

Dodaj komentar