Steganografi ku file: nyumputkeun data langsung di séktor

Mukadimah pondok

Steganografi, upami aya anu henteu émut, nyumput inpormasi dina sababaraha wadah. Contona, dina gambar (dibahas di dieu и di dieu). Anjeun oge bisa nyumputkeun data dina tabel layanan sistem file (ieu ditulis ngeunaan di dieu), komo dina pakét layanan protokol TCP. Hanjakal, sakabéh métode ieu boga hiji aral: dina urutan imperceptibly "nyelapkeun" informasi kana wadahna, anjeun peryogi algoritma licik nu tumut kana akun peculiarities tina struktur internal wadahna. Sareng masalah timbul sareng résistansi wadahna pikeun manipulasi: contona, upami anjeun rada ngédit gambar, inpormasi anu disumputkeun leungit.

Éta mungkin mun kumaha bae ngalakukeun tanpa algoritma licik sarta manipulasi halus kalawan data, sarta masih mastikeun pungsionalitas wadahna sarta tingkat ditarima kaamanan data disumputkeun? Ningali payun, kuring bakal nyarios - leres, anjeun tiasa! Kuring malah bakal nawiskeun utiliti.

Rincian katurunan tina metodeu

Gagasan dasarna saderhana sapertos niup kana dahi: aya daérah dina disk anu sistem operasi henteu kantos nyerat (atanapi nyerat dina kasus anu jarang). Pikeun ngahindarkeun kabutuhan milarian daérah-daérah ieu nganggo algoritma licik, kami bakal ngagunakeun redundansi - nyaéta, kami bakal duplikat inpormasi anu disumputkeun sababaraha kali dina sadaya séktor disk. Teras, di luhur sadaya kamulyaan ieu, anjeun tiasa nyiptakeun partisi anu diperyogikeun, pormat sistem file, nyerat file sareng masang OS - sadayana sami, bagian tina data rusiah bakal disimpen sareng tiasa dicandak, sareng duplikasi ulangan bakal ngabantosan urang. nempatkeun sakabeh aslina babarengan ti potongan.

Kauntungannana metoda ieu atra: urang teu gumantung kana format file, atawa malah dina tipe sistem file dipaké.

Kakurangan ogé, sigana, atra:

  • Data rusiah ngan bisa dirobah ku lengkep nulis balik sakabéh disk, dituturkeun ku nyieun deui eusi ditingali ku pamaké. Nanging, anjeun moal tiasa nganggo parangkat lunak anu nyiptakeun deui disk tina gambar: éta ogé bakal nyiptakeun deui data rusiah sateuacana.
  • Nu leuwih gede volume data rusiah, nu gede likelihood leungit sababaraha informasi.
  • Retrieving data tina disk tiasa nyandak lila. Ti sababaraha menit nepi ka sababaraha poé (disk modern badag).

Ayeuna hayu urang ngaléngkah ka spésifik.

Ieu jelas yén lamun saukur ngolesan data rusiah sakuliah disk, éta ngan bakal disumputkeun tina mata taranjang. Upami anjeun ngalengkepan pandangan anjeun, sebutkeun, pangropéa disk, data bakal muncul dina sagala kamulyaanna. Ku alatan éta, éta bakal jadi ide nu sae pikeun encrypt data supados teu muncul. Urang bakal énkripsi saderhana, tapi ngeunah: nganggo algoritma aes256-cbc. Kami bakal naroskeun ka pangguna pikeun konci enkripsi sareng ngantepkeun anjeunna mendakan kecap konci anu saé.

Patarosan salajengna nyaeta kumaha urang bisa ngabedakeun data "alus" tina data goréng. Di dieu hiji checksum bakal nulungan urang, tapi lain basajan, tapi SHA1. Jeung naon? Éta cukup saé pikeun git, janten éta ogé cocog sareng urang. Mutuskeun: kami nyadiakeun unggal sapotong disimpen inpormasi kalawan checksum a, sarta lamun sanggeus dekripsi eta cocog, eta hartina dekripsi éta suksés.

