Өткен файлдарды стеганография: деректерді тікелей секторларда жасыру

Қысқаша алғы сөз

Стеганография, егер біреу есінде болмаса, ақпаратты кейбір контейнерлерде жасырады. Мысалы, суреттерде (талқыланады осында и осында). Сондай-ақ, деректерді файлдық жүйенің қызмет көрсету кестелерінде жасыруға болады (бұл туралы жазылған осында), және тіпті TCP протоколының қызмет пакеттерінде. Өкінішке орай, бұл әдістердің барлығында бір кемшілік бар: ақпаратты контейнерге көрінбейтін «енгізу» үшін сізге контейнердің ішкі құрылымының ерекшеліктерін ескеретін айлакер алгоритмдер қажет. Контейнердің манипуляцияға төзімділігімен проблемалар туындайды: мысалы, суретті сәл өңдесеңіз, жасырын ақпарат жоғалады.

Қандай да бір жолмен айлакер алгоритмдерсіз және деректермен нәзік манипуляцияларсыз жасай аласыз және бәрібір контейнердің функционалдығын және жасырын деректер қауіпсіздігінің қолайлы деңгейін қамтамасыз ете аласыз ба? Алға қарап, мен айтамын - иә, сіз аласыз! Мен тіпті қызметтік бағдарламаны ұсынамын.

Әдістің қанды бөлшектері

Негізгі идея маңдайға соққы сияқты қарапайым: дискіде операциялық жүйе ешқашан жазбайтын (немесе сирек жағдайларда жазатын) аймақтар бар. Бұл аймақтарды айлакер алгоритмдер арқылы іздеу қажеттілігін болдырмау үшін біз артықшылықты қолданамыз, яғни біз жасырын ақпаратты дискінің барлық секторларында бірнеше рет қайталаймыз. Содан кейін, осы кереметтің үстіне, сіз қажетті бөлімдерді жасай аласыз, файлдық жүйелерді пішімдей аласыз, файлдарды жаза аласыз және ОЖ орнатуға болады - бәрібір, құпия деректердің бір бөлігі сақталады және оны алуға болады және қайталанатын көшіру бізге көмектеседі. түпнұсқаны бөліктерден біріктіріңіз.

Бұл әдістің артықшылығы айқын: біз файл пішіміне, тіпті қолданылатын файлдық жүйенің түріне де тәуелді емеспіз.

Кемшіліктері де, менің ойымша, анық:

  • Құпия деректерді тек бүкіл дискіні толығымен қайта жазу, содан кейін пайдаланушыға көрінетін мазмұнды қайта жасау арқылы өзгертуге болады. Дегенмен, дискіні кескіннен қайта жасайтын бағдарламалық құралды пайдалана алмайсыз: ол алдыңғы құпия деректерді де қайта жасайды.
  • Құпия деректердің көлемі неғұрлым үлкен болса, кейбір ақпаратты жоғалту ықтималдығы соғұрлым жоғары болады.
  • Дискіден деректерді алу көп уақыт алуы мүмкін. Бірнеше минуттан бірнеше күнге дейін (қазіргі дискілер үлкен).

Енді нақты мәліметтерге көшейік.

Егер сіз барлық дискіге құпия деректерді жай ғана жағып алсаңыз, ол тек көзге көрінбейтіндігі анық. Егер сіз өз көзқарасыңызды, айталық, дискілік редактормен жабдықтасаңыз, деректер барлық сән-салтанатында пайда болады. Сондықтан, деректер көрсетілмейтіндей етіп шифрлау жақсы идея болар еді. Біз қарапайым, бірақ талғаммен шифрлаймыз: aes256-cbc алгоритмін пайдалану. Біз пайдаланушыдан шифрлау кілтін сұраймыз және оған жақсы құпия сөз ойлап табуға мүмкіндік береміз.

Келесі сұрақ - «жақсы» деректерді нашар деректерден қалай ажыратуға болатындығы. Мұнда бақылау сомасы бізге көмектеседі, бірақ қарапайым емес, SHA1. Не болды? Бұл git үшін жеткілікті, сондықтан ол бізге де сәйкес келеді. Шешім: біз әрбір сақталған ақпарат бөлігін бақылау сомасымен қамтамасыз етеміз және егер шифрды шешкеннен кейін ол сәйкес келсе, бұл шифрды шешу сәтті болғанын білдіреді.

Сондай-ақ сізге фрагмент нөмірі мен құпия деректердің жалпы ұзындығы қажет болады. Фрагмент нөмірі - біз қай бөліктерді шифрлап алғанымызды және қайсысы қалғанын бақылау үшін. Жалпы ұзындық бізге қажет емес деректерді (яғни толтыру) жазбау үшін соңғы фрагментті өңдеу кезінде пайдалы болады. Бізде әлі тақырып болғандықтан, құпия файлдың атын сол жерге қосамыз. Шифрды шешкеннен кейін оны қалай ашу керектігін білмеу үшін пайдалы болады.

Әдісті тәжірибеде сынау

Тексеру үшін ең көп таралған ортаны - флэш-дискіні алайық. Мен 1 ГБ сыйымдылығы бар ескісін таптым, ол эксперименттерге өте қолайлы. Егер сіз, мен сияқты, физикалық медиамен алаңдамай, оны файлда - дискілік кескінде сынау идеясын ойлап тапсаңыз, мен бірден айтамын: бұл жұмыс істемейді. Мұндай «дискіні» пішімдеу кезінде Linux файлды қайтадан жасайды және барлық пайдаланылмаған секторлар нөлдермен толтырылады.

Linux жүйесі бар машина ретінде, өкінішке орай, балконда жатқан Raspberry Pi 3 метеостанциясын қолдануға тура келді. Онда жад көп емес, сондықтан біз үлкен файлдарды жасырмаймыз. Біз өзімізді максималды 10 мегабайт өлшемімен шектейміз. Сондай-ақ тым кішкентай файлдарды жасырудың қажеті жоқ: утилита деректерді дискіге 4 КБ кластерлерде жазады. Сондықтан төменде біз 3 кб файлмен шектелеміз - ол осындай кластерге сәйкес келеді.

Біз флэш-дискіні кезең-кезеңімен мазақ етеміз, әр кезеңнен кейін жасырын ақпараттың оқуға болатынын тексереміз:

  1. 16 КБ кластер өлшемімен FAT16 пішімінде жылдам пішімдеу. Windows 7 файлдық жүйесі жоқ флэш-дискімен айналысуды ұсынады.
  2. Флэш-дискіні барлық қоқыспен 50% толтыру.
  3. Флэш-дискіні барлық қоқыспен 100% толтыру.
  4. FAT16 пішіміндегі «ұзын» пішімдеу (барлығын қайта жазу).

Алғашқы екі сынақ, күткендей, толық жеңіспен аяқталды: утилита флэш-дискіден 10 мегабайт құпия деректерді сәтті шығара алды. Бірақ флэш-диск файлдармен толтырылғаннан кейін ақаулық орын алды:

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

Көріп отырғаныңыздай, тек 158 кластер сәтті шифрдан шығарылды (632 килобайт бастапқы деректер, бұл 636424 10 байт пайдалы жүктемені береді). Бұл жерде 1 мегабайт алуға мүмкіндік жоқ екені анық, бірақ бұл кластерлердің арасында қайталанатындар анық. Сіз тіпті 3 мегабайтты осылай қалпына келтіре алмайсыз. Бірақ біз флэш-дискіні пішімдеп, сыйымдылыққа жазғаннан кейін де 120 килобайт құпия деректерді қалпына келтіретінімізге кепілдік бере аламыз. Дегенмен, эксперименттер мұндай флэш-дискіден ұзындығы XNUMX килобайт файлды шығаруға әбден болатынын көрсетеді.

Соңғы сынақ, өкінішке орай, бүкіл флэш-дискінің қайта жазылғанын көрсетті:

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

Бірде-бір шоғыр аман қалған жоқ... Қайғылы, бірақ қайғылы емес! Пішімдеу алдында флэш-дискіде бөлімді және оның ішінде файлдық жүйені жасауға тырысайық. Айтпақшы, ол зауыттан дәл осындай пішімдеумен келді, сондықтан біз күдікті ештеңе істеп жатқан жоқпыз.
Флэш-дисктегі бос орын аздап азайды деп күтілуде.

