Рис. 1. Процедура инкрементального сохранения, на которой основаны цифровые подписи PDF. По результатам тестирования, это самый эффективный способ подделки документов
Теоретически, цифровые подписи PDF надёжно удостоверяют автора документа. Но на практике обработку PDF обычно осуществляет проприетарный софт, который не совсем корректно выполняет проверку. Специалисты Рурского университета в Бохуме (Германия) описали несколько вариантов подделки PDF-документов с цифровой подписью, которые срабатывают в большинстве программ просмотра PDF и сервисов онлайновой проверки.
Защита от всех атак обеспечивается только в единственной программе, да и та работает под Linux.
Структура PDF
Рис. 2. Структура документа PDF
Структура документа PDF изображена на рис. 2. При инкрементальном сохранении изменений в PDF-документ добавляются новые объекты в body, а также новая таблица Xref с описанием новых объектов и новый trailer со ссылками на catalog (см. рис. 1). Каталог — это корневой объект PDF-файла, он определяет структуру документа и может дополнительно определять разрешения на доступ.
Каждый объект начинается с номера объекта и номера версии, который увеличивается при каждом обновлении объекта.
Рис. 2. Структура объекта PDF
Создание подписи
Добавление цифровой подписи в PDF-документ полагается на механизм инкрементального сохранения (см. рис. 1). При добавлении подписи во время инкрементального сохранения в документ добавляется следующий контент:
- новый Catalog с новый параметром Perms, который определяет разрешения на изменение документа; этот параметр ссылается на объект Signature;
- объект Signature (
5 0 obj
) с информацией о криптографических алгоритмах, использованных для хэширования и подписи документа, с параметромContents
, который содержит hex-кодированный блоб PKCS7 — в нём хранятся сертификаты и значение подписи, созданной с помощью приватного ключа, который соответствует открытому ключу в сертификате. ПараметрByteRange
определяет, какие байты PDF-файла используются на входе функции хэширования для вычисления подписи (парыa, b
иc, d
), то есть какая часть файла подписывается;
- новая таблица Xref со ссылкой на новый объект;
- новый Trailer.
На рис. 3 приведена упрощённая схема PDF-файла с цифровой подписью.
Рис. 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.
Рис. 4. Восемь вектором атаки для обхода проверки цифровой подписи
Все эти способы работают в том случае, если программа просмотра PDF неправильно осуществляет проверку цифровой подписи.
Атака на инкрементальное сохранение (ISA)
Этот класс атак заключается в переопределении структуры и контента в добавочной секции документа. Идея в том, что подпись вычисляется на основе диапазона байтов, указанного в
ByteRange
, а добавочная секция не попадает в этот диапазон, как показано на рис. 5.Рис. 5. При добавлении контента в добавочную секцию не нарушается цифровая подпись
Есть несколько способов, как обойти проверку на изменение документа и блокировать показ соответствующего предупреждения в программе просмотра PDF-документов.
Атака на обёртку подписи (SWA)
Наконец, последний класс атак позволяет обойти проверку подписи без инкрементального сохранения, а путём перемещения подписанной части PDF в конец документа и повторного использования указателя
xref
в подписанном Trailer на изменённую таблицу Xref. При этом чтобы избежать обработки перемещённой части, она может быть обёрнута в какой-нибудь посторонний объект, например, stream или dictionary.Рис. 6. Сравнение оригинального и изменённого документов PDF
Эффективность атак
Исследователи проверили эффективность каждого типа атаки в разных программах для просмотра PDF. Не удалось обмануть только Adobe Reader 9 под Linux. Во всех остальных программах проверка подписи обходится одним или несколькими способами.
Не лучше ситуация и с сервисами онлайновой проверки цифровой подписи PDF.
Rohan66
А если документ подписывается сторонней программой (ViPNet CryptoFile)?
amphasis
Если подписывается целиком файл (все его содержимое), то о данной проблеме и речи нет. Уязвимость именно в механизме встраивания ЭЦП в PDF-файл.
Rohan66
Спасибо, понял.
paranoya_prod
Если подписывается весь файл, то эту подпись надо как-то передать и где-то хранить отдельно от файла — такой вариант подвержен подделке.