Прывітанне, Хабр.
Жадаю прадставіць вам невялікі праект па
Я зрабіў праект па ўтоеным захоўванні інфармацыі ў файлавай сістэме (далей ФС).
Гэта можна прымяніць для крадзяжу канфідэнцыйнай інфармацыі ў адукацыйных мэтах.
У выглядзе дасведчанага ўзору была абраная вельмі старэнькая лінуксавая ФС
Рэалізацыя
Меркаванні аб рэалізацыі
Калі добра "драконіць" стандарт ext2, то можна замяніць, што ў ФС існуе так званы
Калі захоўваць якая хаваецца інфармацыю без шыфравання, то, нават нягледзячы на яе размытасць па ФС, яна будзе ўсё роўна занадта кідацца ў вочы, асабліва калі праграміст будзе ведаць, што варта шукаць. Таму было прынята рашэнне шыфраваць усе блокі зыходнага файла. Я абраў блокавы шыфр
Для аддзялення патрэбных блокаў ад усіх астатніх пры чытанні ў кожны блок было вырашана дадаць па спецыяльным маркеру ў пачатак блока. Гэты маркер шыфраваўся ў залежнасці ад нумара блока ў зыходным файле. Такі выкрут адразу дазволіў не толькі знаходзіць патрэбныя блокі, але і даведвацца пра іх правільны парадак.
Агульны прынцып працы сістэмы.
Алгарытм запісу
Па пунктах:
- Спачатку запісаць у зыходную файлавую сістэму якую-небудзь інфармацыю;
- Выдаліць гэтую інфармацыю (не абавязкова ўсю);
- Файл для ўтойвання разбіць на блокі аднолькавай даўжыні, дадаўшы маркер;
- Зашыфраваць гэтыя блокі;
- Змясціць зашыфраваныя блокі ў пустыя блокі ФС.
Для аматараў блок-схем
Ніжэй прадстаўлена блок-схема алгарытму запісу. На ўваход алгарытм атрымлівае чатыры файлы:
-Вобраз змянянай файлавай сістэмы;
-Файл, які падлягае стэганаграфіі;
-Файл з ключом шыфравання для AES;
-Файл з маркерам.
Адразу варта адзначыць, што ў дадзенага алгарытму ёсць адзін недахоп: пасля запісу файла ў ФС, нельга запісваць у ФС штосьці новае, бо любая новая інфармацыя можа патрапіць у тыя блокі, якія мы адвялі нашаму застеганографированному файлу, праўда гэта ж адчыняе магчымасць "хуткага замятання слядоў".
Але дастаткова відавочна як гэта можна выправіць: неабходна перазапісаць алгарытм запісу блокаў у ФС. Гэта зразумелая, але неверагодна працаёмкая задача.
Для Proof Of Consept я гэта не рэалізоўваў.
У выніку атрымаюцца наступныя змены ў ФС, так выглядае ФС да стэганаграфіі (папярэдне быў запісаны аўдыёфайл).
А так выглядае ФС з ужо застеганографированной інфармацыяй.
Алгарытм чытання
Па пунктах:
- З веданнем ключа і спосабу пабудовы маркераў скласці першыя N маркераў, з гарантыяй што N, памножанае на даўжыню блока файлавай сістэмы больш даўжыні застеганографированного файла;
- Вырабіць пошук блокаў у ФС, якія пачынаюцца з маркераў;
- Расшыфраваць атрыманыя блокі і аддзяліць маркеры;
- Сабраць атрыманыя блокі ў правільным парадку і атрымаць зыходны файл.
Для аматараў блок-схем
Ніжэй прадстаўлена блок-схема алгарытму запісу. На ўваход алгарытм атрымлівае тры файлы:
-Вобраз файлавай сістэмы;
-Файл з ключом шыфравання для AES;
-Файл з маркерам.
Пасля працы праграмы з'яўляецца файл Read, які і будзе вынятым са стеганографированной ФС файлам, калі ключ ці маркер былі паказаны няслушна, то файл Read будзе пусты.
(для аматараў прыгажосцяў можна ўкрапваць не толькі файл, але «шапку», якая змяшчае метаінфармацыю: імя файла, правы, час апошняй змены і г.д.)
Аўтаматызацыя запуску
Для зручнасці былі напісаны bash скрыпты, якія аўтаматызуюць запуск на Linux (тэставалася на Ubuntu 16.04.3 LTS).
Разбяром запуск па кроках.
запіс:
- sudo Copy_Flash.sh "DEVICE" - атрымліваем вобраз ФС з DEVICE (флэш);
- ./Write.sh “FILE” “KEY” “MARKER” – ствараем віртуальнае асяроддзе, спампоўваем неабходныя бібліятэкі і запускаем скіпт на запіс;
- sudo ./Write_Flash.sh "DEVICE" - запісваем змененую ФС зноў на DEVICE.
чытанне:
- sudo Copy_Flash.sh "DEVICE" - атрымліваем вобраз ФС з DEVICE (флэш);
- ./Read.sh “KEY” 'MARKER” — ствараем віртуальнае асяроддзе, спампоўваем неабходныя бібліятэкі і запускаем скіпт на чытанне;
- У бягучым каталогу адчыняны файл Read - гэта і ёсць застеганографированная інфармацыя.
Заключэнне
Дадзены метад стэганаграфіі, верагодна, мае патрэбу ў дапрацоўцы, дадатковым тэсціраванні і пашырэнні на больш папулярныя файлавыя сістэмы, такія як
Але мэтай дадзенай працы было паказаць прынцып, з дапамогай якога можна ажыццявіць утоенае захоўванне інфармацыі ў файлавай сістэме.
З дапамогай падобных алгарытмаў можна бязбоязна захоўваць інфармацыю, і калі пры веданні ключа такую сістэму ўзламаць магчыма не поўным пераборам (але вельмі доўгім алгарытмам), то без ведання ключа дадзеная сістэма мне ўяўляецца абсалютна ўстойлівай, зрэшты гэта можа паслужыць падставай для асобнага артыкула.
Увесь код рэалізаваны на мове Python версіі 3.5.2.
(Так-так, я ведаю, што для production версіі трэба пісаць на чым-небудзь "хуткім", напрыклад на Сі 😉 )
У дадзенай рэалізацыі памер уваходнага файла для стэганаграфіі не павінен перавышаць 1000 кБ.
Жадаю выказаць падзяку карыстачу
Крыніца: habr.com