Привет, Хабр.
Хочу представить вам небольшой проект стеганография , сделанное в свободное от учёбы время.
Я сделал проект по скрытому хранению информации в файловой системе (далее ФС ).
Это можно применить украсть конфиденциальную информацию в образовательных целях.
В качестве прототипа была выбрана очень старая Linux FS. ext2 .
Выполнение
Рекомендации по реализации
Если хорошо "разгадать" стандарт ext2, то можно заменить, что в ФС есть так называемый Суперблоки , который предоставляет основную информацию о системе.После того, как меня нашли Блокировать растровое изображение И Таблица индексных дескрипторов .
Практически сразу родилась идея записи информации в пустые на данный момент блоки ФС.
Теперь стоило задуматься о защите от вооруженного программиста.
Если хранить скрытую информацию без шифрования, то, даже несмотря на ее размытость в ФС, она все равно будет слишком заметной, особенно если программист знает, что искать.
Поэтому было решено зашифровать все блоки исходного файла.
Я выбрал блочный шифр АЕС , но как вы понимаете, это не важно.
Чтобы при чтении отделить нужные блоки от всех остальных, было решено к каждому блоку в начале блока добавить специальный маркер.
Этот токен был зашифрован в зависимости от номера блока в исходном файле.
Этот трюк сразу позволил не только найти нужные блоки, но и распознать их правильный порядок.
Общий принцип работы системы.
Алгоритм записи
Точки:- Сначала запишите некоторую информацию в исходную файловую систему;
- Удалить эту информацию (не обязательно всю);
- Скрываемый файл разбивается на блоки одинаковой длины с добавлением маркера;
- Зашифруйте эти блоки;
- Поместите зашифрованные блоки в пустые блоки FS.
Алгоритм получает на вход четыре файла: -Образ модифицируемой файловой системы; -Файл подвергнут стеганографии; -Файл с ключом шифрования для AES; -Файл с маркером.
Стоит сразу отметить, что у этого алгоритма есть один недостаток: после записи файла в ФС, запрещено записывайте в ФС что-нибудь новое, так как любая новая информация может оказаться в блоках, которые мы выделили в наш заархивированный файл, хотя это тоже открывает возможность «быстро замести следы».
Но вполне очевидно, как это можно исправить: необходимо переписать алгоритм записи блоков в ФС.
Это понятная, но невероятно трудоемкая задача.
Для доказательства концепции я этого не реализовал.
Результатом будут следующие изменения в ФС, так выглядит ФС до стеганографии (аудиофайл был предварительно записан).
А вот так выглядит ФС с уже заархивированной информацией.
Алгоритм чтения
Точки:- Зная ключ и способ построения маркеров, составить первые N маркеров, с гарантией того, что N, умноженное на длину блока файловой системы, больше длины стеганографируемого файла;
- Поиск блоков в ФС начиная с маркеров;
- Расшифруйте полученные блоки и отделите маркеры;
- Соберите полученные блоки в правильном порядке и получите исходный файл.
Алгоритм получает на вход три файла: -Образ файловой системы; -Файл с ключом шифрования для AES; -Файл с маркером.
После запуска программы появится файл Read, который будет извлечен из стеганографированной файловой системы; если ключ или маркер был указан неверно, то файл Read будет пуст.
(для любителей красоты можно вставить не только файл, но и «шапку», содержащую метаинформацию: имя файла, права, время последнего изменения и т.д.)
Автоматизация запуска
Для удобства написаны bash-скрипты для автоматизации запуска в Linux (проверено на Ubuntu 16.04.3 LTS).Давайте рассмотрим запуск поэтапно.
Вход:
- sudo Copy_Flash.sh «DEVICE» — получить образ ФС от DEVICE (прошить);
- .
/Write.sh «ФАЙЛ» «КЛЮЧ» «МАРКЕР» — создать виртуальную среду, загрузить необходимые библиотеки и запустить скрипт записи;
- sudo .
/Write_Flash.sh «DEVICE» — снова записать измененную ФС в DEVICE.
- sudo Copy_Flash.sh «DEVICE» — получить образ ФС от DEVICE (прошить);
- .
/Read.sh «KEY» «MARKER» — создаем виртуальную среду, скачиваем необходимые библиотеки и запускаем скипт для чтения;
- В текущем каталоге откройте файл «Читать» — это заархивированная информация.
Заключение
Этот метод стеганографии, вероятно, нуждается в улучшении, дополнительном тестировании и расширении для более популярных файловых систем, таких как Fat32 , NTFS И ext4 .Но целью данной работы было показать принцип, по которому можно осуществлять скрытое хранение информации в файловой системе.
С помощью таких алгоритмов можно безбоязненно хранить информацию, и если, зная ключ, можно взломать такую систему не перебором (а очень длинным алгоритмом), то не зная ключа, это система мне кажется абсолютно стабильной, однако это может послужить поводом для отдельной статьи.
Весь код реализован на Python версии 3.5.2. Пример работы представлено на моем канале YouTube. Полный код проекта опубликован на github .
(Да-да, я знаю, что для продакшн-версии нужно писать на чем-то «быстром», например на C ;)) В этой реализации размер входного файла для стеганографии не должен превышать 1000 КБ.
Хочу выразить благодарность пользователю ПавелМГТУ за ценные советы при планировании исследования и рекомендации по оформлению статьи.
Теги: #стеганография #файловые системы #программирование #криптография #информационная безопасность #криптография #python #разработка под Linux
-
Обновленная История Стива Джобса
19 Oct, 24 -
Малыш Асус + Везде Какая-То Реклама Или Еее!
19 Oct, 24 -
Почти 32 Нм Intel
19 Oct, 24 -
Хаскелл
19 Oct, 24