Steganografi sistem fail

Hai Habr.

Saya ingin membentangkan projek kecil kepada anda steganografi, dibuat pada masa lapang saya dari belajar.

Saya membuat projek mengenai penyimpanan maklumat tersembunyi dalam sistem fail (selanjutnya FS).
Ini boleh digunakan untuk mencuri maklumat sulit untuk tujuan pendidikan.

Steganografi sistem fail

Linux FS yang sangat lama telah dipilih sebagai prototaip ext2.

РСализация

Pertimbangan Pelaksanaan

Jika adalah baik untuk "merungkai" standard ext2, maka anda boleh menggantikannya dalam FS terdapat apa yang dipanggil Superblok, yang menyediakan maklumat asas tentang sistem. Selepas saya ditemui Sekat Peta Bit ΠΈ Jadual Inode. Hampir serta-merta, idea merekodkan maklumat ke dalam blok FS yang kosong telah dilahirkan. Sekarang ia patut memikirkan perlindungan daripada pengaturcara bersenjata editor hex.

Jika anda menyimpan maklumat tersembunyi tanpa penyulitan, maka, walaupun ia kabur dalam FS, ia masih akan menjadi terlalu ketara, terutamanya jika pengaturcara tahu apa yang perlu dicari. Oleh itu, ia telah memutuskan untuk menyulitkan semua blok fail sumber. Saya memilih sifir blok AES, tetapi seperti yang anda faham, ini tidak penting.

Untuk memisahkan blok yang diperlukan daripada semua yang lain semasa membaca, ia telah memutuskan untuk menambah penanda khas pada setiap blok pada permulaan blok. Token ini disulitkan bergantung pada nombor blok dalam fail sumber. Silap mata ini serta-merta membolehkan bukan sahaja untuk mencari blok yang diperlukan, tetapi juga untuk mengenali susunan yang betul.

Prinsip operasi umum sistem.

Steganografi sistem fail

Algoritma rakaman

Mengenai perkara:

  • Mula-mula tulis beberapa maklumat ke sistem fail sumber;
  • Padamkan maklumat ini (tidak semestinya semua);
  • Fail yang akan disembunyikan dibahagikan kepada blok yang sama panjang, menambah penanda;
  • Sulitkan blok ini;
  • Letakkan blok yang disulitkan dalam blok FS kosong.

Untuk pencinta gambarajah blok

Di bawah ialah gambarajah blok algoritma rakaman. Algoritma menerima empat fail sebagai input:
-Imej sistem fail yang boleh diubah suai;
-Fail tertakluk kepada steganografi;
-Fail dengan kunci penyulitan untuk AES;
-Fail dengan penanda.
Steganografi sistem fail

Perlu diperhatikan dengan segera bahawa algoritma ini mempunyai satu kelemahan: selepas menulis fail ke FS, tidak boleh tulis apa-apa yang baharu ke dalam FS, kerana sebarang maklumat baharu boleh berakhir dalam blok yang telah kami peruntukkan pada fail zip kami, walaupun ini juga membuka kemungkinan "menutup jejak kami dengan cepat."

Tetapi agak jelas bagaimana ini boleh diperbaiki: adalah perlu untuk menulis semula algoritma untuk menulis blok dalam FS. Ini adalah tugas yang boleh difahami, tetapi sangat memakan masa.
Untuk Proof Of Consept saya tidak melaksanakan ini.

Hasilnya ialah perubahan berikut dalam FS, ini adalah rupa FS sebelum steganografi (fail audio telah dirakam sebelum ini).
Steganografi sistem fail
Dan ini adalah rupa FS dengan maklumat yang telah dizipkan.
Steganografi sistem fail

Algoritma membaca

Mengenai perkara:

  • Dengan pengetahuan tentang kunci dan kaedah membina penanda, karang penanda N pertama, dengan jaminan bahawa N didarab dengan panjang blok sistem fail adalah lebih besar daripada panjang fail berzip;
  • Cari blok dalam FS bermula dengan penanda;
  • Jelaskan blok yang diterima dan pisahkan penanda;
  • Kumpulkan blok yang terhasil dalam susunan yang betul dan dapatkan fail sumber.

Untuk pencinta gambarajah blok

Di bawah ialah gambarajah blok algoritma rakaman. Algoritma menerima tiga fail sebagai input:
-Imej sistem fail;
-Fail dengan kunci penyulitan untuk AES;
-Fail dengan penanda.
Steganografi sistem fail

Selepas program berjalan, fail Baca muncul, yang akan menjadi fail yang diekstrak daripada sistem fail steganografi; jika kunci atau penanda dinyatakan secara salah, maka fail Baca akan kosong.
(untuk pencinta kecantikan, anda boleh memasukkan bukan sahaja fail, tetapi "pengepala" yang mengandungi meta-maklumat: nama fail, hak, masa terakhir diubah suai, dsb.)

Automasi permulaan

Untuk kemudahan, skrip bash telah ditulis untuk mengautomasikan pelancaran pada Linux (diuji pada Ubuntu 16.04.3 LTS).
Mari lihat langkah demi langkah pelancaran.
Rekod:

  1. sudo Copy_Flash.sh β€œDEVICE” - dapatkan imej FS daripada DEVICE (flash);
  2. ./Write.sh β€œFILE” β€œKEY” β€œMARKER” – cipta persekitaran maya, muat turun perpustakaan yang diperlukan dan jalankan skrip tulis;
  3. sudo ./Write_Flash.sh β€œDEVICE” – tulis semula FS yang ditukar kepada DEVICE.

Membaca:

  1. sudo Copy_Flash.sh β€œDEVICE” - dapatkan imej FS daripada DEVICE (flash);
  2. ./Read.sh β€œKEY” 'MARKER" - cipta persekitaran maya, muat turun perpustakaan yang diperlukan dan jalankan langkau untuk membaca;
  3. Dalam direktori semasa, buka fail Baca - ini ialah maklumat yang dizip.

Kesimpulan

Kaedah steganografi ini mungkin memerlukan penambahbaikan, ujian tambahan dan sambungan kepada sistem fail yang lebih popular, seperti Fat32, NTFS ΠΈ ext4.
Tetapi tujuan kerja ini adalah untuk menunjukkan prinsip yang memungkinkan untuk menjalankan penyimpanan maklumat tersembunyi dalam sistem fail.
Dengan bantuan algoritma sedemikian, anda boleh menyimpan maklumat tanpa rasa takut, dan jika, jika anda mengetahui kuncinya, adalah mungkin untuk menggodam sistem sedemikian bukan dengan kekerasan (tetapi dengan algoritma yang sangat panjang), maka tanpa mengetahui kuncinya, ini sistem nampaknya benar-benar stabil, bagaimanapun, ini boleh menjadi alasan untuk artikel yang berasingan.

Semua kod dilaksanakan dalam Python versi 3.5.2. Contoh kerja dipaparkan di saluran youtube saya. Kod penuh projek disiarkan pada github.
(Ya, ya, saya tahu bahawa untuk versi pengeluaran anda perlu menulis dalam sesuatu "cepat", contohnya C πŸ˜‰)
Dalam pelaksanaan ini, saiz fail input untuk steganografi tidak boleh melebihi 1000 kB.

Saya ingin mengucapkan terima kasih kepada pengguna PavelMSTU untuk nasihat berharga dalam merancang kajian dan cadangan mengenai reka bentuk artikel.

Sumber: www.habr.com

Tambah komen