Fayllar bo'yicha steganografiya: ma'lumotlarni bevosita sektorlarda yashirish

Qisqa so'zboshi

Steganografiya, agar kimdir eslamasa, ba'zi konteynerlarda ma'lumotni yashiradi. Masalan, rasmlarda (muhokama qilingan shu yerda и shu yerda). Siz shuningdek fayl tizimining xizmat jadvallarida ma'lumotlarni yashirishingiz mumkin (bu haqida yozilgan shu yerda), va hatto TCP protokoli xizmat paketlarida. Afsuski, bu usullarning barchasi bitta kamchilikka ega: ma'lumotni konteynerga sezilmaydigan tarzda "qo'shish" uchun sizga konteynerning ichki tuzilishining o'ziga xos xususiyatlarini hisobga oladigan ayyor algoritmlar kerak. Va konteynerning manipulyatsiyaga chidamliligi bilan bog'liq muammolar paydo bo'ladi: masalan, agar siz rasmni biroz tahrir qilsangiz, yashirin ma'lumotlar yo'qoladi.

Ayyor algoritmlarsiz va ma'lumotlar bilan nozik manipulyatsiyalarsiz qandaydir tarzda qilish mumkinmi va baribir konteynerning funksionalligini va yashirin ma'lumotlar xavfsizligining maqbul darajasini ta'minlash mumkinmi? Oldinga qarab, men aytaman - ha, qila olasiz! Men hatto yordamchi dasturni ham taklif qilaman.

Usulning qonli tafsilotlari

Asosiy g'oya peshonaga zarba berish kabi oddiy: diskda operatsion tizim hech qachon yozmaydigan (yoki kamdan-kam hollarda yozadigan) joylar mavjud. Ayyor algoritmlardan foydalangan holda ushbu hududlarni qidirish zaruratining oldini olish uchun biz zaxiradan foydalanamiz - ya'ni biz yashirin ma'lumotlarimizni diskning barcha sektorlarida ko'p marta takrorlaymiz. Keyin, bu barcha ulug'vorlikning ustiga, siz kerakli bo'limlarni yaratishingiz, fayl tizimlarini formatlashingiz, fayllarni yozishingiz va operatsion tizimlarni o'rnatishingiz mumkin - baribir, maxfiy ma'lumotlarning bir qismi saqlanadi va olinishi mumkin va takroriy takrorlash bizga yordam beradi. asl nusxani bo'laklardan bir joyga qo'ying.

Ushbu usulning afzalligi aniq: biz fayl formatiga, hatto ishlatiladigan fayl tizimining turiga ham bog'liq emasmiz.

Kamchiliklari ham, menimcha, aniq:

  • Maxfiy ma'lumotlarni faqat butun diskni to'liq qayta yozish, keyin esa foydalanuvchiga ko'rinadigan tarkibni qayta yaratish orqali o'zgartirish mumkin. Biroq, siz diskni tasvirdan qayta yaratadigan dasturdan foydalana olmaysiz: u avvalgi maxfiy ma'lumotlarni ham qayta yaratadi.
  • Maxfiy ma'lumotlarning hajmi qanchalik katta bo'lsa, ba'zi ma'lumotlarni yo'qotish ehtimoli shunchalik yuqori bo'ladi.
  • Diskdan ma'lumotlarni olish uzoq vaqt talab qilishi mumkin. Bir necha daqiqadan bir necha kungacha (zamonaviy disklar katta).

Endi aniq narsalarga o'tamiz.

Ma'lumki, agar siz maxfiy ma'lumotlarni disk bo'ylab shunchaki surtsangiz, u faqat yalang'och ko'zdan yashirin bo'ladi. Agar siz ko'zlaringizni, aytaylik, disk muharriri bilan jihozlasangiz, ma'lumotlar butun ulug'vorligi bilan paydo bo'ladi. Shuning uchun, ma'lumotlar ko'rinmasligi uchun ularni shifrlash yaxshi fikr bo'ladi. Biz oddiy, ammo maza qilib shifrlaymiz: aes256-cbc algoritmidan foydalanib. Biz foydalanuvchidan shifrlash kalitini so'raymiz va unga yaxshi parol o'ylab topishiga ruxsat beramiz.

Keyingi savol - "yaxshi" ma'lumotni yomon ma'lumotlardan qanday ajratishimiz mumkin. Bu erda nazorat summasi bizga yordam beradi, lekin oddiy emas, balki SHA1. Nima edi? Bu git uchun etarli, shuning uchun u bizga ham mos keladi. Qaror qabul qilindi: biz har bir saqlangan ma'lumotni nazorat summasi bilan ta'minlaymiz va agar shifrdan keyin u mos kelsa, bu shifrni ochish muvaffaqiyatli bo'lganligini anglatadi.

