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

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

Часто, когда говорят о стеганографии, не выходят за рамки 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»

Структура чанка 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 за консультации и помощь.

Комментарии (17)


  1. unC0Rr
    19.10.2023 15:58
    +2

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


    1. PavelMSTU
      19.10.2023 15:58
      -1

       стеганографическим сообщением можно считать только вот эти четыре байта, остальное неважно.

      Ой, да назовите хоть горшком, только в печку не суйте.

      Если вы почитаете 99% академических работ по стеганографии, то везде пишут (упрощённо) "нужно впихнуть как можно больше данных... Но если много данных впихнуть -- это станет заметно... " Далее накручивается разная математика (совершенно секретная система по Кашену, по Грушо и т.д.)

      Суть "ссылочной стеганографии" (не нравится -- назовите по другому) в том, что эта задача не имеет ничего общего с практикой. Любое сообщение шифруем, пихаем, получаем ссылку, сокращаем, записываем 4-8 байт.

      У ребят -- один из примеров.

      Можно конечно сделать секретнее, но мы не будем. По понятным причинам. :)


  1. anzay911
    19.10.2023 15:58
    +1

    Так вот зачем ограничивают продажи ускорителей в Китай. Чтоб китайский ИИ не мог анализировать ссылочные стеганографии.


  1. Protos
    19.10.2023 15:58

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


    1. AlexTheCleaner
      19.10.2023 15:58

      Картинка с котиком, а внутри информация (если немного передать надо). Задолбаются палить.


      1. Protos
        19.10.2023 15:58
        +1

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


        1. PavelMSTU
          19.10.2023 15:58

          Не в открытую, а в зашифрованном виде.

          и сразу стать обнаруженным

          Перед кем? и каким образом? (На практике, разумеется, помещать нужно через проксю.)


          1. unC0Rr
            19.10.2023 15:58

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


          1. Protos
            19.10.2023 15:58

            Службой безопасности той компании, данные которой пытаются слить и все это видно в консоли DLP. Или может ФСБ, которое трафик мониторит если мы говорим про сокрытие передачи данных между физлицами…


  1. tuxi
    19.10.2023 15:58

    Я могу ошибаться, поправьте если это не так, но разве ссылка в 4 байта не хранится какое-то очень ограниченное время?


    1. Protos
      19.10.2023 15:58

      Файлы m4a сами по себе не самоочищаются от внедренной в них информации


      1. tuxi
        19.10.2023 15:58

        Я имею в виду ту короткую ссылку, что сгенерил какой-то сервис. У нее же явно есть некий срок жизни.


  1. semenyakinVS
    19.10.2023 15:58
    +1

    Выглядит круто, запомнил для себя метод. До этого только на открытых текстовых данных и зашиванием в картинки пробовал стеганографию делать


  1. IvanPetrof
    19.10.2023 15:58
    +1

    Непонятно причём тут вообще файлы .m4a?

    4 байта можно незаметно схоронить практически в любом файле. Даже в текстовом.

    p.s. Да и в принципе 4 байта, довольно мало. Что мешает сбрутфорсить сервер одноразовых сообщений тупо перебрав все ссылки? (попутно сделав нечитаемыми для настоящих адресатов те на которые наткнёмся)

    Гораздо интереснее хранить что-то вроде хэшей сообщения. Или типа магнет-ссылок.


    1. Protos
      19.10.2023 15:58

      Сообщите первые 2 ссылки не с вашего аккаунта, допустим у Облако mail.ru, говорят на нем как раз начинающие хакеры тренерутся.


    1. thegriglat
      19.10.2023 15:58

      Хранить ipfs хеш, а за ним уже хоть файл, хоть целая библиотека может быть


  1. AntonyMcGreen
    19.10.2023 15:58

    А разве touch проставит дату изменения файла внутри файла? Он же работает с атрибутами файловой системы, а не внутреннего формата файла