Steganography ng file system

Hoy Habr.

Nais kong ipakita sa iyo ang isang maliit na proyekto sa steganography, ginawa sa aking libreng oras mula sa pag-aaral.

Gumawa ako ng isang proyekto sa nakatagong imbakan ng impormasyon sa file system (karagdagang ФС).
Maaari itong magamit upang magnakaw ng kumpidensyal na impormasyon para sa mga layuning pang-edukasyon.

Steganography ng file system

Isang napakatandang Linux FS ang napili bilang prototype ext2.

Pagpapatupad

Mga Pagsasaalang-alang sa Pagpapatupad

Kung magandang i-“unravel” ang ext2 standard, pwede mong palitan yan sa FS may tinatawag na Mga superblock, na nagbibigay ng pangunahing impormasyon tungkol sa system. Matapos akong matagpuan I-block ang Bitmap и Inode Table. Halos kaagad, ang ideya ng pagtatala ng impormasyon sa kasalukuyang walang laman na mga bloke ng FS ay ipinanganak. Ngayon ito ay nagkakahalaga ng pag-iisip tungkol sa proteksyon mula sa isang programmer na armado hex editor.

Kung mag-imbak ka ng nakatagong impormasyon nang walang pag-encrypt, kung gayon, kahit na sa kabila ng pagkalabo nito sa FS, ito ay magiging masyadong kapansin-pansin, lalo na kung alam ng programmer kung ano ang hahanapin. Samakatuwid, napagpasyahan na i-encrypt ang lahat ng mga bloke ng source file. Pinili ko ang block cipher AES, ngunit tulad ng naiintindihan mo, hindi ito mahalaga.

Upang paghiwalayin ang mga kinakailangang bloke mula sa lahat ng iba pa kapag nagbabasa, napagpasyahan na magdagdag ng isang espesyal na marker sa bawat bloke sa simula ng bloke. Ang token na ito ay na-encrypt depende sa block number sa source file. Ang lansihin na ito ay agad na ginawang posible hindi lamang upang mahanap ang mga kinakailangang bloke, ngunit din upang makilala ang kanilang tamang pagkakasunud-sunod.

Pangkalahatang prinsipyo ng pagpapatakbo ng system.

Steganography ng file system

Pagre-record ng algorithm

Ang mga puntos:

  • Sumulat muna ng ilang impormasyon sa source file system;
  • Tanggalin ang impormasyong ito (hindi lahat);
  • Ang file na itatago ay nahahati sa mga bloke ng pantay na haba, pagdaragdag ng isang marker;
  • I-encrypt ang mga bloke na ito;
  • Ilagay ang mga naka-encrypt na bloke sa mga walang laman na bloke ng FS.

Para sa mga mahilig sa block diagram

Nasa ibaba ang isang block diagram ng recording algorithm. Ang algorithm ay tumatanggap ng apat na file bilang input:
-Larawan ng isang nababagong file system;
-File na napapailalim sa steganography;
-File na may encryption key para sa AES;
-File na may marker.
Steganography ng file system

Dapat pansinin kaagad na ang algorithm na ito ay may isang sagabal: pagkatapos isulat ang file sa FS, hindi pwede magsulat ng anumang bago sa FS, dahil ang anumang bagong impormasyon ay maaaring mapunta sa mga bloke na inilaan namin sa aming naka-zip na file, bagama't nagbubukas din ito ng posibilidad na "mabilis na takpan ang aming mga track."

Ngunit medyo halata kung paano ito maaayos: kinakailangan na muling isulat ang algorithm para sa pagsusulat ng mga bloke sa FS. Ito ay isang naiintindihan, ngunit hindi kapani-paniwalang pag-ubos ng oras na gawain.
For Proof Of Consept hindi ko ito ipinatupad.

Bilang resulta, ang mga sumusunod na pagbabago ay gagawin sa FS; ito ang hitsura ng FS bago ang steganography (isang audio file ay dating naitala).
Steganography ng file system
At ito ang hitsura ng FS na may naka-zip na impormasyon.
Steganography ng file system

Pagbasa ng algorithm

