Інформаційне приховування в PDF документах

Існує маса способів інформаційного приховування одних даних усередині інших даних. Найчастіше, що зазвичай згадують – це стеганографию зображення, аудіо та відео інформації.

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

Посилання на те, що вийшло (не судіть строго): pdf.stego.su
(приклади PDF можна взяти тут

Інтерфейс задоволеного користувача представлений на кавайною картинці:




Про що це?

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

Виявляється можна.

Ось далеко не повний список.

  1. OpenDocument (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 to Hide 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 для дослідів, кому лінь шукати
(заздалегідь приносимо вибачення за можливі хабраэффект)

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.