Скрытное хранение данных в файлах .m4a

Стеганография — это искусство и наука передавать сокрытые данные внутри других, не сокрытых данных.

Подробнее можно прочитать здесь.

Часто, когда говорят о стеганографии, не выходят за рамки LSB в картинках (хотя и в картинках можно сделать нечто более оригинальное ). 

В данном посте мы хотим рассказать о ссылочной стеганографии (принцип ссылочной стеганографии можно почитать тут) в формате .m4a(.mp4).

Общий принцип

Для начала на “пальцах” распишем, как это в целом работает. Любой файл можно зашифровать и представить в base64 текстовом виде. Далее его можно отправить на сервис одноразовых сообщений (например https://onetimesercet.com/ )

Отправив сообщение мы получаем ссылку вида https://onetimesecret.com/secret/jqr1s0o5bvlts8cyice71fvwv0o0ltx 

Затем мы отправляем саму ссылку на сервис сокращения ссылок, и получаем сокращённую ссылку; например для goo.su: https://goo.su/SAsb.

Как видим у нас всего 4 байта, если мы заранее знаем какой сервис используем (в реальной стеганографии разумнее использовать свой сервис), если мы заранее имеем ключ расшифрования (обмен ключей – отдельная задача), то нам достаточно переслать всего 4 байта для передачи искомого файла. 

Это и есть принцип ссылочной стеганографии – мы передаем ссылку на сообщение, а не само сообщение.

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

Скрытное хранение данных в файлах .m4a
Жизненный цикл

Подробный алгоритм стеганографии

m4a или mp4

Правильно говорить m4a, так как под mp4 скрывается множество других форматов (M4A, M4V, M4R, M4B и другие). Далее мы будем писать m4a

Разбор метаданных 

Метаданные — это набор следующих стандартизированных сведений о файле:  

  • имя автора, 

  • разрешение,  

  • цветовое пространство,  

  • авторские права,  

  • ключевые слова  

  • и т.д.  

Метаданные в M4A является сложной структурой, содержащей множество контейнеров и чанков (chunks). 

Количество структур в метаданных M4A может изменятся. Основные из них на схеме, представленной выше. 

Мы остановилась на чанке «moov»

Структура чанка moov в m4a
Структура чанка moov в m4a

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

Можно было бы выбрать и другие чанки. Также можно совместить с “классической” стеганографией в аудио файлах, путём небольшого их изменения. См. работы о принципе LSB.

Так как требуется передать всего 4 байта, изменение аудио будет незначительным.

 Для более глубокого изучения чанков файла .m4a оставим ссылку, где мы подробно описали все чанки. 

Алгоритм работы

GIF-визуализация принципов работы стеганографии. Красным жирным текстом – измененная информация в полях creation_time и modification_time. 
GIF-визуализация принципов работы стеганографии. Красным жирным текстом – измененная информация в полях creation_time и modification_time. 

Первым делом нужно вкраплять сообщение в стегоконтейнер.

Шаг 1. Написать сообщение

Для того чтобы написать сообщение, мы использовали сервисы одноразовых записок (onetimesecret.com или safenote.co)

Шаг 2. Укоротить ссылку

Вся ссылка одноразового сообщения не поместится в стегоконтейнер, поэтому мы воспользовались сторонним сервисом goo.su по укорачиванию ссылок, при использовании которого мы получаем 4-7 символов после последнего слэша (https://goo.su/SAsb данными символами в этом примере будут “SAsb”).

Шаг 3. Вставить символы

Символы из данного примера мы разбиваем на список [S, A, s, b] и при помощи специальных словарей переводим в дни, часы, минуты и секунды. Затем мы их вставляем в специальные подчанки: mvhd-create-date, mvhd-modify-date, tkhd-create-date и tkhd-modify-date.

Сообщение спрятано

Извлечение стегосообщения

Извлечение стегосообщения
Извлечение стегосообщения

Шаг  1. Извлечь символы

Через обратные словари мы извлекаем символы которые записали во временные подчанки.

Шаг 2. Перейти по ссылке

Извлеченные символы мы вставляем в ссылку goo.su/  после слэша и переходим по ней.

Сообщение прочитано 

Важное замечание. Открыть записку можно лишь один раз, запустив обратный алгоритм, то есть, вытащив символы из метаданных и перейти по ссылке сервиса goo.su. Это даёт дополнительную безопасность стеганографического решения. 

Исходники вкрапления и извлечения можно загрузить по ссылке: https://github.com/kib-sources/stego-mp4-link 

Риски и недостатки

У нашего проекта та же есть свои риски в использовании:

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

  2. Случайное изменение даты в метаданных файла. Простым примером является команда touch. Touch — Команда Unix, предназначенная для установки времени последнего изменения файла или доступа в текущее время. Это может сильно повредить ссылку или просто её изменить из-за чего прочитать спрятанное сообщение уже будет невозможно никому.  Это можно решить, вкрапляя информацию в несколько мест метаданных.

Как можно обнаружить стегоконтейнер в файле?

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

Мы думаем, что количество музыкальных файлов довольно велико. Так же, современные нейронные сети могут генерировать файлы (Имя им легион: https://www.riffusion.com/, https://mubert.com/render, … и многое другое ), по этой причине не видим особых способов обнаружить стеганографию. Возможно мы не правы, будем рады услышать критику в комментариях.

Исходники

  1. Описание всех чанков

  1. Ссылка на алгоритм кода написанного нами

  1. Ссылка на репозиторий с исходным кодом

У нас не было задачи сделать полноценное решение, всё реализовано ради исследовательских целей. Готовы к жёсткой, но конструктивной критике.

Работа была выполнена на пару с @nurovAm . Благодарим @PavelMSTU за консультации и помощь.

 

Источник

Читайте также