Контейнерная стеганография: Прячем гигабайты в DOCX, PDF и еще десятке форматов

от автора

Привет, Хабр!

С момента публикации наших прошлых статей о создании программы для стеганографии ChameleonLab прошло немало времени. Мы получили огромное количество фидбэка и поняли, что тема сокрытия данных интересна сообществу не только в контексте классических картинок (LSB), но и в более сложных, повседневных файлах — документах.

Стандартные стеганографические программы, такие как Steghide, OpenStego или Stegsolve, отлично справляются с изображениями или аудио, но практически пасуют перед современными офисными документами. Попытка применить к .docx или .pdf LSB-алгоритм — это выстрел в пустоту. Данные будут уничтожены при первом же пересохранении.

Поэтому мы задались целью: научиться прятать большие объемы данных в самых популярных документах так, чтобы файл оставался полностью рабочим. И сегодня мы представляем ChameleonLab 1.4.1.0 — релиз, который превращает нашу программу в настоящий швейцарский нож для контейнерной стеганографии.

Программа "ChameleonLab". Версия 1.4.1.0

Программа «ChameleonLab». Версия 1.4.1.0

Анатомия современных документов: почему это работает?

Большинство современных форматов документов (.docx, .odt, .epub, .pages) — это, по сути, обычные ZIP-архивы. Если взять любой такой файл и поменять ему расширение на .zip, вы сможете заглянуть внутрь и увидите структуру из папок и XML-файлов.

Ключевой элемент в них — это файл-манифест, который строго перечисляет все «официальные» части документа. Любой файл, который физически лежит в архиве, но не упомянут в манифесте, будет программой-редактором (MS Word, LibreOffice и т.д.) попросту проигнорирован.

Это и есть наша лазейка. Мы назвали этот метод «Файл-призрак».

Вот как просто это выглядит на Python. Нам даже не нужны сторонние библиотеки, кроме стандартной zipfile:

import zipfile  def hide_in_zip_container(src_path, dest_path, payload_bytes):     """     Копирует содержимое одного ZIP-архива в другой,     добавляя наш секретный файл "зайцем".     """     # Имя нашего файла-призрака     secret_filename = 'content/secret.dat'      with zipfile.ZipFile(src_path, 'r') as zin:         with zipfile.ZipFile(dest_path, 'w') as zout:             # Копируем все оригинальные файлы             for item in zin.infolist():                 # Для EPUB нужно отдельно обработать файл 'mimetype'                 if item.filename != 'mimetype':                     zout.writestr(item, zin.read(item.filename))                          # Добавляем наш секретный файл!             # Манифест мы не трогаем, поэтому Word/Pages/etc его не увидят.             zout.writestr(secret_filename, payload_bytes) 

Эта простая, но эффективная логика легла в основу поддержки целого зоопарка форматов.

Расширяя горизонты: Универсальный подход к контейнерам

В этом обновлении мы сделали ставку на универсальность. Вместо того чтобы писать уникальный код для каждого формата, мы проанализировали их структуру и реализовали поддержку целых семейств документов.

  • OpenDocument (.odt, .ods, .odp): Это открытый стандарт и основа таких офисных пакетов, как LibreOffice и OpenOffice. Поддержка этих форматов была важна для обеспечения кроссплатформенности и независимости от проприетарного софта. В отличие от «файла-призрака», для ODF требуется аккуратная модификация XML-манифеста, что делает интеграцию чуть сложнее, но результат так же надежен.

  • EPUB (.epub): Стандарт де-факто для электронных книг. Возможность спрятать архив внутри книги открывает интересные сценарии. Представьте себе целую библиотеку на полке, где в одной из книг скрывается ваша цифровая капсула времени.

  • Apple iWork (.pages, .numbers, .key): Огромная экосистема пользователей Apple часто остается за бортом в мире стеганографических утилит. Мы исправили это. Теперь документы, созданные в Pages, Numbers или Keynote, могут служить такими же надежными контейнерами.

  • XPS/OXPS (.xps, .oxps): Хотя этот формат от Microsoft и не так популярен, как PDF, он является стандартным для многих корпоративных систем документооборота Windows. Добавление его поддержки делает нашу программу еще более универсальным решением.

Наш арсенал: полный список поддерживаемых форматов

В версии 1.4.1.0 ChameleonLab поддерживает стеганографию в следующих контейнерах:

Категория

Форматы

Метод сокрытия

Изображения

.png, .bmp, .tiff

Классический LSB

MS Office

.docx, .xlsx, .pptx

Внедрение в Custom XML Part

OpenDocument

.odt, .ods, .odp

«Файл-призрак» + правка манифеста

Эл. книги

.epub

«Файл-призрак»

Apple iWork

.pages, .numbers, .key

«Файл-призрак»

MS XPS

.xps, .oxps

«Файл-призрак»

Документы

.pdf

Авторский метод «Хамелеон»

Жемчужина коллекции: наш авторский метод для PDF

