Стеганография във файловата система

Хей Хабр.

Искам да ви представя един малък проект на стеганографиянаправени в свободното ми време.

Направих проект за скрито съхранение на информация във файловата система (по-нататък FS).
Това може да се използва за кражба на поверителна информация за образователни цели.

Стеганография във файловата система

За прототип беше избрана много стара Linux FS ext2.

Изпълнение

Съображения за внедряване

Ако е добре да "дразним" стандарта ext2, тогава можем да заменим, че във FS има т.нар. Суперблокове, който предоставя основна информация за системата. След като ме намериха блок растерно изображение и Inode Таблица. Почти веднага се роди идеята за запис на информация в празни в момента FS блокове. Сега си струваше да помислим за защита от въоръжен програмист шестнадесетичен редактор.

Ако съхранявате скрита информация без криптиране, тогава, въпреки че е размазана във FS, тя все още ще бъде твърде забележима, особено ако програмистът знае какво да търси. Затова беше решено да се криптират всички блокове на изходния файл. Избрах блоков шифър AES, но както виждате, това няма значение.

За да се отделят необходимите блокове от всички останали при четене, беше решено да се добави специален маркер към всеки блок в началото на блока. Този маркер беше шифрован в зависимост от номера на блока в изходния файл. Такъв трик веднага позволи не само да се намерят правилните блокове, но и да се установи правилният им ред.

Общият принцип на системата.

Стеганография във файловата система

Напишете алгоритъм

Точките:

  • Първо, запишете малко информация в оригиналната файлова система;
  • Изтрийте тази информация (не непременно цялата);
  • Разделете файла за скриване на блокове с еднаква дължина, като добавите маркер;
  • Криптирайте тези блокове;
  • Поставете криптирани блокове в празни FS блокове.

За любителите на блок-схемите

По-долу е дадена блокова диаграма на алгоритъма за запис. Алгоритъмът получава четири файла като вход:
-Изображение на сменяемата файлова система;
-Файл подложен на стеганография;
-Файл с ключ за криптиране за AES;
- Файл с маркер.
Стеганография във файловата система

Веднага трябва да се отбележи, че този алгоритъм има един недостатък: след запис на файла във FS, не трябва напишете нещо ново във FS, тъй като всяка нова информация може да попадне в блоковете, които сме присвоили на нашия компресиран файл, въпреки че това също отваря възможността за „бързо прикриване на следи“.

Но е съвсем очевидно как това може да се поправи: необходимо е да се пренапише алгоритъмът за запис на блокове към FS. Това е разбираема, но невероятно времеемка задача.
За доказателство за концепция не внедрих това.

Резултатът ще бъде следните промени в FS, така изглежда FS преди стеганографията (преди това е записан аудио файл).
Стеганография във файловата система
Ето как изглежда FS с вече архивирана информация.
Стеганография във файловата система

Алгоритъм за четене

Точките:

  • Със знанието за ключа и метода за конструиране на маркери, съставете първите N маркери, като гарантирате, че N, умножено по дължината на блока на файловата система, е по-голямо от дължината на компресирания файл;
  • Търсене на блокове във FS, започващи с маркери;
  • Декриптиране на получените блокове и отделни маркери;
  • Сглобете получените блокове в правилния ред и вземете изходния файл.

За любителите на блок-схемите

По-долу е дадена блокова диаграма на алгоритъма за запис. Алгоритъмът получава три файла като вход:
- Файлова система за изображения;
-Файл с ключ за криптиране за AES;
- Файл с маркер.
Стеганография във файловата система

След като програмата стартира, се появява файлът за четене, който ще бъде файлът, извлечен от стеганографирания FS, ако ключът или маркерът са зададени неправилно, тогава файлът за четене ще бъде празен.
(за любителите на красотата можете да вмъкнете не само файла, но и „заглавката“, съдържаща метаинформация: име на файл, права, време на последна промяна и т.н.)

Автоматизация на стартирането

За удобство са написани bash скриптове, които автоматизират стартирането на Linux (тествано на Ubuntu 16.04.3 LTS).
Нека да разгледаме старта стъпка по стъпка.
запишете:

  1. sudo Copy_Flash.sh "DEVICE" - вземете изображението на FS от DEVICE (флаш);
  2. ./Write.sh "FILE" "KEY" "MARKER" - създаване на виртуална среда, изтегляне на необходимите библиотеки и стартиране на скрипта за запис;
  3. sudo ./Write_Flash.sh "УСТРОЙСТВО" - запишете модифицираната FS обратно на УСТРОЙСТВО.

Четене:

  1. sudo Copy_Flash.sh "DEVICE" - вземете изображението на FS от DEVICE (флаш);
  2. ./Read.sh “KEY” 'MARKER” - създаване на виртуална среда, изтегляне на необходимите библиотеки и стартиране на скрипта за четене;
  3. В текущата директория отворете файла Read - това е компресираната информация.

Заключение

Този метод на стеганография вероятно трябва да бъде подобрен, допълнително тестван и разширен до по-популярни файлови системи като Fat32, NTFS и ext4.
Но целта на тази работа беше да покаже принципа, по който е възможно да се извърши скрито съхранение на информация във файловата система.
С помощта на такива алгоритми можете безстрашно да съхранявате информация и ако със знанието на ключа такава система може да бъде хакната не чрез изчерпателно търсене (а чрез много дълъг алгоритъм), тогава без да знаете ключа, тази система изглежда ми абсолютно стабилен, но това може да послужи като причина за отделна статия.

Целият код е внедрен в Python версия 3.5.2. Работен пример включени в моя канал в YouTube. Пълният код на проекта е достъпен на GitHub.
(Да, да, знам, че за производствената версия трябва да пишете на нещо "бързо", например на C 😉 )
При тази реализация размерът на входния файл за стеганография не трябва да надвишава 1000 kB.

Искам да благодаря на потребителя ПавелMSTU за ценни съвети при планиране на изследването и препоръки за дизайна на статията.

Източник: www.habr.com

Добавяне на нов коментар