Файлдар боюнча стеганография: маалыматтарды түз секторлордо жашыруу

Кыскача кириш сөз

Стеганография, кимдир бирөө эсинде жок болсо, кээ бир контейнерлерде маалыматты жашырып жатат. Мисалы, сүрөттөрдө (талкууланган бул жерде и бул жерде). Сиз ошондой эле маалыматты файлдык тутумдун тейлөө таблицаларында жашыра аласыз (бул жөнүндө жазылган бул жерде), жана ал тургай 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 килобайт жашыруун маалыматтар пайдаланылбаган мейкиндикке эң сонун туура келет.

Сынактын жыйынтык таблицасы:

Файлдар боюнча стеганография: маалыматтарды түз секторлордо жашыруу

Бир аз теориялаштыруу: бош мейкиндик жана пайдаланылбаган секторлор жөнүндө

Эгер сиз качандыр бир убакта катуу дискиңизди бөлүктөргө бөлгөн болсоңуз, анда дисктеги бардык бош орундарды бөлүштүрүү дайыма эле мүмкүн эмес экенин байкагандырсыз. Биринчи бөлүм ар дайым бир аз чегинүү менен башталат (көбүнчө 1 мегабайт же 2048 сектор). Акыркы бөлүмдүн артында пайдаланылбаган секторлордун кичинекей “куйругу” калган учурлар да болот. Ал эми кээде сейрек болсо да, бөлүмдөрдүн ортосунда боштуктар бар.

Башкача айтканда, дискте кадимки диск менен иштөө учурунда кирүүгө мүмкүн болбогон секторлор бар, бирок бул секторлорго маалыматтарды жазууга болот! Бул да аны окуу дегенди билдирет. Дисктин башындагы бош жерде жайгашкан бөлүү таблицасы жана жүктөгүч коду да бар экендигине ылайыкташтырылган.

Бөлүмдөрдөн бир аз тыныгуу алып, дискке, мындайча айтканда, куштун көз карашынан карайлы. Бул жерде дискте бош бөлүм бар. Анда файл системасын түзөлү. Дисктеги кээ бир секторлор өчүрүлбөй калды деп айта алабызбы?

E-e-e - барабан ролл! Жооп дээрлик дайыма ооба болот! Чынында эле, көпчүлүк учурларда, файлдык системаны түзүү дискке бир нече гана кызматтык маалыматты жазууга туура келет, антпесе бөлүмдүн мазмуну өзгөрбөйт.

Жана ошондой эле - таза эмпирикалык - биз файл системасы акыркы секторуна чейин ага бөлүнгөн бардык мейкиндикти ар дайым ээлей албайт деп болжолдоого болот. Мисалы, кластердин өлчөмү 16 килобайт болгон FAT64 файл системасы, албетте, 64 килобайттан көп эмес, бир бөлүгүн толугу менен ээлей албайт. Мындай бөлүмдүн аягында колдонуучунун маалыматтарын сактоо үчүн жеткиликсиз бир нече секторлордун "куйругу" болушу керек. Бирок, бул божомол эксперименталдык жактан тастыкталган эмес.

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

Эксперимент үчүн пайдалуу

Сиз утилитанын баштапкы кодун тийгизе аласыз бул жерде

Куруу үчүн сизге Qt версиясы 5.0 же андан жогору жана OpenSSL керек болот. Эгер бир нерсе иштебесе, steganodisk.pro файлын түзөтүшүңүз керек болушу мүмкүн.

Сиз кластердин өлчөмүн 4 КБдан, айталы, 512 байтка чейин өзгөртө аласыз (secretfile.h ичинде). Ошол эле учурда кызматтык маалыматтын баасы жогорулайт: баш жана текшерүү суммасы белгиленген 68 байтты ээлейт.

Сиз утилитаны, албетте, колдонуучунун түпкү укуктары менен жана этияттык менен иштетишиңиз керек. Көрсөтүлгөн файлды же түзмөктү кайра жазуудан мурун эч кандай суроолор берилбейт!

ырахат алыңыз.

Source: www.habr.com

Комментарий кошуу