Ang mga puntos:

  • Sa kaalaman sa susi at paraan ng paggawa ng mga marker, buuin ang unang N marker, na may garantiya na ang N na pinarami ng haba ng block ng file system ay mas malaki kaysa sa haba ng naka-zip na file;
  • Maghanap ng mga bloke sa FS na nagsisimula sa mga marker;
  • Tukuyin ang natanggap na mga bloke at paghiwalayin ang mga marker;
  • Kolektahin ang mga nagresultang bloke sa tamang pagkakasunud-sunod at kunin ang source file.

Para sa mga mahilig sa block diagram

Nasa ibaba ang isang block diagram ng recording algorithm. Ang algorithm ay tumatanggap ng tatlong mga file bilang input:
-Imahe ng system ng file;
-File na may encryption key para sa AES;
-File na may marker.
Steganography ng file system

Matapos tumakbo ang programa, lilitaw ang Read file, na kung saan ay ang file na kinuha mula sa steganographed file system; kung ang key o marker ay tinukoy nang hindi tama, ang Read file ay magiging walang laman.
(para sa mga mahilig sa kagandahan, maaari mong ipasok hindi lamang ang file, ngunit isang "header" na naglalaman ng meta-impormasyon: pangalan ng file, mga karapatan, huling binagong oras, atbp.)

Startup automation

Para sa kaginhawahan, isinulat ang mga script ng bash upang i-automate ang paglulunsad sa Linux (nasubok sa Ubuntu 16.04.3 LTS).
Tingnan natin ang hakbang-hakbang na paglulunsad.
Itala:

  1. sudo Copy_Flash.sh “DEVICE” - kunin ang FS na imahe mula sa DEVICE (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – lumikha ng isang virtual na kapaligiran, i-download ang mga kinakailangang aklatan at patakbuhin ang write script;
  3. sudo ./Write_Flash.sh “DEVICE” – isulat muli ang binagong FS sa DEVICE.

Pagbasa:

  1. sudo Copy_Flash.sh “DEVICE” - kunin ang FS na imahe mula sa DEVICE (flash);
  2. ./Read.sh “KEY” ‘MARKER’ - lumikha ng virtual na kapaligiran, i-download ang mga kinakailangang aklatan at patakbuhin ang skipt para sa pagbabasa;
  3. Sa kasalukuyang direktoryo, buksan ang Read file - ito ang naka-zip na impormasyon.

Konklusyon

Ang pamamaraang ito ng steganography ay malamang na nangangailangan ng pagpapabuti, karagdagang pagsubok at extension sa mas sikat na mga file system, gaya ng Fat32, NTFS и ext4.
Ngunit ang layunin ng gawaing ito ay upang ipakita ang prinsipyo kung saan posible na isagawa ang nakatagong imbakan ng impormasyon sa file system.
Sa tulong ng naturang mga algorithm, maaari kang walang takot na mag-imbak ng impormasyon, at kung, kung alam mo ang susi, posible na i-hack ang naturang sistema hindi sa pamamagitan ng malupit na puwersa (ngunit sa pamamagitan ng isang napakahabang algorithm), kung gayon nang hindi nalalaman ang susi, ito Ang sistema ay tila sa akin ay ganap na matatag, gayunpaman, ito ay maaaring magsilbi bilang isang dahilan para sa isang hiwalay na artikulo.

Ang lahat ng code ay ipinatupad sa Python bersyon 3.5.2. Halimbawa ng trabaho ipinakita sa aking youtube channel. Ang buong code ng proyekto ay naka-post sa github.
(Oo, oo, alam ko na para sa bersyon ng produksyon kailangan mong magsulat sa isang bagay na "mabilis", halimbawa C 😉)
Sa pagpapatupad na ito, ang laki ng input file para sa steganography ay hindi dapat lumampas sa 1000 kB.

Gusto kong ipahayag ang aking pasasalamat sa gumagamit PavelMSTU para sa mahalagang payo sa pagpaplano ng pag-aaral at mga rekomendasyon sa disenyo ng artikulo.

Pinagmulan: www.habr.com

Magdagdag ng komento