Shuningdek, sizga parcha raqami va maxfiy ma'lumotlarning umumiy uzunligi kerak bo'ladi. Fragment raqami biz qaysi qismlarni allaqachon shifrlangan va qaysi biri qolganligini kuzatib borishdir. Keraksiz ma'lumotlarni (ya'ni, to'ldirish) yozmaslik uchun oxirgi qismni qayta ishlashda umumiy uzunlik biz uchun foydali bo'ladi. Xo'sh, bizda hali ham sarlavha borligi sababli, biz u erda maxfiy fayl nomini qo'shamiz. Uni qanday ochishni taxmin qilmaslik uchun shifrni hal qilgandan keyin foydali bo'ladi.

Usulni amaliyotda sinab ko'rish

Tekshirish uchun eng keng tarqalgan vositani - flesh-diskni olaylik. Men 1 GB sig'imga ega eskisini topdim, bu tajribalar uchun juda mos keladi. Agar siz, men kabi, jismoniy media bilan bezovta qilmaslik, balki uni faylda - disk tasvirida sinab ko'rish g'oyasiga kelgan bo'lsangiz, men darhol aytaman: bu ishlamaydi. Bunday "disk" ni formatlashda Linux yana faylni yaratadi va foydalanilmagan barcha sektorlar nollar bilan to'ldiriladi.

Linux bilan ishlaydigan mashina sifatida, afsuski, balkonda yotgan Raspberry Pi 3-da ob-havo stantsiyasidan foydalanishga majbur bo'ldim.U erda xotira ko'p emas, shuning uchun biz katta fayllarni yashirmaymiz. Biz o'zimizni maksimal 10 megabayt hajm bilan cheklaymiz. Bundan tashqari, juda kichik fayllarni yashirishning ma'nosi yo'q: yordamchi dastur ma'lumotlarni diskka 4 KB klasterlarda yozadi. Shuning uchun, quyida biz o'zimizni 3 kb fayl bilan cheklaymiz - u shunday klasterga mos keladi.

Biz flesh-diskni bosqichma-bosqich masxara qilamiz, har bir bosqichdan so'ng yashirin ma'lumot o'qilishi mumkinligini tekshiramiz:

  1. Klaster hajmi 16 KB bo'lgan FAT16 formatida tezkor formatlash. Windows 7 fayl tizimiga ega bo'lmagan flesh-disk bilan nima qilishni taklif qiladi.
  2. Fleshli diskni barcha turdagi axlat bilan 50% to'ldirish.
  3. Fleshli diskni barcha turdagi axlat bilan 100% to'ldirish.
  4. FAT16 formatida "uzun" formatlash (hamma narsani qayta yozish).

Dastlabki ikkita test, kutilganidek, to'liq g'alaba bilan yakunlandi: yordamchi dastur flesh-diskdan 10 megabaytlik maxfiy ma'lumotlarni muvaffaqiyatli chiqarib olishga muvaffaq bo'ldi. Ammo flesh-disk fayllar bilan to'ldirilgandan so'ng, xatolik yuz berdi:

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

Ko'rib turganingizdek, faqat 158 ​​ta klaster muvaffaqiyatli shifrlangan (632 kilobayt xom ma'lumot, bu 636424 10 bayt foydali yukni beradi). Bu erda 1 megabaytni olishning hech qanday usuli yo'qligi aniq, ammo bu klasterlar orasida aniq dublikatlar mavjud. Shu tarzda 3 megabaytni ham tiklay olmaysiz. Lekin biz flesh-diskdan 120 kilobaytlik maxfiy ma'lumotlarni formatlash va sig'imga yozishdan keyin ham qayta tiklashimizga kafolat bera olamiz. Biroq, tajribalar shuni ko'rsatadiki, bunday flesh-diskdan XNUMX kilobayt uzunlikdagi faylni chiqarib olish juda mumkin.

Oxirgi sinov, afsuski, butun flesh-diskning ustiga yozilganligini ko'rsatdi:

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

Birorta ham klaster omon qolmadi ... Achinarli, ammo fojiali emas! Formatlashdan oldin, keling, flesh-diskda bo'lim yaratishga harakat qilaylik va unda allaqachon fayl tizimi. Aytgancha, u zavoddan aynan shunday formatlash bilan kelgan, shuning uchun biz shubhali hech narsa qilmayapmiz.
Fleshli diskdagi bo'sh joy biroz qisqarganligi kutilmoqda.

Bundan tashqari, 10 megabaytni butunlay to'liq diskda yashirib bo'lmasligi kutilmoqda. Ammo endi shifrlangan klasterlar soni ikki baravar ko'paydi!

