Стеганография - это искусство и наука передавать сокрытые данные внутри других, не сокрытых данных.
Подробнее можно прочитать здесь.
Часто, когда говорят о стеганографии, не выходят за рамки LSB в картинках (хотя и в картинках можно сделать нечто более оригинальное ).
В данном посте мы хотим рассказать о ссылочной стеганографии (принцип ссылочной стеганографии можно почитать тут) в формате .m4a(.mp4).
Общий принцип
Для начала на “пальцах” распишем, как это в целом работает. Любой файл можно зашифровать и представить в base64 текстовом виде. Далее его можно отправить на сервис одноразовых сообщений (например https://onetimesercet.com/ )
Отправив сообщение мы получаем ссылку вида https://onetimesecret.com/secret/jqr1s0o5bvlts8cyice71fvwv0o0ltx
Затем мы отправляем саму ссылку на сервис сокращения ссылок, и получаем сокращённую ссылку; например для goo.su: https://goo.su/SAsb.
Как видим у нас всего 4 байта, если мы заранее знаем какой сервис используем (в реальной стеганографии разумнее использовать свой сервис), если мы заранее имеем ключ расшифрования (обмен ключей – отдельная задача), то нам достаточно переслать всего 4 байта для передачи искомого файла.
Это и есть принцип ссылочной стеганографии – мы передаем ссылку на сообщение, а не само сообщение.
Как дополнительное преимущество, сервис одноразовых сообщений гарантирует, что в будущем даже после компрометации данного ключа, третья сторона не получит доступ к скачиванию данного файла после его открытия.
Подробный алгоритм стеганографии
m4a или mp4
Правильно говорить m4a, так как под mp4 скрывается множество других форматов (M4A, M4V, M4R, M4B и другие). Далее мы будем писать m4a
Разбор метаданных
Метаданные — это набор следующих стандартизированных сведений о файле:
имя автора,
разрешение,
цветовое пространство,
авторские права,
ключевые слова
и т.д.
Метаданные в M4A является сложной структурой, содержащей множество контейнеров и чанков (chunks).
Количество структур в метаданных M4A может изменятся. Основные из них на схеме, представленной выше.
Мы остановилась на чанке «moov».
Проанализировав этот чанк, мы заметили, что можем с помощью набора шестнадцатеричных значений изменять время создания и редактирования, при этом оставив саму аудиодорожку целой.
Можно было бы выбрать и другие чанки. Также можно совместить с “классической” стеганографией в аудио файлах, путём небольшого их изменения. См. работы о принципе LSB.
Так как требуется передать всего 4 байта, изменение аудио будет незначительным.
Для более глубокого изучения чанков файла .m4a оставим ссылку, где мы подробно описали все чанки.
Алгоритм работы
Первым делом нужно вкраплять сообщение в стегоконтейнер.
Шаг 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
Риски и недостатки
У нашего проекта та же есть свои риски в использовании:
Использование сторонних сервисов. Любой из перечисленных выше сервисов, которые мы используем, может отключиться или просто перестать работать. В это время не будет и работать наше решение. Это можно решить, вкрапляя информацию сразу в несколько сервисов и\или разработав свои сервисы для ссылочной стеганографии.
Случайное изменение даты в метаданных файла. Простым примером является команда touch. Touch - Команда Unix, предназначенная для установки времени последнего изменения файла или доступа в текущее время. Это может сильно повредить ссылку или просто её изменить из-за чего прочитать спрятанное сообщение уже будет невозможно никому. Это можно решить, вкрапляя информацию в несколько мест метаданных.
Как можно обнаружить стегоконтейнер в файле?
Важно понимать, что обнаружение стегоконтейнеров в мультимедийных файлах, особенно с использованием словарей и временных меток, является сложной задачей, требующей специализированных алгоритмов и глубокого анализа, необходимых инструментов. Реализация точного и надежного алгоритма может потребовать дополнительных исследований и опыта в области стеганографии.
Мы думаем, что количество музыкальных файлов довольно велико. Так же, современные нейронные сети могут генерировать файлы (Имя им легион: https://www.riffusion.com/, https://mubert.com/render, … и многое другое ), по этой причине не видим особых способов обнаружить стеганографию. Возможно мы не правы, будем рады услышать критику в комментариях.
Исходники
У нас не было задачи сделать полноценное решение, всё реализовано ради исследовательских целей. Готовы к жёсткой, но конструктивной критике.
Работа была выполнена на пару с @nurovAm . Благодарим @PavelMSTU за консультации и помощь.
Комментарии (17)
anzay911
19.10.2023 15:58+1Так вот зачем ограничивают продажи ускорителей в Китай. Чтоб китайский ИИ не мог анализировать ссылочные стеганографии.
Protos
19.10.2023 15:58Мне казалось, что стеганография, это передача информации. Ну то есть вот я инсайдер и лишил незаметно слить данные, гружу я с корпоративного ПК их на сервер где-то в интернете значит и понимаю, что моя учетка вдруг оказалась заблокированной, ведь DLP-шники бац и спалили меня так как я гружу непонятный файл на непонятный сервис. Если сервис мой, так он еще и некатегоризируется на прокси-сервере и это подозрительно. Как в таком кейсе помогает стеганография?
AlexTheCleaner
19.10.2023 15:58Картинка с котиком, а внутри информация (если немного передать надо). Задолбаются палить.
Protos
19.10.2023 15:58+1Я понимаю, в данном случае информацию не передают, а предлагают в открытую передать всю информацию на какой-то хостинг и сразу стать обнаруженным. Прятать ссылку в почте на хостинг уже нет смысла.
PavelMSTU
19.10.2023 15:58Не в открытую, а в зашифрованном виде.
и сразу стать обнаруженным
Перед кем? и каким образом? (На практике, разумеется, помещать нужно через проксю.)
unC0Rr
19.10.2023 15:58Принцип стеганографии в том, что сам факт обмена информацией становится недоказуем. В предложенной схеме скрывается только момент получения ссылки, а всё остальное на виду, и не важно, что в зашифрованном виде.
Protos
19.10.2023 15:58Службой безопасности той компании, данные которой пытаются слить и все это видно в консоли DLP. Или может ФСБ, которое трафик мониторит если мы говорим про сокрытие передачи данных между физлицами…
tuxi
19.10.2023 15:58Я могу ошибаться, поправьте если это не так, но разве ссылка в 4 байта не хранится какое-то очень ограниченное время?
semenyakinVS
19.10.2023 15:58+1Выглядит круто, запомнил для себя метод. До этого только на открытых текстовых данных и зашиванием в картинки пробовал стеганографию делать
IvanPetrof
19.10.2023 15:58+1Непонятно причём тут вообще файлы .m4a?
4 байта можно незаметно схоронить практически в любом файле. Даже в текстовом.
p.s. Да и в принципе 4 байта, довольно мало. Что мешает сбрутфорсить сервер одноразовых сообщений тупо перебрав все ссылки? (попутно сделав нечитаемыми для настоящих адресатов те на которые наткнёмся)
Гораздо интереснее хранить что-то вроде хэшей сообщения. Или типа магнет-ссылок.
Protos
19.10.2023 15:58Сообщите первые 2 ссылки не с вашего аккаунта, допустим у Облако mail.ru, говорят на нем как раз начинающие хакеры тренерутся.
thegriglat
19.10.2023 15:58Хранить ipfs хеш, а за ним уже хоть файл, хоть целая библиотека может быть
AntonyMcGreen
19.10.2023 15:58А разве touch проставит дату изменения файла внутри файла? Он же работает с атрибутами файловой системы, а не внутреннего формата файла
unC0Rr
А как же принцип Кирхгофа? Да и использование сервиса одноразовых ссылок вообще никакого отношения не имеет к стеганографии, стеганографическим сообщением можно считать только вот эти четыре байта, остальное неважно.
PavelMSTU
Ой, да назовите хоть горшком, только в печку не суйте.
Если вы почитаете 99% академических работ по стеганографии, то везде пишут (упрощённо) "нужно впихнуть как можно больше данных... Но если много данных впихнуть -- это станет заметно... " Далее накручивается разная математика (совершенно секретная система по Кашену, по Грушо и т.д.)
Суть "ссылочной стеганографии" (не нравится -- назовите по другому) в том, что эта задача не имеет ничего общего с практикой. Любое сообщение шифруем, пихаем, получаем ссылку, сокращаем, записываем 4-8 байт.
У ребят -- один из примеров.
Можно конечно сделать секретнее, но мы не будем. По понятным причинам. :)