Triemsysteem steganography

Hoi Habr.

Ik soe graach presintearje jim in lyts projekt op steganography, makke yn myn frije tiid fan studearjen.

Ik makke in projekt oer ferburgen opslach fan ynformaasje yn it bestânsysteem (fierder ФС).
Dit kin brûkt wurde om fertroulike ynformaasje te stellen foar edukative doelen.

Triemsysteem steganography

In heul âlde Linux FS waard keazen as prototype ext2.

Ymplemintaasje

Ymplemintaasje oerwagings

As it goed is om de ext2-standert te "ûnrafeljen", dan kinne jo ferfange dat yn de FS in sg. Superblokken, dy't basisynformaasje oer it systeem jout. Neidat ik waard fûn Block Bitmap и Inode Tabel. Hast fuortendaliks waard it idee berne om ynformaasje op te nimmen yn op it stuit lege FS-blokken. No wie it wurdich te tinken oer beskerming fan in bewapene programmeur hex bewurker.

As jo ​​​​ferburgen ynformaasje opslaan sûnder fersifering, dan, sels nettsjinsteande syn wazigens yn 'e FS, sil it noch te opfallend wêze, foaral as de programmeur wit wat te sykjen. Dêrom waard besletten om alle blokken fan it boarnebestân te fersiferjen. Ik keas blok cipher AES, mar as jo begripe, dit is net wichtich.

Om de nedige blokken te skieden fan alle oaren by it lêzen, waard besletten om elk blok oan it begjin fan it blok in spesjale marker ta te foegjen. Dit token is fersifere ôfhinklik fan it bloknûmer yn it boarnebestân. Dizze trúk makke it fuortendaliks mooglik om net allinich de nedige blokken te finen, mar ek har juste folchoarder te erkennen.

Algemiene bestjoeringssysteem prinsipe fan it systeem.

Triemsysteem steganography

Opname algoritme

Op punten:

  • Skriuw earst wat ynformaasje nei it boarnebestânsysteem;
  • Wiskje dizze ynformaasje (net needsaaklik alle);
  • It te ferbergjen triem is ferdield yn blokken fan gelikense lingte, it tafoegjen fan in marker;
  • Fersiferje dizze blokken;
  • Plak fersifere blokken yn lege FS-blokken.

Foar leafhawwers fan blokdiagrammen

Hjirûnder is in blokdiagram fan it opnamealgoritme. It algoritme ûntfangt fjouwer bestannen as ynfier:
-Ofbylding fan in modifisearjend bestânsysteem;
-Bestân ûnder foarbehâld fan steganografy;
-Triem mei fersiferingskaai foar AES;
-Triem mei marker.
Triemsysteem steganography

It is de muoite wurdich op te merken dat dit algoritme ien nadeel hat: nei it skriuwen fan it bestân nei de FS, kin net skriuw alles nij yn 'e FS, om't elke nije ynformaasje kin einigje yn' e blokken dy't wy hawwe tawiisd oan ús zip-bestân, hoewol dit ek de mooglikheid iepenet om "ús spoaren fluch te dekken."

Mar it is dúdlik hoe't dit kin wurde reparearre: it is nedich om it algoritme foar it skriuwen fan blokken yn 'e FS te herskriuwen. Dit is in begryplike, mar ongelooflijk tiidslinend taak.
Foar Proof Of Consept haw ik dit net ymplementearre.

As resultaat sille de folgjende wizigingen makke wurde oan 'e FS; dit is hoe't de FS derút sjocht foar steganografy (in audiobestân waard earder opnommen).
Triemsysteem steganography
En dit is hoe't de FS derút sjocht mei de ynformaasje dy't al ynpakt is.
Triemsysteem steganography

Reading algoritme

Op punten:

  • Mei kennis fan de kaai en de metoade fan it bouwen fan markers, komponearje de earste N markers, mei de garânsje dat N fermannichfâldige mei de lingte fan it triemsysteem blok grutter is as de lingte fan de zipped triem;
  • Sykje nei blokken yn 'e FS begjinnend mei markers;
  • Untsiferje de ûntfongen blokken en skiede de markers;
  • Sammelje de resultearjende blokken yn 'e juste folchoarder en krije it boarnebestân.

Foar leafhawwers fan blokdiagrammen

Hjirûnder is in blokdiagram fan it opnamealgoritme. It algoritme ûntfangt trije bestannen as ynfier:
-ôfbylding fan bestânsysteem;
-Triem mei fersiferingskaai foar AES;
-Triem mei marker.
Triemsysteem steganography

Nei't it programma rint, ferskynt de Read-bestân, dat sil de triem wêze dy't út it steganografearre bestânsysteem wurdt ekstrahearre; as de kaai of marker ferkeard opjûn is, dan sil de Read-bestân leech wêze.
(foar leafhawwers fan skientme kinne jo net allinich it bestân ôfwikselje, mar in "koptekst" mei meta-ynformaasje: bestânsnamme, rjochten, lêste wizige tiid, ensfh.)

Startup automatisearring

Foar gemak waarden bash-skripts skreaun om de lansearring op Linux te automatisearjen (test op Ubuntu 16.04.3 LTS).
Litte wy de lansearring stap foar stap sjen.
Opnimme:

  1. sudo Copy_Flash.sh "DEVICE" - krije de FS-ôfbylding fan DEVICE (flash);
  2. ./Write.sh "FILE" "KEY" "MARKER" - meitsje in firtuele omjouwing, download de nedige biblioteken en fier it skriuwskript út;
  3. sudo ./Write_Flash.sh "DEVICE" - skriuw de feroare FS nochris nei DEVICE.

Lêzing:

  1. sudo Copy_Flash.sh "DEVICE" - krije de FS-ôfbylding fan DEVICE (flash);
  2. ./Read.sh "KEY" 'MARKER" - meitsje in firtuele omjouwing, download de nedige biblioteken en rinne de skipt foar lêzen;
  3. Iepenje yn 'e aktuele map it bestân Lês - dit is de zippe ynformaasje.

konklúzje

Dizze steganografymetoade hat wierskynlik ferbettering nedich, ekstra testen en útwreiding nei populêrere bestânssystemen, lykas Fet32, NTFS и ext4.
Mar it doel fan dit wurk wie om it prinsipe sjen te litten wêrmei't it mooglik is om ferburgen opslach fan ynformaasje yn it bestânsysteem út te fieren.
Mei help fan sokke algoritmen kinne jo sûnder eangst ynformaasje opslaan, en as, as jo de kaai kenne, it mooglik is om sa'n systeem net troch brute krêft te hacken (mar troch in heul lang algoritme), dan sûnder de kaai te witten, dit systeem liket my absolút stabyl, lykwols, dit kin tsjinje as reden foar in apart artikel.

Alle koade wurdt ymplementearre yn Python ferzje 3.5.2. Foarbyld fan wurk presintearre op myn YouTube-kanaal. De folsleine koade fan it projekt wurdt pleatst op GitHub.
(Ja, ja, ik wit dat jo foar de produksjeferzje wat "snel" moatte skriuwe, bygelyks C 😉)
Yn dizze ymplemintaasje moat de grutte fan it ynfierbestân foar steganography net mear wêze as 1000 kB.

Ik wol myn tankberens uterje oan de brûker PavelMSTU foar weardefolle advys by it plannen fan 'e stúdzje en oanbefellings oer it ûntwerp fan it artikel.

Boarne: www.habr.com

Add a comment