Steganografie in die lêerstelsel

Haai Habr.

Ek wil vir jou 'n klein projek oor steganografiein my vrye tyd gemaak.

Ek het 'n projek gemaak oor versteekte berging van inligting in die lêerstelsel (verder FS).
Dit kan gebruik word om vertroulike inligting vir opvoedkundige doeleindes te steel.

Steganografie in die lêerstelsel

'n Baie ou Linux FS is as prototipe gekies ext2.

Implementering

Implementeringsoorwegings

As dit goed is om die ext2-standaard te "irriteer", dan kan ons vervang dat daar in die FS 'n sg. Superblokke, wat basiese inligting oor die stelsel verskaf. Na my is gevind blok bitmap и Inode Tabel. Byna onmiddellik is die idee gebore om inligting in tans leë FS-blokke te skryf. Nou was dit die moeite werd om te oorweeg beskerming teen 'n programmeerder gewapen met hex redakteur.

As jy verborge inligting stoor sonder enkripsie, dan, al is dit vaag in die FS, sal dit steeds te opvallend wees, veral as die programmeerder weet waarna om te kyk. Daarom is besluit om alle blokke van die bronlêer te enkripteer. Ek het bloksyfer gekies AES, maar soos jy kan sien, maak dit nie saak nie.

Om die nodige blokkies van al die ander te skei tydens lees, is besluit om 'n spesiale merker by elke blokkie aan die begin van die blokkie te voeg. Hierdie merker is geïnkripteer afhangende van die bloknommer in die bronlêer. So 'n truuk het onmiddellik toegelaat om nie net die regte blokke te vind nie, maar ook om hul korrekte volgorde uit te vind.

Die algemene beginsel van die stelsel.

Steganografie in die lêerstelsel

Skryf algoritme

Op punte:

  • Skryf eers inligting na die oorspronklike lêerstelsel;
  • Vee hierdie inligting uit (nie noodwendig almal nie);
  • Verdeel die lêer om weg te steek in blokke van dieselfde lengte deur 'n merker by te voeg;
  • Enkripteer hierdie blokke;
  • Plaas geënkripteerde blokke in leë FS-blokke.

Vir liefhebbers van vloeidiagramme

Hieronder is 'n blokdiagram van die opname-algoritme. Die algoritme ontvang vier lêers as invoer:
-Beeld van die veranderlike lêerstelsel;
-Lêer onderhewig aan steganografie;
-Lêer met enkripsiesleutel vir AES;
- Lêer met 'n merker.
Steganografie in die lêerstelsel

Daar moet dadelik op gelet word dat hierdie algoritme een nadeel het: nadat die lêer na die FS geskryf is, moet nie skryf iets nuuts aan die FS, aangesien enige nuwe inligting in die blokke kan kom wat ons aan ons gezipte lêer toegewys het, alhoewel dit ook die moontlikheid oopmaak om "spore vinnig te bedek".

Maar dit is duidelik hoe dit reggestel kan word: dit is nodig om die algoritme vir die skryf van blokke na die FS te herskryf. Dit is 'n verstaanbare, maar ongelooflike tydrowende taak.
Vir Proof Of Consept het ek dit nie geïmplementeer nie.

Die resultaat sal die volgende veranderinge in die FS wees, dit is hoe die FS lyk voor steganografie ('n oudiolêer is voorheen opgeneem).
Steganografie in die lêerstelsel
En dit is hoe die FS lyk met reeds gezipte inligting.
Steganografie in die lêerstelsel

Lees algoritme

Op punte:

  • Met die kennis van die sleutel en die metode om merkers te konstrueer, stel die eerste N merkers saam, met die waarborg dat N vermenigvuldig met die lengte van die lêerstelselblok groter is as die lengte van die ritslêer;
  • Soek vir blokke in die FS wat met merkers begin;
  • Dekripteer ontvangde blokke en aparte merkers;
  • Stel die resulterende blokke in die regte volgorde bymekaar en kry die bronlêer.

Vir liefhebbers van vloeidiagramme

Hieronder is 'n blokdiagram van die opname-algoritme. Die algoritme ontvang drie lêers as invoer:
- Beeldlêerstelsel;
-Lêer met enkripsiesleutel vir AES;
- Lêer met 'n merker.
Steganografie in die lêerstelsel

Nadat die program loop, verskyn die Lees-lêer, wat die lêer sal wees wat uit die steganografeerde FS onttrek is, as die sleutel of merker verkeerd gespesifiseer is, sal die Lees-lêer leeg wees.
(vir liefhebbers van mooiheid, kan jy nie net die lêer afwissel nie, maar die "header" wat meta-inligting bevat: lêernaam, regte, laaste gewysigde tyd, ens.)

Begin outomatisering

Gerieflikheidshalwe is bash-skrifte geskryf wat die bekendstelling op Linux outomatiseer (getoets op Ubuntu 16.04.3 LTS).
Kom ons kyk stap vir stap na die bekendstelling.
Запись:

  1. sudo Copy_Flash.sh "DEVICE" - kry die FS-beeld vanaf DEVICE (flits);
  2. ./Write.sh "FILE" "KEY" "MARKER" - skep 'n virtuele omgewing, laai die nodige biblioteke af en voer die skryfskrif uit;
  3. sudo ./Write_Flash.sh "DEVICE" - skryf die gewysigde FS terug na DEVICE.

Lees:

  1. sudo Copy_Flash.sh "DEVICE" - kry die FS-beeld vanaf DEVICE (flits);
  2. ./Read.sh “KEY” 'MARKER” - skep 'n virtuele omgewing, laai die nodige biblioteke af en voer die skrif uit vir lees;
  3. In die huidige gids, maak die Lees-lêer oop - dit is die gezipte inligting.

Gevolgtrekking

Hierdie metode van steganografie moet waarskynlik verbeter, verder getoets en uitgebrei word na meer gewilde lêerstelsels soos Vet32, NTFS и ext4.
Maar die doel van hierdie werk was om die beginsel te wys waardeur dit moontlik is om verborge stoor van inligting in die lêerstelsel uit te voer.
Met die hulp van sulke algoritmes kan u inligting vreesloos stoor, en as, met die kennis van die sleutel, so 'n stelsel nie deur 'n volledige soektog gekap kan word nie (maar deur 'n baie lang algoritme), dan sonder om die sleutel te ken, hierdie stelsel lyk vir my absoluut stabiel, dit kan egter dien as rede vir 'n aparte artikel.

Alle kode is geïmplementeer in Python weergawe 3.5.2. Werk voorbeeld verskyn op my YouTube-kanaal. Die volledige projekkode is beskikbaar by Github.
(Ja, ja, ek weet dat jy vir die produksieweergawe in iets "vinnig" moet skryf, byvoorbeeld in C 😉 )
In hierdie implementering moet die grootte van die invoerlêer vir steganografie nie 1000 kB oorskry nie.

Ek wil die gebruiker bedank PavelMSTU vir waardevolle advies in die beplanning van die studie en aanbevelings vir die ontwerp van die artikel.

Bron: will.com

Voeg 'n opmerking