Файлдык системанын стеганографиясы

Эй Хабр.

Мен сиздерге чакан долбоорду тартуулагым келет стеганография, окуудан бош убактымда жасалган.

Мен файлдык системада маалыматты жашыруун сактоо боюнча долбоорду жасадым (мындан ары ФС).
Бул билим берүү максатында жашыруун маалыматты уурдоо үчүн колдонулушу мүмкүн.

Файлдык системанын стеганографиясы

Прототиби катары абдан эски Linux FS тандалган ext2.

Реализация

Ишке ашыруу маселелери

Эгерде ext2 стандартын "ачуу" жакшы болсо, анда FSде деп аталган нерсени алмаштыра аласыз. Суперблоктор, бул система жөнүндө негизги маалыматтарды берет. Мен табылгандан кийин Block Bitmap и Инод таблицасы. Дээрлик ошол замат, учурда бош FS блокторуна маалыматты жазуу идеясы пайда болгон. Эми куралдуу программисттен коргоо жөнүндө ойлонуу керек болчу hex редактору.

Эгерде сиз жашыруун маалыматты шифрлөөсүз сактасаңыз, анда анын FSде бүдөмүк болгонуна карабастан, ал өтө эле көрүнүктүү болуп калат, айрыкча программист эмнени издөө керектигин билсе. Ошондуктан, баштапкы файлдын бардык блокторун шифрлөө чечими кабыл алынды. Мен блоктук шифрди тандадым Өнүктүрүлгөн, бирок сиз түшүнгөндөй, бул маанилүү эмес.

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

Системанын жалпы иштөө принциби.

Файлдык системанын стеганографиясы

Жазуу алгоритми

пунктунда Пойнт:

  • Алгач булак файл тутумуна бир аз маалыматты жазыңыз;
  • Бул маалыматты жок кылуу (бардыгы сөзсүз эмес);
  • Жашырыла турган файл маркерди кошуп, бирдей узундуктагы блокторго бөлүнөт;
  • Бул блокторду шифрлөө;
  • Шифрленген блокторду бош FS блокторуна салыңыз.

Блок диаграмма сүйүүчүлөр үчүн

Төмөндө жазуу алгоритминин блок-схемасы келтирилген. Алгоритм төрт файлды киргизүү катары кабыл алат:
-өзгөртүлүүчү файлдык системанын сүрөтү;
- стеганографияга дуушар болгон файл;
-AES үчүн шифрлөө ачкычы бар файл;
- маркер менен файл.
Файлдык системанын стеганографиясы

Бул алгоритмдин бир кемчилиги бар экенин дароо белгилей кетүү керек: файлды FSге жазгандан кийин, нельзя FSге кандайдыр бир жаңы нерсени жазыңыз, анткени ар кандай жаңы маалымат биздин zip файлыбызга бөлүнгөн блокторго түшүп калышы мүмкүн, бирок бул "биздин изибизди тез жабуу" мүмкүнчүлүгүн ачат.

Бирок муну кантип оңдоого боло тургандыгы ачык эле көрүнүп турат: FSге блокторду жазуу алгоритмин кайра жазуу керек. Бул түшүнүктүү, бирок укмуштуудай убакытты талап кылган иш.
Proof Of Consept үчүн мен муну ишке ашырган жокмун.

Натыйжада, ФСге төмөнкүдөй өзгөртүүлөр киргизилет; стеганографияга чейин ФС ушундай көрүнөт (аудио файл мурда жазылган).
Файлдык системанын стеганографиясы
Ал эми FS мурунтан эле сыдырмаланган маалымат менен ушундай көрүнөт.
Файлдык системанын стеганографиясы

Окуу алгоритми

пунктунда Пойнт:

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

Блок диаграмма сүйүүчүлөр үчүн

Төмөндө жазуу алгоритминин блок-схемасы келтирилген. Алгоритм үч файлды киргизүү катары кабыл алат:
- Файлдык системанын сүрөтү;
-AES үчүн шифрлөө ачкычы бар файл;
- маркер менен файл.
Файлдык системанын стеганографиясы

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

Ишти автоматташтыруу

Ыңгайлуу болуу үчүн, Linux'та ишке киргизүүнү автоматташтыруу үчүн bash скрипттери жазылган (Ubuntu 16.04.3 LTSде сыналган).
Этап-этабы менен ишке киргизүүнү карап көрөлү.
Ыйык Китепте:

  1. sudo Copy_Flash.sh "DEVICE" - DEVICEден FS сүрөтүн алуу (флеш);
  2. ./Write.sh “FILE” “KEY” “MARKER” – виртуалдык чөйрөнү түзүү, керектүү китепканаларды жүктөө жана жазуу сценарийин иштетүү;
  3. sudo ./Write_Flash.sh “DEVICE” – өзгөртүлгөн FSди кайра DEVICE деп жазыңыз.

Окуу:

  1. sudo Copy_Flash.sh "DEVICE" - DEVICEден FS сүрөтүн алуу (флеш);
  2. ./Read.sh “KEY” ‘MARKER’ – виртуалдык чөйрө түзүңүз, керектүү китепканаларды жүктөп алыңыз жана окуу үчүн скипти иштетиңиз;
  3. Учурдагы каталогдо Read файлын ачыңыз - бул сыдырмаланган маалымат.

жыйынтыктоо

Бул стеганография ыкмасы, кыязы, өркүндөтүүгө, кошумча тестирлөөгө жана таанымал файл системаларына кеңейтүүгө муктаж, мисалы fat32, NTFS и ext4.
Бирок бул иштин максаты файлдык тутумда маалыматты жашыруун сактоону жүзөгө ашырууга мүмкүн болгон принципти көрсөтүү болгон.
Мындай алгоритмдердин жардамы менен сиз маалыматты коркпостон сактай аласыз, эгерде сиз ачкычты билсеңиз, мындай системаны орой күч менен эмес (бирок өтө узун алгоритм менен) бузуп алса болот, анда ачкычты билбей туруп, бул Менимче, система толугу менен туруктуу окшойт, бирок бул өзүнчө макала үчүн себеп болушу мүмкүн.

Бардык код Python 3.5.2 версиясында ишке ашырылат. Иштин мисалы менин youtube каналымда сунушталды. Долбоордун толук коду жайгаштырылган Github.
(Ооба, ооба, мен өндүрүш версиясы үчүн "тез" бир нерсе менен жазуу керек экенин билем, мисалы C 😉)
Бул ишке ашырууда стеганография үчүн киргизүү файлынын көлөмү 1000 кБ ашпоого тийиш.

Мен колдонуучуга ыраазычылык билдиргим келет PavelMSTU изилдөөнү пландаштырууда баалуу кеңештер жана макаланын дизайны боюнча сунуштар үчүн.

Source: www.habr.com

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