Несколько способов подделки PDF с цифровой подписью

ychsgjw_-hu2whxmpwjrpr6pvc8.png


Рис. 1. Процедура инкрементального сохранения, на которой основаны цифровые подписи PDF. По результатам тестирования, это самый эффективный способ подделки документов

Теоретически, цифровые подписи PDF надёжно удостоверяют автора документа. Но на практике обработку PDF обычно осуществляет проприетарный софт, который не совсем корректно выполняет проверку. Специалисты Рурского университета в Бохуме (Германия) описали несколько вариантов подделки PDF-документов с цифровой подписью, которые срабатывают в большинстве программ просмотра PDF и сервисов онлайновой проверки.

Защита от всех атак обеспечивается только в единственной программе, да и та работает под Linux.


xckujf4zmbslwbpmnveyfermbrm.png


Рис. 2. Структура документа PDF

Структура документа PDF изображена на рис. 2. При инкрементальном сохранении изменений в PDF-документ добавляются новые объекты в body, а также новая таблица Xref с описанием новых объектов и новый trailer со ссылками на catalog (см. рис. 1). Каталог — это корневой объект PDF-файла, он определяет структуру документа и может дополнительно определять разрешения на доступ.

Каждый объект начинается с номера объекта и номера версии, который увеличивается при каждом обновлении объекта.

ggvco2cdmhv9jmgjmmvvhxxq0bm.png


Рис. 2. Структура объекта PDF
Добавление цифровой подписи в PDF-документ полагается на механизм инкрементального сохранения (см. рис. 1). При добавлении подписи во время инкрементального сохранения в документ добавляется следующий контент:

  • новый Catalog с новый параметром Perms, который определяет разрешения на изменение документа; этот параметр ссылается на объект Signature;
  • объект Signature (5 0 obj) с информацией о криптографических алгоритмах, использованных для хэширования и подписи документа, с параметром Contents, который содержит hex-кодированный блоб PKCS7 — в нём хранятся сертификаты и значение подписи, созданной с помощью приватного ключа, который соответствует открытому ключу в сертификате. Параметр ByteRange определяет, какие байты PDF-файла используются на входе функции хэширования для вычисления подписи (пары a, b и c, d), то есть какая часть файла подписывается;
  • новая таблица Xref со ссылкой на новый объект;
  • новый Trailer.


На рис. 3 приведена упрощённая схема PDF-файла с цифровой подписью.

ysodkdjzw2dxabc-cuojkqh87gm.png


Рис. 3. Упрощённая схема PDF-файла с цифровой подписью

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

Проверку подписи осуществляет приложение, в котором открывается PDF-документ. Оно сразу извлекает подпись из PDF и применяет криптографические операции для проверки её корректности, а затем проверят, можно ли доверять сертификату X.509, ключи которого использовались для подписи.

Что характерно, все приложения для чтения PDF не доверяют встроенному в операционную систему хранилищу ключей. Как и браузер Firefox, они распространяют собственное хранилища ключей и обычно позволяют пользователю указать хранилище с доверенными сертификатами. Эта функция позволяет доверять только определённым сертификатам, например, от собственного центра сертификации.


Исследователи описывают три способа подделки с изменением содержимого подписанных PDF-документов.

  • универсальная подделка подписи (Universal Signature Forgery, USF);
  • атака на инкрементальное сохранение (Incremental Saving Attack, ISA);
  • атака на обёртку подписи (Signature Wrapping Attack, SWA).


Универсальная подделка подписи (USF)


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

Исследователи сформулировали 18 векторов атаки USF, восемь из них показаны на рис. 4.

dntrznbsu640jrr7_cz4qvgjt5q.png


Рис. 4. Восемь вектором атаки для обхода проверки цифровой подписи

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

Атака на инкрементальное сохранение (ISA)


Этот класс атак заключается в переопределении структуры и контента в добавочной секции документа. Идея в том, что подпись вычисляется на основе диапазона байтов, указанного в ByteRange, а добавочная секция не попадает в этот диапазон, как показано на рис. 5.

ts4_vfgi_7hpi-fcvakarbbknf0.png


Рис. 5. При добавлении контента в добавочную секцию не нарушается цифровая подпись

Есть несколько способов, как обойти проверку на изменение документа и блокировать показ соответствующего предупреждения в программе просмотра PDF-документов.

Атака на обёртку подписи (SWA)


Наконец, последний класс атак позволяет обойти проверку подписи без инкрементального сохранения, а путём перемещения подписанной части PDF в конец документа и повторного использования указателя xref в подписанном Trailer на изменённую таблицу Xref. При этом чтобы избежать обработки перемещённой части, она может быть обёрнута в какой-нибудь посторонний объект, например, stream или dictionary.

0a-c0u41efrol7k8ilighzhdmp0.png


Рис. 6. Сравнение оригинального и изменённого документов PDF
Исследователи проверили эффективность каждого типа атаки в разных программах для просмотра PDF. Не удалось обмануть только Adobe Reader 9 под Linux. Во всех остальных программах проверка подписи обходится одним или несколькими способами.

ttc5k7alzx8w75elkxwj0fk15uo.png

Не лучше ситуация и с сервисами онлайновой проверки цифровой подписи PDF.

kw4bgwwg7rpbtu7ie5bjaa1lklk.png

© Habrahabr.ru