Anjeun ogé peryogi nomer fragmen sareng panjang total data rahasia. Nomer sempalan nyaéta pikeun ngalacak potongan-potongan anu parantos kami decipher sareng mana anu tinggaleun. Panjang total bakal mangpaat pikeun urang nalika ngolah sempalan panungtungan, ku kituna teu nulis data perlu (ie, padding). Nya, saprak urang masih gaduh header, kami bakal nambihan nami file rahasia di dinya. Ieu bakal mangpaat sanggeus dekripsi, ku kituna teu nebak kumaha carana muka eta.

Nguji métode dina prakna

Pikeun pariksa, hayu urang nyandak medium paling umum - flash drive. Kuring manggihan hiji heubeul kalawan 1 kapasitas GB, nu rada cocog pikeun percobaan. Upami anjeun, sapertos kuring, gaduh ideu pikeun henteu ngaganggu média fisik, tapi nguji éta dina file - gambar disk, teras kuring langsung nyarios: éta moal jalan. Nalika pormat "disk" sapertos kitu, Linux nyiptakeun file deui, sareng sadaya séktor anu henteu dianggo bakal dieusi nol.

Salaku mesin kalawan Linux Ubuntu, hanjakalna, kuring kungsi ngagunakeun stasiun cuaca dina buah prambus Pi 3 bohong dina balkon aya teu loba memori, jadi urang moal nyumputkeun file badag. Urang ngawatesan diri kana ukuran maksimum 10 megabytes. Henteu aya gunana pikeun nyumputkeun file anu alit teuing: utilitas nyerat data kana disk dina klaster 4 KB. Ku alatan éta, di handap ieu kami bakal ngawatesan diri kana file 3 kb - pas kana hiji klaster sapertos kitu.

Kami bakal nyindiran flash drive sacara bertahap, mariksa saatos unggal tahap naha inpormasi anu disumputkeun tiasa dibaca:

  1. Pormat gancang dina format FAT16 kalayan ukuran klaster 16 KB. Ieu naon Windows 7 nawarkeun pikeun ngalakukeun jeung flash drive nu teu boga sistem file.
  2. Ngeusian flash drive ku sagala jinis sampah ku 50%.
  3. Ngeusian flash drive ku sagala jinis sampah ku 100%.
  4. Format "Long" dina format FAT16 (nimpa sadayana).

Dua tés munggaran, saperti nu diharapkeun, réngsé dina kameunangan lengkep: utiliti éta bisa hasil nimba 10 megabytes data rusiah tina flash drive. Tapi saatos flash drive dieusian ku file, kagagalan lumangsung:

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile

Sakumaha anjeun tiasa tingali, ngan 158 klaster anu hasil didekripsi (632 kilobyte data atah, anu masihan 636424 bait payload). Éta jelas yén teu aya deui jalan pikeun kéngingkeun 10 megabyte di dieu, tapi diantara klaster ieu jelas aya duplikat. Anjeun malah teu bisa cageur 1 megabyte ku cara kieu. Tapi urang bisa ngajamin yén urang bakal cageur 3 kilobytes data rusiah ti flash drive sanajan geus formatna jeung ditulis kana kapasitas. Sanajan kitu, percobaan némbongkeun yén éta téh rada mungkin nimba file 120 kilobytes panjang tina flash drive misalna.

Tes panungtungan, hanjakalna, némbongkeun yén sakabéh flash drive ieu overwritten:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile

Teu aya hiji klaster anu salamet... Sedih, tapi henteu tragis! Sateuacan pormat, hayu urang nyobian ngadamel partisi dina flash drive, sareng parantos aya sistem file. Ku jalan kitu, éta asalna ti pabrik kalayan persis pormat ieu, jadi urang teu ngalakukeun nanaon curiga.
Diperkirakeun yén rohangan anu sayogi dina flash drive parantos rada ngirangan.

Hal ieu ogé rada diperkirakeun yén 10 megabytes teu bisa disumputkeun dina disk lengkep pinuh. Tapi ayeuna jumlah klaster anu suksés didekripsi parantos langkung ti dua kali!

