Fayllar üzrə steqanoqrafiya: verilənlərin birbaşa sektorlarda gizlədilməsi

Qısa ön söz

Steqanoqrafiya, əgər kimsə xatırlamırsa, bəzi qablarda məlumatları gizlədir. Məsələn, şəkillərdə (müzakirə olunur burada и burada). Məlumatları fayl sisteminin xidmət cədvəllərində də gizlədə bilərsiniz (bu barədə yazılmışdır burada), və hətta TCP protokolu xidmət paketlərində. Təəssüf ki, bütün bu üsulların bir çatışmazlığı var: bir konteynerə məlumatı görünməz şəkildə "daxil etmək" üçün konteynerin daxili quruluşunun xüsusiyyətlərini nəzərə alan hiyləgər alqoritmlərə ehtiyacınız var. Konteynerin manipulyasiyaya qarşı müqaviməti ilə bağlı problemlər yaranır: məsələn, şəkli bir az redaktə etsəniz, gizli məlumatlar itirilir.

Hiyləgər alqoritmlər və məlumatlarla incə manipulyasiyalar olmadan hər hansı bir şəkildə etmək mümkündürmü və yenə də konteynerin funksionallığını və gizli məlumatların məqbul təhlükəsizliyini təmin etmək olarmı? İrəliyə baxaraq deyəcəm - bəli, edə bilərsiniz! Mən hətta sizə bir kommunal təklif edəcəm.

Metodun qanlı təfərrüatları

Əsas fikir alnına bir zərbə qədər sadədir: diskdə əməliyyat sisteminin heç vaxt yazmadığı (və ya nadir hallarda yazan) sahələr var. Hiyləgər alqoritmlərdən istifadə edərək bu sahələri axtarmağa ehtiyac qalmamaq üçün artıqlıqdan istifadə edəcəyik - yəni gizli məlumatlarımızı diskin bütün sektorlarında dəfələrlə təkrarlayacağıq. Sonra, bütün bu əzəmətin üstündə, lazımi bölmələr yarada, fayl sistemlərini formatlaya, faylları yaza və OS-ləri quraşdıra bilərsiniz - eyni zamanda, məxfi məlumatların bir hissəsi saxlanılacaq və əldə edilə bilər və təkrarlanan təkrarlama bizə kömək edəcəkdir. orijinalı bütövlükdə parçalardan birləşdirin.

Bu metodun üstünlüyü göz qabağındadır: biz fayl formatından, hətta istifadə olunan fayl sisteminin növündən də asılı deyilik.

Məncə, mənfi cəhətlər də açıqdır:

  • Gizli məlumatlar yalnız bütün diski tamamilə yenidən yazmaqla, sonra istifadəçiyə görünən məzmunu yenidən yaratmaqla dəyişdirilə bilər. Bununla belə, siz diski təsvirdən yenidən yaradan proqram təminatından istifadə edə bilməzsiniz: o, əvvəlki məxfi məlumatları da yenidən yaradacaq.
  • Gizli məlumatların həcmi nə qədər böyükdürsə, bəzi məlumatların itirilməsi ehtimalı bir o qədər yüksəkdir.
  • Diskdən məlumatların alınması uzun müddət çəkə bilər. Bir neçə dəqiqədən bir neçə günə qədər (müasir disklər böyükdür).

İndi spesifiklərə keçək.

Aydındır ki, sadəcə olaraq diskin hər tərəfinə gizli məlumatları sürtsəniz, o, yalnız çılpaq gözlə görünməyəcək. Baxışlarınızı, məsələn, bir disk redaktoru ilə təchiz etsəniz, məlumatlar bütün şöhrəti ilə görünəcək. Buna görə də, məlumatların görünməməsi üçün onları şifrələmək yaxşı olardı. Biz sadə, lakin zövqlə şifrələyəcəyik: aes256-cbc alqoritmindən istifadə etməklə. İstifadəçidən şifrələmə açarını soruşacağıq və ona yaxşı parol tapmağa icazə verəcəyik.

Növbəti sual "yaxşı" məlumatları pis məlumatlardan necə ayırd edə biləcəyimizdir. Burada yoxlama məbləği bizə kömək edəcək, lakin sadə deyil, SHA1. Və nə? Git üçün kifayət qədər yaxşıdır, ona görə də bizə uyğun olacaq. Qərara gəldik: biz hər bir saxlanılan məlumat parçasını yoxlama məbləği ilə təmin edirik və əgər deşifrədən sonra o, uyğun gəlirsə, deməli, deşifrə uğurlu olub.

