November 10, 2018

Что скрывает PDF

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

Информационные метаданные

Начиная с PDF 1.0 существует стандартизированный набор значений, которые могут быть дополнительно добавлены в документ. Файловые менеджеры используют эти значения, чтобы улучшить поиск по документам. Они включают в себя:

  • Автор
  • Дата создания
  • Создатель
  • Производитель (Producer)

В PDF 1.1 этот набор расширили, включив дополнительные данные, которые помогают найти документы:

  • Название
  • Тема
  • Ключевые слова
  • Дата редактирования (ModDate)

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

Дополнительные метаданные

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

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

<xmp:CreateDate>1851-08-18</xmp:CreateDate>
<xmp:CreatorTool>Ink and Paper</xmp:CreatorTool>
<dc:creator>
    <rdf:Seq>
        <rdf:li>Nick Winder</rdf:li>
    </rdf:Seq>
</dc:creator>
<dc:title>
    <rdf:Alt>
        <rdf:li xml:lang="x-default">My Amazing PDF</rdf:li>
    </rdf:Alt>
</dc:title>

Как несложно понять, эта информация неоценима при попытке определить историю документа или попытке внедрить другую информацию. PSPDFKit для iOS и Android поддерживает чтение и редактирование метаданных.

Метаданные объектов

Потоки метаданных не ограничиваются только документами; метаданные также можно назначить любому объекту в документе. Например, потоку со встроенным изображением. Чтобы усложнить ситуацию, вспомогательные метаданные также могут храниться в самом потоке. Если пойти ещё дальше, мы можем встроить PDF в метаданные потока изображений, тем самым достигнув бесконечной рекурсии! Поэтому в следующий раз, когда будете проверять метаданные на наличие информации, помните, что вам, возможно, придётся пройти несколько уровней, чтобы найти информацию, которую вы ищете.

Дополнительное сохранение/обновление

В стандарте PDF есть концепция дополнительного сохранения, которую многие приложения, включая PSPDFKit, реализуют для ускорения сохранения. Короче говоря, этот метод добавляет дополнительную информацию в конец документа, и старые объекты, на которые больше нет ссылок, останутся висеть там. Это здорово, когда вы изменяете элементы документа на лету и не хотите ждать длительного процесса сохранения, или, например, для функции автоматического сохранения, где процесс выполняется в фоновом потоке, а мы хотим использовать минимум ресурсов.

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

Комментарии PDF

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

Один большой словарь!

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

Вывод

В этой статье перечислены некоторые способы проникновения метаданных в документ без вашего ведома. Есть и другие факторы, которые необходимо учитывать, такие как поддержка JavaScript в PDF. С JavaScript варианты вообще бесконечны. В документах также могут храниться скрытые объекты, которые обычно анализируются, но не отображаются. Это хороший способ внедрения некоторого типа информации в парсер. PDF — очень обширный стандарт, поэтому всегда стоит знать, каким программным обеспечением для чтения PDF вы пользуетесь, и доверять ему.

by @it_ha