Total clusters read: 250752, decrypted: 405

Hanjakal, teu mungkin keur ngumpul megabyte tina potongan, tapi dua ratus kilobyte gampang.

Nya, warta ngeunaan anu terakhir, cek ka-4, waktos ieu gumbira: lengkep pormat flash drive sapertos kitu henteu nyababkeun karusakan sadaya inpormasi! 120 kilobytes data rusiah pas pisan kana rohangan anu henteu dianggo.

Tabel kasimpulan tés:

Steganografi ku file: nyumputkeun data langsung di séktor

Téori sakedik: ngeunaan rohangan bébas sareng séktor anu henteu dianggo

Upami anjeun kantos ngabagi hard drive anjeun kana partisi, anjeun tiasa perhatikeun yén henteu salawasna mungkin pikeun ngalokasikeun sadaya rohangan bébas dina disk. Bagian kahiji sok dimimitian ku sababaraha indentation (biasana 1 megabyte, atawa 2048 séktor). Di tukangeun bagian anu terakhir, éta ogé tetep aya "buntut" leutik tina séktor anu henteu dianggo. Sarta kadangkala aya sela antara bagian, sanajan jarang.

Dina basa sejen, aya séktor dina disk nu teu bisa diakses salila gawé normal jeung disk, tapi data bisa ditulis kana séktor ieu! Sareng éta hartosna maca ogé. Disaluyukeun kanyataan yén aya ogé tabel partisi sareng kode bootloader, anu aya di daérah kosong dina awal disk.

Hayu urang istirahat tina bagian-bagian sakedap sareng ningali disk tina pandangan panon manuk, janten nyarios. Di dieu urang gaduh partisi kosong dina disk. Hayu urang nyieun sistem file di dinya. Naha urang tiasa nyarios yén sababaraha séktor dina disk tetep teu kahapus?

E-e-e - drum roll! Jawabanna bakal ampir sok enya! Mémang, dina kalolobaan kasus, nyiptakeun sistem file turun ngan ukur sababaraha blok inpormasi jasa kana disk, sareng upami henteu, eusi partisi henteu robih.

Sareng ogé - sacara émpiris - urang tiasa nganggap yén sistem file henteu tiasa salawasna ngeusian sadaya rohangan anu disayogikeun dugi ka séktor anu terakhir. Salaku conto, sistem file FAT16 kalayan ukuran klaster 64 kilobytes écés henteu tiasa ngeusian partisi anu ukuranana henteu langkung ti 64 kilobyte. Dina tungtung bagian sapertos kitu kedah janten "buntut" sababaraha séktor, teu tiasa diaksés pikeun nyimpen data pangguna. Sanajan kitu, asumsi ieu teu bisa dikonfirmasi sacara ékspériméntal.

Janten, pikeun maksimalkeun rohangan anu sayogi pikeun steganogram, anjeun kedah nganggo sistem file kalayan ukuran klaster anu langkung ageung. Anjeun oge bisa nyieun partisi a, sanajan ieu teu perlu (dina flash drive, contona). Teu perlu nyieun bagian kosong atawa ninggalkeun wewengkon unallocated - ieu bakal narik perhatian warga kabetot.

Utiliti pikeun percobaan

Anjeun tiasa noel kodeu sumber utiliti di dieu

Pikeun ngawangun, anjeun peryogi versi Qt 5.0 atanapi langkung luhur sareng OpenSSL. Upami aya anu henteu hasil, anjeun panginten kedah ngédit file steganodisk.pro.

Anjeun tiasa ngarobah ukuran klaster tina 4 KB ka, sebutkeun, 512 bait (dina secretfile.h). Dina waktos anu sami, biaya inpormasi jasa bakal ningkat: header sareng checksum ngeusian 68 bait anu tetep.

Anjeun kedah ngajalankeun utilitas, tangtosna, kalayan hak pangguna akar, sareng ati-ati. Moal aya patarosan anu ditaroskeun sateuacan nimpa file atanapi alat anu ditangtukeun!

Ngarasakeun.

sumber: www.habr.com

Tambahkeun komentar