Siz həmçinin fraqment nömrəsinə və məxfi məlumatın ümumi uzunluğuna ehtiyacınız olacaq. Parça nömrəsi, hansı parçaların artıq deşifrə edildiyini və hansının qaldığını izləmək üçündür. Lazımsız məlumatları (yəni doldurma) yazmamaq üçün son fraqmenti emal edərkən ümumi uzunluq bizim üçün faydalı olacaqdır. Yaxşı, hələ də başlığımız olduğundan, gizli faylın adını ora əlavə edəcəyik. Şifrəni açdıqdan sonra necə açılacağını təxmin etməmək üçün faydalı olacaq.

Metodun praktikada sınaqdan keçirilməsi

Yoxlamaq üçün ən çox yayılmış mühiti - flash sürücünü götürək. Təcrübələr üçün olduqca uyğun olan 1 GB tutumlu köhnəsini tapdım. Əgər siz də mənim kimi fiziki media ilə narahat olmamaq, ancaq onu bir faylda - disk təsvirində sınamaq fikrinə gəlmisinizsə, dərhal deyəcəyəm: işləməyəcək. Belə bir "diski" formatlayarkən, Linux yenidən fayl yaradır və istifadə olunmayan bütün sektorlar sıfırlarla doldurulacaq.

Təəssüf ki, Linux ilə işləyən bir maşın olaraq balkonda uzanan Raspberry Pi 3-də hava stansiyasından istifadə etməli oldum.Orada yaddaş çox deyil, ona görə də böyük faylları gizlətməyəcəyik. Biz özümüzü maksimum 10 meqabayt ölçüsü ilə məhdudlaşdırırıq. Çox kiçik faylları gizlətməyin də mənası yoxdur: yardım proqramı məlumatları 4 KB klasterlərdə diskə yazır. Buna görə də, aşağıda biz özümüzü 3 kb-lıq bir faylla məhdudlaşdıracağıq - o, belə bir klasterə uyğundur.

Fləş sürücünü mərhələlərlə ələ salacağıq, hər mərhələdən sonra gizli məlumatın oxunaqlı olub olmadığını yoxlayacağıq:

  1. 16 KB klaster ölçüsü ilə FAT16 formatında sürətli formatlaşdırma. Windows 7 fayl sistemi olmayan bir flash sürücü ilə bunu təklif edir.
  2. Fləş sürücünün hər cür zibillə doldurulması 50%.
  3. Fləş sürücünün hər cür zibillə doldurulması 100%.
  4. FAT16 formatında "uzun" formatlaşdırma (hər şeyin üzərinə yazmaq).

İlk iki sınaq, gözlənildiyi kimi, tam qələbə ilə başa çatdı: yardım proqramı fləş diskdən 10 meqabayt məxfi məlumatı uğurla çıxara bildi. Ancaq fləş sürücü sənədlərlə dolu olduqdan sonra nasazlıq baş verdi:

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

Gördüyünüz kimi, yalnız 158 klaster uğurla deşifrə edilib (632 kilobayt xam məlumat, bu da 636424 10 bayt faydalı yük verir). Aydındır ki, burada 1 meqabayt əldə etmək üçün heç bir yol yoxdur, lakin bu klasterlər arasında aydın şəkildə dublikatlar var. Bu yolla 3 meqabaytı belə bərpa edə bilməzsiniz. Amma biz zəmanət verə bilərik ki, fləş disk formatlaşdırıldıqdan və tutumuna yazıldıqdan sonra da ondan 120 kilobaytlıq məxfi məlumatı bərpa edəcəyik. Bununla belə, təcrübələr göstərir ki, belə bir fleş diskdən XNUMX kilobayt uzunluğunda fayl çıxarmaq olduqca mümkündür.

Son sınaq, təəssüf ki, bütün flash sürücünün üzərinə yazıldığını göstərdi:

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

Bir dənə də olsun klaster sağ qalmadı... Kədərli, amma faciəli deyil! Formatlaşdırmadan əvvəl, flash sürücüdə bir bölmə yaratmağa çalışaq və artıq onun içində bir fayl sistemi. Yeri gəlmişkən, zavoddan məhz bu formatlaşdırma ilə gəldi, ona görə də şübhəli bir şey etmirik.
Flaş sürücüdə mövcud yerin bir qədər azaldığı olduqca gözlənilir.

10 meqabaytın tam dolu diskdə gizlənə bilməyəcəyi də olduqca gözlənilir. Ancaq indi uğurla şifrələnmiş klasterlərin sayı iki dəfədən çox artıb!