Сондай-ақ 10 мегабайтты толығымен толық дискіде жасыру мүмкін емес деп күтілуде. Бірақ қазір шифры сәтті шешілген кластерлердің саны екі еседен астам өсті!

Total clusters read: 250752, decrypted: 405

Өкінішке орай, бір мегабайтты бөліктерден жинау мүмкін емес, бірақ екі жүз килобайт оңай.

Ал, соңғы, 4-ші тексеру туралы жаңалық, бұл жолы қуанышты: мұндай флэш-дискіні толығымен пішімдеу барлық ақпараттың жойылуына әкелмеді! 120 килобайт құпия деректер пайдаланылмаған кеңістікке өте жақсы сәйкес келеді.

Сынақ жиынтық кестесі:

Өткен файлдарды стеганография: деректерді тікелей секторларда жасыру

Кішкене теориялық: бос кеңістік және пайдаланылмаған секторлар туралы

Егер сіз қатты дискіні бөлімдерге бөлген болсаңыз, дискідегі барлық бос орынды бөлу әрдайым мүмкін емес екенін байқаған боларсыз. Бірінші бөлім әрқашан кейбір шегіністерден басталады (әдетте 1 мегабайт немесе 2048 сектор). Соңғы бөлімнің артында пайдаланылмаған секторлардың шағын «құйрығы» қалады. Ал кейде сирек болса да бөлімдер арасында алшақтықтар болады.

Басқаша айтқанда, дискіде дискімен қалыпты жұмыс кезінде қол жеткізуге болмайтын секторлар бар, бірақ бұл секторларға деректерді жазуға болады! Бұл да оқуды білдіреді. Дискінің басындағы бос аймақта орналасқан бөлімдер кестесі мен жүктеуші коды бар екеніне байланысты түзетілді.

Бөлімдерден біраз үзіліс жасап, дискіге, былайша айтқанда, құстың көзімен қарайық. Мұнда дискіде бос бөлім бар. Онда файлдық жүйені құрайық. Дискідегі кейбір секторлар өшірілмей қалады деп айта аламыз ба?

E-e-e - барабан орамы! Жауап әрқашан дерлік иә болады! Шынында да, көп жағдайда файлдық жүйені құру дискіге сервистік ақпараттың бірнеше блоктарын ғана жазумен аяқталады, әйтпесе бөлімнің мазмұны өзгермейді.

Сондай-ақ - таза эмпирикалық - біз файлдық жүйе соңғы секторға дейін оған бөлінген барлық кеңістікті әрқашан ала алмайды деп болжауға болады. Мысалы, кластер өлшемі 16 килобайт болатын FAT64 файлдық жүйесі өлшемі 64 килобайттан көп емес бөлімді толығымен ала алмайды. Мұндай бөлімнің соңында пайдаланушы деректерін сақтау үшін қол жетімсіз бірнеше секторлардың «құйрығы» болуы керек. Алайда бұл болжамды тәжірибе жүзінде растау мүмкін болмады.

Сонымен, стеганограмма үшін қолжетімді орынды барынша арттыру үшін кластер өлшемі үлкенірек файлдық жүйені пайдалану керек. Сондай-ақ, бұл қажет болмаса да (мысалы, флэш-дискте) бөлім жасай аласыз. Бос бөлімдерді құрудың немесе бөлінбеген аумақтарды қалдырудың қажеті жоқ - бұл мүдделі азаматтардың назарын аударады.

Эксперименттерге арналған утилита

Утилитаның бастапқы кодын түртуге болады осында

Құру үшін сізге Qt 5.0 немесе одан жоғары нұсқасы және OpenSSL қажет. Егер бірдеңе жұмыс істемесе, steganodisk.pro файлын өңдеу қажет болуы мүмкін.

Кластердің өлшемін 4 Кбайттан, айталық, 512 байтқа дейін өзгертуге болады (secretfile.h ішінде). Бұл ретте қызмет ақпаратының құны артады: тақырып пен бақылау сомасы тіркелген 68 байтты алады.

Сіз утилитаны, әрине, түбірлік пайдаланушы құқықтарымен және сақтықпен іске қосуыңыз керек. Көрсетілген файлды немесе құрылғыны қайта жазу алдында сұрақтар қойылмайды!

Ләззат алыңыз.

Ақпарат көзі: www.habr.com

пікір қалдыру