Pengantar singkat
Steganografi, jika ada yang tidak ingat, adalah penyembunyian informasi dalam wadah apa pun. Misalnya, dalam gambar (dibahas di
sini dan di
sini ). Anda juga dapat menyembunyikan data dalam tabel layanan sistem file (ini ditulis di
sini ), dan bahkan
dalam paket layanan TCP . Sayangnya, semua metode ini memiliki satu kelemahan: untuk diam-diam "menyelingi" informasi dalam sebuah wadah, Anda memerlukan algoritma rumit yang mempertimbangkan fitur-fitur struktur internal wadah. Ya, dan dengan resistensi wadah terhadap manipulasi, muncul masalah: misalnya, jika Anda sedikit mengedit gambar, informasi tersembunyi hilang.
Apakah mungkin untuk menghilangkan algoritma yang licik dan manipulasi data yang halus, sambil tetap memastikan kinerja penampung dan tingkat keamanan yang dapat diterima untuk data tersembunyi? Ke depan, saya akan mengatakan - ya, Anda bisa! Dan bahkan saya akan menawarkan utilitas.
Rincian Metode Berdarah
Ide dasarnya sederhana seperti pukulan klub pada dahi: ada area pada disk tempat sistem operasi tidak pernah menulis (atau menulis dalam kasus yang jarang terjadi) Agar tidak perlu mencari area-area ini dengan algoritma licik, kami akan menggunakan redundansi - yaitu, kami akan menduplikasi informasi tersembunyi kami ke semua sektor disk berkali-kali. Kemudian, tepat di atas semua kemegahan ini, Anda dapat membuat partisi yang diperlukan, memformat sistem file, menulis file dan menginstal OS - lagi pula, bagian dari data rahasia akan disimpan dan dapat diekstraksi, dan duplikasi berulang akan membantu kami untuk menyusun keseluruhan asli dari potongan-potongan.
Keuntungan dari metode ini jelas: kita tidak bergantung pada format file, atau bahkan pada jenis sistem file yang digunakan.
Kerugiannya juga, saya pikir, jelas:
- Data rahasia hanya dapat diubah dengan sepenuhnya menulis ulang seluruh disk, dengan rekonstruksi konten selanjutnya terlihat oleh pengguna. Pada saat yang sama, Anda tidak dapat menggunakan perangkat lunak yang membuat ulang disk dari gambar: itu akan membuat kembali data rahasia sebelumnya.
- Semakin besar jumlah data rahasia, semakin besar kemungkinan kehilangan sebagian informasi.
- Mengambil data dari disk bisa memakan waktu lama. Dari beberapa menit hingga beberapa hari (cakram modern berukuran besar).
Sekarang mari kita beralih ke detailnya.
Jelas bahwa jika Anda hanya mengolesi data rahasia di seluruh disk, maka mereka akan disembunyikan hanya dari mata telanjang. Jika Anda melengkapi mata Anda dengan, katakanlah, editor disk, maka data akan muncul dengan segala kemuliaan. Karena itu, akan lebih baik untuk mengenkripsi data sehingga tidak berkedip. Kami akan mengenkripsi sederhana, tetapi dengan rasa: sesuai dengan algoritma aes256-cbc. Kami meminta pengguna untuk kunci enkripsi, biarkan dia memikirkan kata sandi yang baik.
Pertanyaan selanjutnya adalah bagaimana kita bisa membedakan data "yang benar" dari data yang korup. Di sini checksum akan membantu kita, tetapi tidak sederhana, tetapi SHA1. Apa? Bagi git, itu cukup bagus, yang berarti itu cocok untuk kita. Diputuskan: kami memberikan setiap potongan informasi yang disimpan dengan checksum, dan jika setelah dekripsi bertepatan, maka dekripsi berhasil.
Anda juga memerlukan nomor fragmen dan panjang total data rahasia. Nomor fragmen - untuk melacak bagian mana yang telah kita dekripsi dan yang tersisa. Total panjang berguna bagi kami saat memproses fragmen terakhir, agar tidak menulis data tambahan (dengan kata lain, padding). Nah, karena kami masih mendapatkan judul, kami akan menambahkan nama file rahasia di sana. Ini akan berguna setelah dekripsi agar tidak menebak bagaimana membukanya.
Periksa metode dalam praktek
Untuk verifikasi, kami menggunakan media paling umum - flash drive. Saya menemukan yang lama pada 1 GB, yang sangat cocok untuk percobaan. Jika Anda, seperti saya, memiliki gagasan untuk tidak mandi uap dengan media fisik, tetapi menguji pada file - gambar disk, saya akan mengatakan segera: itu tidak akan berhasil. Ketika memformat "disk" seperti itu, Linux membuat file lagi, dan semua sektor yang tidak digunakan akan diisi dengan nol.
Sebagai mesin Linux, sayangnya, saya harus menggunakan stasiun cuaca di Raspberry Pi 3 yang terletak di balkon. Tidak ada banyak memori di sana, jadi kami tidak akan menyembunyikan file besar. Kami membatasi diri hingga ukuran maksimum 10 megabita. Tidak ada gunanya menyembunyikan file terlalu kecil baik: utilitas menulis data ke disk dalam kelompok 4 Kb. Oleh karena itu, dari bawah kami membatasi diri pada file 3 kb - cocok dengan satu cluster tersebut.
Kami akan mengejek flash drive secara bertahap, memeriksa setiap tahap apakah informasi tersembunyi dibaca:
- Memformat cepat dalam format FAT16 dengan ukuran cluster 16 kb. Inilah yang Windows 7 usulkan untuk dilakukan dengan flash drive yang tidak memiliki sistem file.
- Mengisi flash drive dengan semua jenis sampah hingga 50%.
- Mengisi flash drive dengan semua jenis sampah adalah 100%.
- "Long" format dalam format FAT16 (dengan menimpa segalanya).
Dua tes pertama diharapkan berakhir dengan kemenangan penuh: utilitas ini berhasil mengekstraksi 10 megabita data sensitif dari flash drive. Tetapi setelah flash drive diisi dengan file ke bola mata, kegagalan terjadi:
Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile
Seperti yang Anda lihat, hanya 158 kluster yang berhasil didekripsi (632 kilobyte data mentah, yang menghasilkan 636424 byte payload). Jelas bahwa tidak ada cara untuk mendapatkan 10 megabyte, dan jelas ada duplikat di antara kelompok-kelompok ini. Bahkan 1 megabyte tidak dapat dipulihkan dengan cara ini. Tetapi dapat dijamin bahwa kami akan memulihkan 3 kilobyte data sensitif dari flash drive bahkan setelah diformat dan ditulis ke bola mata. Namun, percobaan menunjukkan bahwa sangat mungkin untuk mengekstrak file 120 kilobyte dari flash drive tersebut.
Tes terakhir, sayangnya, menunjukkan bahwa flash drive telah ditimpa semua:
$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile
Tidak ada satu kelompok pun yang bertahan ... Sedihnya, tetapi tidak secara tragis! Mari kita coba membuat partisi pada flash drive sebelum memformat, dan sudah ada di dalamnya - sistem file. Ngomong-ngomong, dia datang dari pabrik dengan format ini, jadi kami tidak melakukan sesuatu yang mencurigakan.
Diharapkan ruang yang tersedia pada flash drive sedikit berkurang.
Diharapkan juga bahwa 10 megabyte masih tidak dapat disembunyikan pada drive yang sepenuhnya tersumbat. Tetapi sekarang jumlah cluster yang berhasil didekripsi telah lebih dari dua kali lipat!
Total clusters read: 250752, decrypted: 405
Sayangnya, satu megabyte tidak dapat dirakit dari potongan-potongan, tetapi dua ratus kilobyte mudah.
Nah, berita terakhir, cek ke-4, kali ini sangat menggembirakan: pemformatan penuh drive flash seperti itu tidak mengarah pada penghancuran semua informasi! 120 kilobyte data rahasia sangat sesuai dengan ruang yang tidak digunakan.
Tabel ringkasan untuk pengujian:

Sedikit berteori: tentang ruang kosong dan sektor yang tidak digunakan
Jika Anda pernah mempartisi hard disk, Anda mungkin memperhatikan bahwa jauh dari selalu memungkinkan untuk mengalokasikan semua ruang kosong pada disk. Bagian pertama selalu dimulai dengan beberapa indentasi (biasanya 1 megabyte, atau 2048 sektor). Di belakang bagian terakhir, juga, itu terjadi, masih ada "ekor" kecil dari sektor yang tidak digunakan. Dan terkadang ada celah antar bagian, meski jarang.
Dengan kata lain, ada sektor pada disk yang tidak dapat diakses selama kerja normal dengan disk, tetapi Anda dapat menulis data ke sektor ini! Yang berarti membaca juga. Disesuaikan dengan fakta bahwa ada juga tabel partisi dan kode bootloader, yang baru saja terletak di area kosong di awal disk.
Mari kita mengalihkan perhatian kita dari partisi untuk sementara waktu dan melihat cakram dari ketinggian, bisa dikatakan, tentang penerbangan burung. Di sini kita memiliki partisi kosong pada disk. Buat sistem file di dalamnya. Apakah mungkin untuk mengatakan bahwa beberapa sektor pada disk tetap tidak terkunci?
Dan-dan-dan - drum roll! Jawabannya hampir selalu - ya! Memang, dalam banyak kasus, pembuatan sistem file bermuara pada kenyataan bahwa hanya beberapa blok informasi layanan ditulis ke disk, tetapi sebaliknya isi bagian tidak berubah.
Namun - murni secara empiris - kita dapat mengasumsikan bahwa sistem file tidak selalu dapat mengambil semua ruang yang dialokasikan untuk itu ke sektor terakhir. Sebagai contoh, sistem file FAT16 dengan ukuran cluster 64 kilobyte jelas tidak akan dapat sepenuhnya menempati partisi dengan ukuran tidak lebih dari 64 kilobyte. Pada akhir bagian tersebut, ekor harus tetap berada di beberapa sektor, tidak dapat diakses untuk menyimpan data pengguna. Namun, secara eksperimental asumsi ini tidak dapat dikonfirmasi.
Jadi, untuk memaksimalkan ruang yang tersedia untuk steganogram, Anda perlu menggunakan sistem file yang lebih besar dengan ukuran cluster. Anda masih dapat membuat partisi, meskipun itu opsional (pada flash drive, misalnya). Tidak perlu membuat bagian kosong atau meninggalkan area yang tidak terisi - ini akan menarik perhatian warga yang tertarik.
Utilitas untuk percobaan
Sumber utilitas dapat ditemukan di
sini.Untuk membangun, Anda perlu Qt versi 5.0 dan lebih tinggi dan OpenSSL. Jika sesuatu tidak akan terjadi, Anda mungkin harus memperbaiki file steganodisk.pro.
Anda dapat mengubah ukuran cluster dari 4 KB menjadi, katakanlah, 512 byte (di secretfile.h). Pada saat yang sama, pengeluaran untuk informasi resmi akan meningkat: header dan checksum menempati 68 byte tetap.
Anda harus menjalankan utilitas, tentu saja, dengan hak pengguna root, dan dengan hati-hati. Tidak akan ada pertanyaan sebelum menimpa file atau perangkat yang ditentukan!
Selamat menikmati.