Total clusters read: 250752, decrypted: 405

Təəssüf ki, parçalardan bir meqabayt yığmaq mümkün deyil, lakin iki yüz kilobayt asandır.

Yaxşı, son, 4-cü yoxlama haqqında xəbər, bu dəfə sevindiricidir: belə bir flash sürücünün tamamilə formatlaşdırılması bütün məlumatların məhvinə səbəb olmadı! 120 kilobayt məxfi məlumat istifadə olunmamış məkana mükəmməl uyğun gəlir.

Test xülasəsi cədvəli:

Fayllar üzrə steqanoqrafiya: verilənlərin birbaşa sektorlarda gizlədilməsi

Bir az nəzəriyyə: boş yer və istifadə olunmamış sektorlar haqqında

Əgər siz nə vaxtsa sabit diskinizi arakəsmələrə bölmüsünüzsə, diskdə bütün boş yerləri ayırmağın həmişə mümkün olmadığını fərq etmiş ola bilərsiniz. Birinci bölmə həmişə bəzi girinti ilə başlayır (adətən 1 meqabayt və ya 2048 sektor). Son hissənin arxasında istifadə olunmamış sektorların kiçik bir "quyruğu" qaldığı da olur. Və bəzən nadir hallarda olsa da, bölmələr arasında boşluqlar olur.

Yəni diskdə elə sektorlar var ki, disklə normal iş zamanı onlara daxil olmaq mümkün deyil, lakin bu sektorlara verilənlər yazıla bilər! Bu da onu oxumaq deməkdir. Diskin başlanğıcındakı boş sahədə yerləşən bölmə cədvəli və yükləyici kodunun olması faktı üçün düzəliş edilmişdir.

Bölmələrə bir az ara verək və diskə, belə demək mümkünsə, quşbaxışı ilə baxaq. Burada diskdə boş bir bölmə var. Onun içində bir fayl sistemi yaradaq. Diskdəki bəzi sektorların silinməmiş qaldığını deyə bilərikmi?

E-e-e - nağara roll! Cavab demək olar ki, həmişə bəli olacaq! Həqiqətən, əksər hallarda bir fayl sisteminin yaradılması diskə yalnız bir neçə xidmət məlumat blokunun yazılması ilə nəticələnir və əks halda bölmənin məzmunu dəyişmir.

Həm də - sırf empirik olaraq - güman edə bilərik ki, fayl sistemi həmişə sonuncu sektora qədər ona ayrılan bütün yerləri tuta bilməz. Məsələn, klaster ölçüsü 16 kilobayt olan bir FAT64 fayl sistemi, ölçüsü 64 kilobaytdan çox olmayan bir bölməni tamamilə tuta bilməz. Belə bir bölmənin sonunda istifadəçi məlumatlarını saxlamaq üçün əlçatmaz bir neçə sektorun "quyruğu" olmalıdır. Ancaq bu fərziyyə eksperimental olaraq təsdiqlənə bilmədi.

Beləliklə, steqanoqram üçün mövcud olan yeri artırmaq üçün daha böyük klaster ölçüsü olan fayl sistemindən istifadə etməlisiniz. Lazım olmasa belə (məsələn, bir flash sürücüdə) bir bölmə yarada bilərsiniz. Boş bölmələr yaratmağa və ya ayrılmamış əraziləri tərk etməyə ehtiyac yoxdur - bu, maraqlanan vətəndaşların diqqətini cəlb edəcəkdir.

Təcrübələr üçün köməkçi proqram

Siz yardım proqramının mənbə koduna toxuna bilərsiniz burada

Qurmaq üçün sizə Qt versiyası 5.0 və ya daha yüksək və OpenSSL lazımdır. Əgər bir şey işləmirsə, steganodisk.pro faylını redaktə etməli ola bilərsiniz.

Siz klaster ölçüsünü 4 KB-dan, məsələn, 512 bayta (secretfile.h-də) dəyişə bilərsiniz. Eyni zamanda, xidmət məlumatlarının qiyməti artacaq: başlıq və yoxlama məbləği sabit 68 bayt tutur.

Utiliti, əlbəttə ki, kök istifadəçi hüquqları ilə və ehtiyatla işlətməlisiniz. Göstərilən fayl və ya cihazın üzərinə yazmadan əvvəl heç bir sual verilməyəcək!

Zövq alın.

Mənbə: www.habr.com

Добавить комментарий