Steganografio de dosieroj

Hej Habr.

Mi ŝatus prezenti al vi etan projekton pri steganografio, farita en mia libera tempo el studado.

Mi faris projekton pri kaŝa konservado de informoj en la dosiersistemo (pli FS).
Ĉi tio povas esti uzata por ŝteli konfidencajn informojn por edukaj celoj.

Steganografio de dosieroj

Tre malnova Linukso FS estis elektita kiel prototipo ext2.

Реализация

Efektivigaj Konsideroj

Se estas bone "malimpliki" la normon ext2, tiam vi povas anstataŭigi tion en la FS estas t.n. Superblokoj, kiu provizas bazajn informojn pri la sistemo. Post kiam mi estis trovita Bloki Bitmapon и Inode Tablo. Preskaŭ tuj naskiĝis la ideo registri informojn en nuntempe malplenajn FS-blokojn. Nun indas pensi pri protekto de programisto armita heksredaktilo.

Se vi stokas kaŝitajn informojn sen ĉifrado, tiam, eĉ malgraŭ ĝia malklareco en la FS, ĝi ankoraŭ estos tro evidenta, precipe se la programisto scias kion serĉi. Tial oni decidis ĉifri ĉiujn blokojn de la fontdosiero. Mi elektis blokan ĉifron AES, sed kiel vi komprenas, tio ne gravas.

Por apartigi la necesajn blokojn de ĉiuj aliaj dum legado, oni decidis aldoni specialan markilon al ĉiu bloko komence de la bloko. Ĉi tiu ĵetono estis ĉifrita depende de la bloknumero en la fontdosiero. Ĉi tiu lertaĵo tuj ebligis ne nur trovi la necesajn blokojn, sed ankaŭ rekoni ilian ĝustan ordon.

Ĝenerala funkcia principo de la sistemo.

Steganografio de dosieroj

Algoritmo de registrado

La punktoj:

  • Unue skribu iujn informojn al la fontdosiersistemo;
  • Forigu ĉi tiun informon (ne nepre ĉiujn);
  • La kaŝenda dosiero estas dividita en blokojn de egala longo, aldonante markilon;
  • Ĉifri ĉi tiujn blokojn;
  • Metu ĉifritajn blokojn en malplenajn FS-blokojn.

Por amantoj de blokdiagramoj

Malsupre estas blokdiagramo de la registra algoritmo. La algoritmo ricevas kvar dosierojn kiel enigo:
-Bildo de modifebla dosiersistemo;
-Dosiero subjekto al steganografio;
-Dosiero kun ĉifra ŝlosilo por AES;
-Dosiero kun markilo.
Steganografio de dosieroj

Indas tuj rimarki, ke ĉi tiu algoritmo havas unu malavantaĝon: post skribado de la dosiero al la FS, ne povas skribu ion novan en la FS, ĉar ajna nova informo povas finiĝi en la blokoj, kiujn ni asignis al nia zipita dosiero, kvankam ĉi tio ankaŭ malfermas la eblecon "rapide kovri niajn spurojn".

Sed estas sufiĉe evidente kiel tio povas esti riparita: necesas reverki la algoritmon por skribi blokojn en la FS. Ĉi tio estas komprenebla, sed nekredeble tempopostula tasko.
Por Proof Of Consept mi ​​ne efektivigis ĉi tion.

Kiel rezulto, la sekvaj ŝanĝoj estos faritaj al la FS; jen kiel la FS aspektas antaŭ steganografio (sondosiero antaŭe estis registrita).
Steganografio de dosieroj
Kaj jen kiel aspektas la FS kun la informoj jam zipitaj.
Steganografio de dosieroj

Algoritmo de legado

La punktoj:

  • Kun kono de la ŝlosilo kaj la metodo de konstruado de markiloj, verku la unuajn N-signojn, kun la garantio, ke N multiplikita per la longo de la dosiersistembloko estas pli granda ol la longo de la steganografigita dosiero;
  • Serĉu blokojn en la FS komencante per markiloj;
  • Deĉifri la ricevitajn blokojn kaj apartigu la markilojn;
  • Kolektu la rezultajn blokojn en la ĝusta ordo kaj ricevu la fontdosieron.

Por amantoj de blokdiagramoj

Malsupre estas blokdiagramo de la registra algoritmo. La algoritmo ricevas tri dosierojn kiel enigo:
- Dosiera sistemo bildo;
-Dosiero kun ĉifra ŝlosilo por AES;
-Dosiero kun markilo.
Steganografio de dosieroj

Post kiam la programo funkcias, aperas la Legita dosiero, kiu estos la dosiero ĉerpita el la steganografigita dosiersistemo; se la ŝlosilo aŭ markilo estis specifita malĝuste, tiam la Legita dosiero estos malplena.
(por amantoj de beleco, vi povas enmeti ne nur la dosieron, sed "kapon" enhavantan metainformojn: dosiernomo, rajtoj, lasta modifita tempo, ktp.)

Ekaŭtomatigo

Por oportuno, bash-skriptoj estis skribitaj por aŭtomatigi la lanĉon en Linukso (provita sur Ubuntu 16.04.3 LTS).
Ni rigardu la lanĉon paŝon post paŝo.
Rekordo:

  1. sudo Copy_Flash.sh "DEVICE" - akiri la FS-bildon de DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – kreu virtualan medion, elŝutu la necesajn bibliotekojn kaj rulu la skriban skripton;
  3. sudo ./Write_Flash.sh "DEVICE" - skribu la ŝanĝitan FS denove al DEVICE.

Legado:

  1. sudo Copy_Flash.sh "DEVICE" - akiri la FS-bildon de DEVICE (flash);
  2. ./Read.sh “KEY” 'MARKER” - kreu virtualan medion, elŝutu la necesajn bibliotekojn kaj rulu la skipton por legado;
  3. En la nuna dosierujo, malfermu la Read-dosieron - ĉi tio estas la zipitaj informoj.

konkludo

Ĉi tiu steganografia metodo verŝajne bezonas plibonigon, plian testadon kaj plilongigon al pli popularaj dosiersistemoj, kiel ekzemple Graso32, NTFS и ext4.
Sed la celo de ĉi tiu laboro estis montri la principon per kiu eblas efektivigi kaŝitan konservadon de informoj en la dosiersistemo.
Helpe de tiaj algoritmoj, vi povas sentime stoki informojn, kaj se, se vi konas la ŝlosilon, eblas haki tian sistemon ne per kruda forto (sed per tre longa algoritmo), tiam sen koni la ŝlosilon, ĉi tiu sistemo ŝajnas al mi absolute stabila, tamen tio povas servi kiel kialo por aparta artikolo.

Ĉiu kodo estas efektivigita en Python-versio 3.5.2. Ekzemplo de laboro prezentita sur mia jutuba kanalo. La plena kodo de la projekto estas afiŝita GitHub.
(Jes, jes, mi scias, ke por la produkta versio oni devas skribi en io "rapida", ekzemple C 😉)
En ĉi tiu efektivigo, la grandeco de la eniga dosiero por steganografio ne devus superi 1000 kB.

Mi volas esprimi mian dankemon al la uzanto PavelMSTU por valoraj konsiloj pri planado de la studo kaj rekomendoj pri la dezajno de la artikolo.

fonto: www.habr.com

Aldoni komenton