PDF и XML — очень гибкие форматы. Гибкость дает удобство, ради которого приходится жертвовать безопасностью. В обоих форматах каждый год находят множество уязвимостей, связанных как с криптографией, так и со структурой самого файла. И вот в очередной раз доказано: даже электронная подпись не дает абсолютной уверенности, что в недрах электронного документа кто‑то не покопался шаловливыми руками.
warning
Эта публикация представлена в информационно‑ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Экскурс в PDF
PDF, или Portable Document Format, — это, как видно из названия, переносимый электронный документ. Этим форматом пользуются во многих областях, прежде всего в бизнесе. PDF был разработан компанией Adobe еще в далеком 2005 году. Вплоть до 2020 года формат претерпевал изменения четыре раза: в него добавлялись встроенные файлы, ссылки, скрипты и разного рода функции. Тот формат, который мы знаем на момент написания этой статьи (PDF 2.0), вышел не так давно — в конце 2020 года вместе с его спецификацией ISO 32000-2.
info
PDF включает в себя часть функций языка PostScript. Можно транслировать PDF в PostScript. Есть принтеры, которые умеют самостоятельно интерпретировать PDF в PostScript.
В первом приближении структура самого документа PDF не очень сложная. Файл состоит из следующих элементов:
- заголовок (header);
- тело файла (body);
- таблица перекрестных ссылок (cross-reference table);
- блок поиска таблиц объектов и ссылок (trailer).
Заголовок — это всегда самая первая строка файла, которая определяет номер спецификации.
Тело содержит ссылки на объекты. К ним относятся страницы, изображения, шрифты. Комментарии могут располагаться во всем PDF-файле. Их синтаксис совпадает с синтаксисом комментариев в PostScript, начинаются они с символа %
и заканчиваются символом конца строки.
В таблице хранится информация об объектах в файле: эта таблица состоит из разделов, количество которых зависит от числа объектов, добавленных в файл. Trailer помогает программе, открывающей файл, находить таблицу перекрестных ссылок и специальные объекты. К слову, приложения должны читать PDF-файл с конца.
Чем дальше в лес, тем больше дров: за структурой формата «прячется» так называемая структура публикации.
Углубляться в эти дебри мы не будем, достаточно знать, что текст внутри документа сжат и во внутренностях файла его увидеть не получится. Вот как, например, выглядит глава из книги в формате PDF, если попытаться просмотреть ее как простой текстовый файл.
Атака
Сначала давай разберемся с уязвимостью. Представим, что у нас есть Алиса (подписывает документ) и Боб (получает подписанный Алисой документ) и, естественно, сам документ. Алиса своим сертификатом подписала документ и отправила его Бобу. Боб уверен в том, что документ подлинный, так как он с подписью. Но вот что будет, если документ готовила не Алиса (она только подписала) и отправляла тоже не она? Атака с подменой содержимого подписанного документа обычно происходит в три этапа.
- Хакер готовит документ, в котором присутствует так называемое теневое содержимое. Это можно сравнить с пустым листом в сшитом договоре, куда можно добавить фрагмент после подписания.
- Хакер отправляет этот документ Алисе. Алиса подписывает его и отправляет обратно хакеру. Хакер меняет содержимое документа так, чтобы не сломать подпись.
- Хакер отправляет измененный документ Бобу. Боб уверен в том, что документ настоящий, и обрабатывает его.
О существовании этой уязвимости упоминалось еще в 2012 году, когда PDF соответствовал спецификации ISO 19005-3. Однако после выхода новой версии формата хакеры провели очередное исследование и привлекли внимание компаний, разрабатывающих программное обеспечение для работы с PDF.
Есть три способа изменить содержимое уже подписанного документа: скрытие, замена, а также скрытие и замена.
Скрытие
Результатом этой атаки будет сокрытие какого‑либо контента за видимым содержимым файла. Как только хакер получает подписанный Алисой документ, он манипулирует документом таким образом, что видимый слой больше не отображается в приложении просмотра. Причем теперь уже ранее невидимые объекты становятся видны в PDF-файле.
Замена
Основная идея варианта «Замена» — добавить в подписанный документ новые объекты, которые считаются безвредными, но напрямую влияют на представление содержимого. Например, определение шрифтов напрямую не меняет содержимое. Однако это влияет на вид отображаемого контента и делает возможной замену цифр или символов.
Эта атака нацелена на интерактивные формы. Формы поддерживают различные маски ввода (например, текстовые поля, текстовые области, переключатели и кнопки выбора), где пользователи динамически вводят новое содержимое и сохраняют его в документе. Формы также могут иметь значения по умолчанию, которые при необходимости можно изменить.
Хакер готовит файл, в котором определяется шрифт, и его описание включается в документ. После подписания документа злоумышленники добавляют новое описание шрифта и перезаписывают предыдущее. Поскольку определение новых шрифтов считается безобидным, приложения, проверяющие подпись, не показывают никаких предупреждений о внесенных изменениях.
Скрытие и замена
В варианте атаки «Скрытие и замена» PDF-файл содержит второй скрытый документ с другим содержимым. Так как Алиса не может увидеть скрытое содержимое, она подписывает документ. После подписания хакер получает файл и добавляет только новую таблицу внешних ссылок и трейлер. В таблице внешних ссылок происходит лишь одно изменение: ссылка на описание.
Другими словами, хакер создает файл PDF, содержащий два объекта с одним и тем же идентификатором, но разным содержанием. Поскольку включение таблицы xref
, указывающей на уже определенный объект в подписанной области, считается безвредным, никаких предупреждений о внесенных хакером изменениях не поступает, и проверка подписи проходит успешно. Тем не менее Боб и Алиса видят разный контент в одном и том же файле.
Этот вариант атаки наиболее мощный, так как позволяет изменить все содержимое документа. Хакер может создать теневой документ, влияющий на отображение каждой страницы или даже на общее количество страниц, а также на каждый содержащийся в файле объект.
В то же время этот вариант самый «шаткий», так как при подписании могут быть удалены неиспользуемые объекты, в том числе — теневые. Кроме того, сканер безопасности может обнаружить большое количество лишних незадействованных объектов и выдать предупреждение.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»