Информационное сокрытие в PDF документах

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

    Однако контейнеры этим не исчерпываются. Совместно с двумя разгильдяями очень талантливыми студентами (а именно с lancerx и с PavelBatusov) мы решили разработать простенький just4fun-проектик информационного сокрытия в электронных документах.

    Ссылка на то, что получилось (не судите строго): pdf.stego.su
    (примеры PDF можно взять здесь)

    Интерфейс довольного пользователя представлен на кавайной картинке:




    О чем все это?



    Как-то раз за чашкой кофе, рассуждая о стеганографии, мы задались вопросом: "Можно ли в электронные текстовые документы вкраплять какую-нибудь дополнительную стороннюю информацию таким образом, чтобы визуально сами документы никак не изменились?". Так появился наш маленький «стеганографический кружок».

    Оказывается можно.

    Вот далеко не полный список.

    1. OpenDocument Format (ODT) — он же ISO/IEC 26300-1:2015, он же, кстати, не много не мало государственный стандарт (sic!) ГОСТ Р ИСО/МЭК 26300-2010. Если говорить на пальцах, то протокол представляет собой zip-архив из xml'ек. Кто не верит может установить LibreOffice, создать произвольный документ «example.odt», переименовать его в «пример.zip» и убедиться что так оно и есть. Пространство для творчества с вкраплением посторонней информации — масса.
    2. Office Open XML (OOXL, он же DOCX, он же ISO/IEC IS 29500:2008) — ответ Чемберлену от Microsoft. C точки зрения информационного сокрытия те же яйца, только в профиль. DOCX представляет собой тоже zip архив с xml'ками, только по другому организованные.
    3. DjVu (от французского «дежавю») — очень интересный протокол для сокрытия. В DjVu используется алгоритм JB2, который ищет повторяющиеся символы и сохраняет их изображение только один раз. Соотвественно есть ряд идей:
      • Выбрать множество всех похожих символов и выбрать один с помощью хеш-стеганографии.
      • Выбирать два символа вместо одного. Первый символ считать передающим 0, а второй символ считать передающим 1. С помощью «чередования» можно передавать сокрытую информцию.
      • Скрывать данные внутри самой картинки, обозначающей символ в DjVU, с помощью LSB.

    4. FictionBook (fb2) — это xml. Однако может содержать binary тег, внутри которого — картинка. Далее сокрытие в самой картинке. Можно так же попытаться вставлять пробелы и иные символы за пределами тегов или внутри самих тегов.


    Продолжать можно долго, т.к. форматов хранения текстовой информции человечество навыдумывало немало.
    Для наших опытов с сокрытием мы выбрали PDF, т.к. он обладает следующими «преимуществами»:
    1. этот формат не редактируем — следовательно нет проблем при перезаписи (Ну… на самом деле тоже редактируем, но все же чаще PDF используют как «нередактируемый» формат)
    2. этот формат достаточно просто устроен — об этом чуть ниже
    3. этот формат достаточно популярен


    Как это работает?



    Наколеночную приблуду мы назвали SHP, что расшифровывается как Simple Hide to Pdf. Simple – потому что простое; Hide – потому что скрывает; и “to PDF” – потому что работает только с PDF документами.

    Для ликбеза пару абзацев про протокол ISO 32000:2008, который и есть PDF.
    Документ состоит из объектов (так называемые obj) в конце документа есть xref-таблица, которая перечисляет все необходимые объекты. Каждый объект имеет номер и ревизию… Да, именно так, pdf поддерживает различные ревизии! На самом деле PDF — это мини-система управления версиями! ;)) Вот только в жизни что-то не прижилось…

    PDF-документ образуется объектами разных типов:
    • логические переменные
    • числа (целые и дробные)
    • строки
    • массивы
    • словари
    • потоки
    • комментарии

    Если говорить грубо, то структура PDF следующая:
    • заголовок
    • объекты (obj данные)
    • xref-таблица
    • трейлер (содержит информацию об объектах, с которых нужно начать чтение файлов)

    Немного изучив PDF стандарт навскидку можно предложить следующие методы сокрытия.
    1. Каждый объект чередовать определенным способом, тем самым меняя структуру документа. Мы с ребятами называли это «структурной стеганографией», так как вы меняете структуру документа, не меняя содержимое. Если у вас n объектов, то у вас в итоге возможно n! различных упорядочиваний, следовательно вы можете передать не более log2(n!) бит данных. Идея интересная, но мы отложили её до лучших времен.
    2. Можно поиграться с версиями самих файлов. В старые (не используемые) версии вносить сокрытую информацию. Одноко мы посмотрели 1000 различных pdf'ок и во всех не было ни одного файла с ревизией больше 0...
    3. Можно найти различные способы внесения данных, предусмотренные протоколом, которые не отображаются для пользователя.

    Самым простым способом пункта 3 являются… комментарии. Вот уж не знаю для кого это оставили; может быть это наследие PostScript, который «юридически» является языком программирования (как, LaTeX) и, соответственно, в его синтаксисе предусмотренны строки комментариев, как в любом ЯП. С точки зрения «рафинированной» стеганографии — это, конечно, не секьюрно. Однако предполагаемому противнику нужно знать о факте сокрытия…

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

    Вкрапление данных:
    1. пользователь подает на вход SHP системы сам PDF документ, сообщение для сокрытия и некий пароль;
    2. SHP по паролю вычисляет стегоключ и криптоключ. Информация в сообщении сжимается и шифруется с помощью криптоключа;
    3. с помощью стегоключа информация вкрапляется в pdf документ;
    4. на выходе из SHP системы пользователь получает pdf документ с вкраплеными данными.

    Извлечение данных:
    1. пользователь подает на вход системы pdf и пароль;
    2. система аналогичным образом по паролю вычисляет стегоключ и криптоключ;
    3. система извлекает данные по стегоключу;
    4. расшифровывает данные с помощью криптоключа и разжимает их;
    5. выдает сообщение пользователю.

    Вот, собственно, и все.

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

    Тем, кто не заметил в начале долгочита, даю ещё раз ссылку на нашу наколенную web-платформочку: pdf.stego.su
    (Как видите вместо стандартного черного цвета в Django мы выбрали влюбленных жаб. Да, мы просто гении дизайна!)

    Для чего это нужно?



    Сначала это был просто just4fun для меня и приобритение навыков и опыта для моих паддаванов-студентов. Однако в последствии у нас появились ряд идей. Именно поэтому мы публикуем этот пост, так как хотим знать мнение профессионального IT-сообщества, особенно безопасников.

    Возможно все что мы пишем — бред. В этом случае, если читатель еще не бросил чтения этого поста, то просим его потратить еще 5-10 минуть времени на критику в комментах.

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

    Однако наиболее интересных всего 4.5 задачи.

    0.5 Незаметная передача информации & Скрытое хранение информации.



    Как уже писали — не секьюрно! Однако против киберблондинок точно сработает. Для более серьезной стеганографии требуется придумать хороший алгоритм стеганографического вкрапления как такового. Поэтому эту задачу мы засчитываем за 0.5, а не за 1.

    К тому же использование электронных документов нельзя считать робастной стеганографией потому, что при преобразовании (например: pdf -> odt) информация теряется.

    Единственное, где идея незаметной передачи может быть востребована, это в закрытых протоколах. Своего рода «security through obscurity», только в стеганографии.

    1.5 Защита исключительного права



    Все больше набирает оборот продажа электронных журналов; различной аналитики и прочих платных подписок. Возникает вопрос: можно ли как-то защитить продаваемый контент? Чтобы публикующим в сети персонажам неповадно было?..

    Можно попробовать в рассылаемый документ вкраплять информацию о получателе. Например: e-mail и номер платежной карты, IP, логин при регистрации в интернет-магазине, мобильный телефон и т.д. Для секьюрности и соблюдения законодательства можно вкраплять это в виде хешей (+соль) или просто вкраплять какой-либо номер (ID'шник в системе),
    таким образом этот номер что-то скажет только владельцу системы.

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

    Разумеется возникает ряд вопросов.
    1. Можно ли извлечь метку?
    2. Можно ли подделать метку и «подставить» другого пользователя?

    Если использовать SHP то эту задачу следовало бы так же засчитать за 0.5, а не за 1.0…

    Однако можно попытаться найти более хорошие и надежные алгоритмы сокрытия данных.
    Например применение нескольких алгоритмов сокрытия «не мешающих друг другу» позволяет построить единую стеганографическую конструкцию, так сказать «многофакторную стеганографию» (тоже отсебячный термин).

    Суть «многофакторной стеганографии» в следующем: если хотя бы одна метка сохраниться мы можем взять персонажа за яйца, мы можем определить, кто именно опубликовал данный платный контент. В Японии это актуально.

    2.5 Защита подлинности документа.



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

    Однако, есть штатный механизм, который делает то же самое! (по крайней мере и в рамках протокола PDF)
    Поэтому мы опоздали >__<
    Но можно аналогичные рассуждения применить к другим форматам?

    3.5 Децентрализированная СЭДО.



    В принципе «неотчуждаемость» сокрытых данных можно использовать
    для децентрализированных систем электронного документооборота (СЭДО).

    Вот только нужно ли?
    Понятно, что это очень удобно; peer-2-peer и вообще — модно!
    Самый главный цимес — неотчуждаемость от документа.
    В современных СЭДО подписанный документ подписан только если он внутри СЭДО.
    Если вы его извлечете и передатите по почте сторонней организации у которой не стоит решение вашего СЭДО, то вы просто передадите файл.

    Современный рынок СЭДО напоминают месседжеры. Если вы на Skype, а Вася на Telegram, то либо вам нужно установить Telegram, либо Васе Skype… А вот представте себе протокол вкрапления информации (или совокупность протоколов вкрапления для каждого протокола электронных документов).

    Единый для всех! Общий!

    Если бы этот протокол вкрапления и извлечения подписей был бы един, так же как едины SMTP и IMAP для всех почтовиков, это было бы гораздо удобнее.

    Хотя я — не специалист по СЭДО. Если здесь есть спецы, то прошу уделить время и написать в комментах, что вы думаете по этому поводу.

    Востребована ли данная идея?

    4.5 Водяной знак в DLP-системах.



    Представте, что у вас есть режимный или «полурежимный» объект (да, бывают и такие). У вас есть информация, которую вы бы не хотели пускать во вне, например внутренняя документация какого-либо продукта.Вы вкрапляете определенную метку (или метку из определенного множества). Если документ идет «во вне» системы, то DLP (Data Leak Prevention) проверяет наличие метки. Если метки нет – документ проходит; если есть – система поднимает alert.

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

    К тому же от одного типа «утечки» это однозначно поможет – от непреднамеренной. Бывают случаи, когда нечаянно пересылаются такие документы, которые лучше бы не пересылать (надеюсь, это печальное свойство присуще только «полурежимным», а не режимным объектам...)

    Подводим итоги

    .

    Мы убедились, что сокрытие данных в документах – это вполне реальная штука.
    … Ну и узнали много нового, так как много где поковырялись...

    Конечно, есть ряд вопросов.
    Возможно ли сделать это сокрытие стеганографически стойким? Что будет, если пользователь переведет все из pdf, скажем, в jpeg?.. Удалится ли сокрытая информация? Насколько это критично? Решит ли эту проблему многофакторная стеганография?

    Применим ли статистический подход для анализа качества системы? То есть если система защищает в 90% случаях, а в 10% не защищает, то разумно ли (как в криптографии) говорить, что система не защищает совсем? Или, может быть, есть бизнес-кейсы, когда и 90% будет достаточно для получения определенной пользы?..

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

    Еще раз ссылка на портал: pdf.stego.su
    (+ примеры PDF для опытов, кому лень искать)
    (заранее приносим извенения за возможный хабраэффект)

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

    Как вы думаете, будет ли востребована идея информационного сокрытия в электронных документах?
    • 47%Да, если довести идею до ума! Но, разумеется, подводных камней много.48
    • 34.3%Нет, это только just4fun и для криптоблондинок.35
    • 18.6%Не знаю… Но что-то в этом есть!19
    Поделиться публикацией
    Комментарии 22
      +1
      А что там за комменатрии вообще используются? Вроде есть какие-то просмотрщики PDF, умеющие отображать комментарии, они не там же ли хранятся, где у вас? Вроде Foxit reader (могу путать).
        +1
        Похоже вы путаете комментарии с аннотациями. Аннотации отображаются и их можно редактировать.
        А вот комментарии, как уже в статье упоминалось — наследие PostScript. Согласно стандарту при работе с файлом они игнорируются.
          0
          Тогда они при распечатке пропадут, верно? (Представили себе параноиков из службы безопасности, которые не передают документ, а самостоятельно распечатывают его и отдают распечатку. «Мин нет»)
        0
        >4.5 Водяной знак в DLP-системах.

        Как мне кажется, для полноценной реализации не хватает некоторого условия:
        уничтожение водяного знака в файле нестандартными средствами должно уничтожать полезные данные копии.
          0
          Почему же? В зависимости от чего защищаемся.
          Если от «неосознанного разгильдяйства», то вполне сгодиться.
            0
            Если мне не изменяет память, то штатная подпись в ПДФ является неотчуждаемой, если файл защищен от изменения, и тогда и от осознанного, и от неосознанного разгильдяйства штатная подпись поможет лучше.
              0
              Если документ защищён и данные не копируются в буфер обмена, то, не говоря уже об использовании «разлоченных» вьюверов, которые плевать хотели на этот запрет, юзер просто сделать PrintScreen и отправит данные картинками.

              Причём, если скопированный текс DLP-система хоть как-то может выловить в исходящих сообщениях, то с картинками больше проблем.

              Поэтому, фактически, такая защита лишь ухудшает безопасность организации
                0
                Существует вероятность, что в тех организациях, где установлена DLP, printscreen работать не будет.
                  0
                  Как обычный юзер я скажу «а камера в телефоне мне зачем»? И это ещё больше усложнит задачу DLP, и ещё ухудшит безопасность ))

                  А как программер, я сталкивался с «защищёнными» письмами в Outlook. Действительно, Print Screen не работает, если окно с таким письмом на экране. Но ничего не помешало мне выполнить копирование изображения с экрана в Bitmap через BitBlt. Если это отключить, много чего в винде сломается, всякие популярные в начале 2000-х программы с украшалками на стандартных элементах окон, или с полупрозрачностью под окном.

                  Если сторонний софт не запрещён, то программа типа Fraps может работать.
          0
          А как на размер файла влияет такая стеганография?
            0
            Увы, т.к. мы вкрапляем комментарий, то размер увеличивается на зашифрованный коммент.

            Думали вкраплять данные методом перестановкой obj, но это более сложная задачка — оставили для лучших времен.
            0
            На мой взгляд все преимущества сводятся на нет, потому что метка отчуждается. Даже если каким-то неведомым образом нельзя ее просто удалить из комментариев, то можно просто распечатать pdf в pdf (из коробки в декстопном Linux и куча утилит для винды) — и вот у нас чистая копия. Не говоря уже об упомянутом Print Screen.
              –1
              И да и нет.
              У меня есть один знакомый из одной конторы (называть не буду), который зарабатывает на жизнь защитой авторских прав в инете (да-да, это из-за него не всегда можно было скачать в rutrecker'е)…

              Так вот, они проводили исследование, оказывается 82% пользователей, которые ищут желаемый контент, бросают поиски после просмотра 5 страниц поиска…

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

              У нас с ребятами проблема такая: КАК понять, каков у нас %? Если, скажем окажется >70% — то это очень круто!..
                0
                Профит в чем? В том чтобы найти тех, кто выложил копию с водяными знаками? После пары инцидентов пираты будут эти знаки удалять.
                  0
                  После пары инцидентов пираты будут эти знаки удалять.
                  Ну и пускай удаляют. Вопрос не в этом. Вопрос в покрытии.

                  Есть X подписчиков, из них 0.8 * X вообще никогда не слышало слово «стеганография», а 0.1 * X считают что их и так пронесет.
                  Итого 0.9 X — прокатит, 0.1 X — не прокатит.
                  (Цифры 0.8 и 0.1 взяты с потолка.)

                  + не вся стеганография = информационное сокрытие. Есть кейсы ИС, в которых не требуется стеганография. Статья называется «Информационное сокрытие в PDF документах», а не «стеганография в PDF документах». Print Screen и пшик стеганографии.
                +1
                Нативная подпись в PDF представляется в виде структур, которые тоже можно вычленить из документа.
                +1
                > Самым простым способом пункта 3 являются… комментарии. Вот уж не знаю для кого это оставили;

                Комментарии являются неотъемлемой частью документооборота, основанного на PDF.
                Используются они примерно так.
                Исполнитель отправляет свой документ проверяющему или другому получателю. Тот, не меняя сам текст документа, довешивает к нему комментарии (например, с указаниями на ошибки или со своими предложениями и замечаниями) и возвращает исполнителю или отправляет дальше.
                Я не помню уже, позволяет ли стандартный PDF Reader добавлять комментарии, но некоторые специализированные системы документороборота это точно умеют.
                Так что использовать комментарии для стеганографии как-то странно.

                Надеяться на неотчуждаемость какой-либо информации в PDF с целью контроля за распространением информации по меньшей мере наивно. Всякого рода метки годятся только для подтверждения аутентичности документа (в смысле копия без меток смысла не имеет), но тогда штатный механизм уже вполне себе работает.

                Так что в реальности остается только одно применение — сокрытие в документе дополнительной информации.
                  0
                  Почему не редактировать документы в Word, оставив PDF для публикации финальной версии?
                    0
                    geher — вы, как и товарищ Psychosynthesis, вы путаете аннотации и комментарии. Комментарий — элемент синтаксиса формата.
                      0
                      О как.
                      Я как-то уже привык эти аннотации комментариями обзывать, тем более, что привык к тому, что аннотация — это краткое описание сути документа.
                      А про комментарии в виде элементов синтаксиса даже не знал.

                      Чтобы не ждать час.

                      navion, принципиальной разницы нет. Если документооборот основан на одном из форматов MS Word, или на ODF, механизм использования точно такой же. Защищенный от изменения и подписанный исполнителем документ обычно получателем только комментируется.
                      А выбор формата определяется либо системой документооборота, либо внутренним стандартом фирмы, либо тем и другим сразу.
                    0
                    В этой статье торчат уши из некоторых специфичных областей в computer science. Из совсем свежего, приведу пример-ссылку на гитхаб: https://github.com/uds-datalab/PDBF. Авторы подробно и четко описывают, что можно с этой технологией сделать, имеются исходники и доки.
                    Для совсем ленивых, можно скачать вот пдф: http://www.vldb.org/pvldb/vol8/p1972-dittrich.pdf. На самом деле это не просто пдф, но еще и валидный хтмл, а также ova-образ с space invaders :)

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

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

                      Самое читаемое