Стеганаграфія ў файлавай сістэме

Прывітанне, Хабр.

Жадаю прадставіць вам невялікі праект па стэганаграфіі, зроблены ў вольны ад вучобы час.

Я зрабіў праект па ўтоеным захоўванні інфармацыі ў файлавай сістэме (далей ФС).
Гэта можна прымяніць для крадзяжу канфідэнцыйнай інфармацыі ў адукацыйных мэтах.

Стеганаграфія ў файлавай сістэме

У выглядзе дасведчанага ўзору была абраная вельмі старэнькая лінуксавая ФС ext2.

Рэалізацыя

Меркаванні аб рэалізацыі

Калі добра "драконіць" стандарт ext2, то можна замяніць, што ў ФС існуе так званы Superblocks, у якім дадзена асноўная інфармацыя аб сістэме. Пасля мной былі знойдзены Block Bitmap и Inode Table. Амаль адразу нарадзілася ідэя запісу інфармацыі ў пустыя на дадзены момант блокі ФС. Цяпер варта было прадумаць абарону ад праграміста, узброенага hex-рэдактарам.

Калі захоўваць якая хаваецца інфармацыю без шыфравання, то, нават нягледзячы на ​​яе размытасць па ФС, яна будзе ўсё роўна занадта кідацца ў вочы, асабліва калі праграміст будзе ведаць, што варта шукаць. Таму было прынята рашэнне шыфраваць усе блокі зыходнага файла. Я абраў блокавы шыфр AES, Але як вы разумееце, гэта не прынцыпова.

Для аддзялення патрэбных блокаў ад усіх астатніх пры чытанні ў кожны блок было вырашана дадаць па спецыяльным маркеру ў пачатак блока. Гэты маркер шыфраваўся ў залежнасці ад нумара блока ў зыходным файле. Такі выкрут адразу дазволіў не толькі знаходзіць патрэбныя блокі, але і даведвацца пра іх правільны парадак.

Агульны прынцып працы сістэмы.

Стеганаграфія ў файлавай сістэме

Алгарытм запісу

Па пунктах:

  • Спачатку запісаць у зыходную файлавую сістэму якую-небудзь інфармацыю;
  • Выдаліць гэтую інфармацыю (не абавязкова ўсю);
  • Файл для ўтойвання разбіць на блокі аднолькавай даўжыні, дадаўшы маркер;
  • Зашыфраваць гэтыя блокі;
  • Змясціць зашыфраваныя блокі ў пустыя блокі ФС.

Для аматараў блок-схем

Ніжэй прадстаўлена блок-схема алгарытму запісу. На ўваход алгарытм атрымлівае чатыры файлы:
-Вобраз змянянай файлавай сістэмы;
-Файл, які падлягае стэганаграфіі;
-Файл з ключом шыфравання для AES;
-Файл з маркерам.
Стеганаграфія ў файлавай сістэме

Адразу варта адзначыць, што ў дадзенага алгарытму ёсць адзін недахоп: пасля запісу файла ў ФС, нельга запісваць у ФС штосьці новае, бо любая новая інфармацыя можа патрапіць у тыя блокі, якія мы адвялі нашаму застеганографированному файлу, праўда гэта ж адчыняе магчымасць "хуткага замятання слядоў".

Але дастаткова відавочна як гэта можна выправіць: неабходна перазапісаць алгарытм запісу блокаў у ФС. Гэта зразумелая, але неверагодна працаёмкая задача.
Для Proof Of Consept я гэта не рэалізоўваў.

У выніку атрымаюцца наступныя змены ў ФС, так выглядае ФС да стэганаграфіі (папярэдне быў запісаны аўдыёфайл).
Стеганаграфія ў файлавай сістэме
А так выглядае ФС з ужо застеганографированной інфармацыяй.
Стеганаграфія ў файлавай сістэме

Алгарытм чытання

Па пунктах:

  • З веданнем ключа і спосабу пабудовы маркераў скласці першыя N маркераў, з гарантыяй што N, памножанае на даўжыню блока файлавай сістэмы больш даўжыні застеганографированного файла;
  • Вырабіць пошук блокаў у ФС, якія пачынаюцца з маркераў;
  • Расшыфраваць атрыманыя блокі і аддзяліць маркеры;
  • Сабраць атрыманыя блокі ў правільным парадку і атрымаць зыходны файл.

Для аматараў блок-схем

Ніжэй прадстаўлена блок-схема алгарытму запісу. На ўваход алгарытм атрымлівае тры файлы:
-Вобраз файлавай сістэмы;
-Файл з ключом шыфравання для AES;
-Файл з маркерам.
Стеганаграфія ў файлавай сістэме

Пасля працы праграмы з'яўляецца файл Read, які і будзе вынятым са стеганографированной ФС файлам, калі ключ ці маркер былі паказаны няслушна, то файл Read будзе пусты.
(для аматараў прыгажосцяў можна ўкрапваць не толькі файл, але «шапку», якая змяшчае метаінфармацыю: імя файла, правы, час апошняй змены і г.д.)

Аўтаматызацыя запуску

Для зручнасці былі напісаны bash скрыпты, якія аўтаматызуюць запуск на Linux (тэставалася на Ubuntu 16.04.3 LTS).
Разбяром запуск па кроках.
запіс:

  1. sudo Copy_Flash.sh "DEVICE" - атрымліваем вобраз ФС з DEVICE (флэш);
  2. ./Write.sh “FILE” “KEY” “MARKER” – ствараем віртуальнае асяроддзе, спампоўваем неабходныя бібліятэкі і запускаем скіпт на запіс;
  3. sudo ./Write_Flash.sh "DEVICE" - запісваем змененую ФС зноў на DEVICE.

чытанне:

  1. sudo Copy_Flash.sh "DEVICE" - атрымліваем вобраз ФС з DEVICE (флэш);
  2. ./Read.sh “KEY” 'MARKER” — ствараем віртуальнае асяроддзе, спампоўваем неабходныя бібліятэкі і запускаем скіпт на чытанне;
  3. У бягучым каталогу адчыняны файл Read - гэта і ёсць застеганографированная інфармацыя.

Заключэнне

Дадзены метад стэганаграфіі, верагодна, мае патрэбу ў дапрацоўцы, дадатковым тэсціраванні і пашырэнні на больш папулярныя файлавыя сістэмы, такія як Fat32, NTFS и ext4.
Але мэтай дадзенай працы было паказаць прынцып, з дапамогай якога можна ажыццявіць утоенае захоўванне інфармацыі ў файлавай сістэме.
З дапамогай падобных алгарытмаў можна бязбоязна захоўваць інфармацыю, і калі пры веданні ключа такую ​​сістэму ўзламаць магчыма не поўным пераборам (але вельмі доўгім алгарытмам), то без ведання ключа дадзеная сістэма мне ўяўляецца абсалютна ўстойлівай, зрэшты гэта можа паслужыць падставай для асобнага артыкула.

Увесь код рэалізаваны на мове Python версіі 3.5.2. Прыклад працы прадстаўлены на маім youtube канале. Поўны код праекта выкладзены на GitHub.
(Так-так, я ведаю, што для production версіі трэба пісаць на чым-небудзь "хуткім", напрыклад на Сі 😉 )
У дадзенай рэалізацыі памер уваходнага файла для стэганаграфіі не павінен перавышаць 1000 кБ.

Жадаю выказаць падзяку карыстачу PavelMSTU за каштоўныя парады пры планаванні даследавання і рэкамендацыі па афармленні артыкула.

Крыніца: habr.com

Дадаць каментар