Total clusters read: 250752, decrypted: 405

Afsuski, megabaytni qismlardan yig'ish mumkin emas, lekin ikki yuz kilobayt oson.

Xo'sh, oxirgi, 4-chi tekshiruv haqidagi yangiliklar, bu safar quvonchli: bunday flesh-diskni to'liq formatlash barcha ma'lumotlarning yo'q qilinishiga olib kelmadi! 120 kilobayt maxfiy ma'lumotlar foydalanilmagan bo'shliqqa juda mos keladi.

Sinov xulosasi jadvali:

Fayllar bo'yicha steganografiya: ma'lumotlarni bevosita sektorlarda yashirish

Bir oz nazariya: bo'sh joy va foydalanilmagan tarmoqlar haqida

Agar siz qattiq diskingizni bo'limlarga bo'lgan bo'lsangiz, diskdagi barcha bo'sh joyni ajratish har doim ham mumkin emasligini payqagan bo'lishingiz mumkin. Birinchi bo'lim har doim biroz chekinish bilan boshlanadi (odatda 1 megabayt yoki 2048 sektor). Oxirgi qismning orqasida, foydalanilmagan tarmoqlarning kichik "dumi" qolishi ham sodir bo'ladi. Va ba'zida kamdan-kam hollarda bo'limlar orasidagi bo'shliqlar mavjud.

Boshqacha qilib aytadigan bo'lsak, diskda disk bilan normal ishlash vaqtida kirish mumkin bo'lmagan sektorlar mavjud, ammo ma'lumotlarni ushbu sektorlarga yozish mumkin! Va bu uni o'qishni anglatadi. Diskning boshida bo'sh maydonda joylashgan bo'lim jadvali va yuklash kodi ham mavjudligi uchun o'zgartirildi.

Keling, bo'limlardan bir oz tanaffus qilaylik va diskni qushning nazari bilan ko'rib chiqaylik. Bu erda diskda bo'sh bo'lim mavjud. Unda fayl tizimini yaratamiz. Diskdagi ba'zi sektorlar o'chirilmagan deb ayta olamizmi?

E-e-e - baraban rulosi! Javob deyarli har doim ha bo'ladi! Haqiqatan ham, ko'p hollarda fayl tizimini yaratish diskka faqat bir nechta xizmat ma'lumotlarini yozishga to'g'ri keladi va aks holda bo'limning mazmuni o'zgarmaydi.

Bundan tashqari - sof empirik tarzda - fayl tizimi har doim ham oxirgi sektorgacha unga ajratilgan barcha joyni egallamaydi deb taxmin qilishimiz mumkin. Masalan, klaster o'lchami 16 kilobayt bo'lgan FAT64 fayl tizimi hajmi 64 kilobaytdan katta bo'lmagan bo'limni to'liq egallamasligi aniq. Bunday bo'limning oxirida foydalanuvchi ma'lumotlarini saqlash uchun mavjud bo'lmagan bir nechta sektorlarning "dumi" bo'lishi kerak. Biroq, bu taxminni eksperimental ravishda tasdiqlash mumkin emas edi.

Shunday qilib, steganogramma uchun mavjud bo'sh joyni maksimal darajada oshirish uchun siz kattaroq klaster o'lchamiga ega fayl tizimidan foydalanishingiz kerak. Agar bu kerak bo'lmasa ham (masalan, flesh-diskda) bo'lim yaratishingiz mumkin. Bo'sh bo'limlarni yaratish yoki ajratilmagan hududlarni qoldirishning hojati yo'q - bu manfaatdor fuqarolarning e'tiborini tortadi.

Tajribalar uchun yordamchi dastur

Yordamchi dasturning manba kodiga tegishingiz mumkin shu yerda

Qurilish uchun sizga Qt 5.0 yoki undan yuqori versiya va OpenSSL kerak bo'ladi. Agar biror narsa ishlamasa, steganodisk.pro faylini tahrirlashingiz kerak bo'lishi mumkin.

Klaster hajmini 4 KB dan, masalan, 512 baytga (secretfile.h da) o'zgartirishingiz mumkin. Shu bilan birga, xizmat ma'lumotlarining narxi oshadi: sarlavha va nazorat summasi belgilangan 68 baytni egallaydi.

Yordamchi dasturni, albatta, ildiz foydalanuvchi huquqlari bilan va ehtiyotkorlik bilan ishlatishingiz kerak. Belgilangan fayl yoki qurilmani qayta yozishdan oldin hech qanday savol berilmaydi!

Rohatlaning.

Manba: www.habr.com

a Izoh qo'shish