PDF стоит особняком. Это не ZIP-архив, а сложная бинарная структура из объектов. Попытка просто дописать байты в конец файла или внедрить их в метаданные либо легко обнаруживается, либо вмещает смехотворный объем.

Мы разработали собственную, уникальную методику, которую назвали «Метод Хамелеона». Не раскрывая всех деталей (это наше ноу-хау), скажем главное:

  • Метод не меняет видимое содержимое. Верстка, текст, изображения — все остается нетронутым.

  • Вместимость теоретически безгранична. Мы динамически создаем внутри PDF изолированный канал данных нужного размера.

  • Надежность. Данные выживают после открытия и пересохранения файла в большинстве популярных редакторов.

Этот метод превращает PDF из «неудобного» формата в один из самых надежных и емких контейнеров в нашем арсенале.

Аналоги и наше преимущество

На рынке существует несколько программ для стеганографии, но у ChameleonLab теперь есть ключевое преимущество:

  • OpenStego: Отличный проект, но в основном сфокусирован на LSB в изображениях и не работает с современными документами.

  • Steghide: Классическая консольная утилита, мощная, но также ограничена изображениями и аудио.

  • SilentEye: Хороший GUI, но опять же, фокус на LSB в медиафайлах.

Наше главное отличие — это универсальность и фокус на документах. ChameleonLab — это, пожалуй, единственная на данный момент программа с графическим интерфейсом, которая предоставляет единый подход для сокрытия данных в таком широком спектре офисных форматов, электронных книг и PDF, используя структурные, а не LSB-методы.

Особое внимание пользователям macOS

Отдельно хотим обратиться к пользователям macOS. Мы, как разработчики, сами ежедневно используем macOS для работы, и одной из причин создания ChameleonLab было практически полное отсутствие удобных и современных стеганографических программ под эту платформу. Большинство аналогов — это либо старые Java-приложения, либо портированные с Linux консольные утилиты, либо вовсе Windows-эксклюзивы.

Найти нативный, интуитивно понятный инструмент с графическим интерфейсом, который бы поддерживал современные форматы вроде .pages или .docx на macOS, — задача практически невыполнимая. ChameleonLab призван закрыть эту нишу. Мы создавали программу в первую очередь для себя и таких же, как мы, — тех, кто ценит качественный и работающий «из коробки» софт для экосистемы Apple.

Кроссплатформенность и будущие цели

Мы стремимся сделать ChameleonLab доступным для всех. На данный момент программа полностью протестирована и готова к работе на Windows и macOS.

Но на этом мы не останавливаемся. Прямо сейчас ведется активная работа по сборке и тестированию версий для Linux и Android. Наша цель — предоставить удобный и надежный инструмент для стеганографии на всех ключевых платформах. Следите за новостями!

Что дальше? Исследуем JPG и MP3

Нас часто спрашивают: «А когда будет поддержка JPG и MP3?». Это логичный вопрос, ведь это самые популярные медиаформаты. Однако они представляют собой совершенно иной класс сложности по сравнению с документами-контейнерами.

Ключевая проблема — сжатие с потерями.

  • В JPG нет простой пиксельной сетки, как в PNG. Изображение преобразуется в набор математических коэффициентов (ДКП), и именно они сжимаются. Классический LSB-метод здесь бесполезен — ваши биты будут уничтожены при первой же перепаковке. Для сокрытия данных в JPG существуют сложные алгоритмы (JSteg, F5, OutGuess), которые модифицируют сами коэффициенты ДКП, но их реализация требует глубокого понимания математики формата, чтобы не создавать статистических аномалий.

  • В MP3 ситуация аналогична. Формат использует психоакустическую модель, чтобы «выбросить» звуки, которые человеческое ухо все равно не услышит. Простое изменение битов в аудиопотоке почти гарантированно приведет к слышимым щелчкам и артефактам. Стеганография в MP3 — это отдельная наука, требующая работы со структурой фреймов и спецификой кодирования.

Мы активно изучаем эти форматы и существующие алгоритмы. Добавление их поддержки — наша следующая большая цель, но она требует серьезных исследований для достижения того же уровня надежности, который мы обеспечили для форматов-контейнеров.

Что еще нового?

Мы также прислушались к отзывам и исправили несколько мелочей, включая баг с удалением нескольких линий в нашем пасхальном «Тетрисе».

Это обновление — большой шаг вперед для проекта. Мы перешли от классических алгоритмов к более сложным и надежным методам структурной стеганографии, сделав программу по-настоящему универсальной.

Последнюю версию программы «Steganographia» от ChameleonLab для Windows и macOS можно скачать на нашем официальном сайте.

Будем рады, если вы опробуете новую версию. Ждем ваших отзывов, сообщений об ошибках и, конечно же, предложений по новым форматам для исследований. Присоединяйтесь к нашему Telegram-каналу!

Спасибо за внимание!


ссылка на оригинал статьи https://habr.com/ru/articles/944808/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *