Формат файлов PDF, согласно спецификациям, поддерживает шифрование. В нем используется алгоритм AES с режимом Cipher Block Chaining. Так что в теории человек или компания, защитившие файл, могут быть уверены, что содержимое документа станет известно кому-либо только в том случае, если он знает пароль.
В продолжение исследования безопасности PDF, о котором мы уже писали, исследователь Фабиан Айзинг из Мюнстерского университета прикладных наук решил проверить, насколько надежна имплементация шифрования в этом формате. И пришел к неутешительным выводам.
В теории зашифрованные PDF-файлы нужны для передачи данных через незащищенный канал или канал, которому нельзя доверять. Представьте, что кто-то загружает файл в облачное хранилище, доступ к которому имеют многие. Исследователь решил найти способ модификации исходного файла таким образом, чтобы при вводе пароля информация отправлялась третьей стороне, но при этом получатель не заметил изменений в файле.
Кто и для чего использует зашифрованные PDF на практике?
Прежде чем приступать к анализу, исследователи задались вопросом, а применяет ли кто-нибудь зашифрованные PDF на практике. Оказалось, что да. Вот что они нашли навскидку:
- Некоторые банки таким образом обеспечивают конфиденциальность документов, пересылаемых клиентам.
- Есть ряд плагинов, которые встраивают в почтовые клиенты возможность отправить письмо в виде зашифрованного PDF.
- Некоторые подключаемые к интернету МФУ позволяют отправлять отсканированные документы непосредственно на почту и при выборе опции «в зашифрованном виде» применяют именно PDF, защищенные паролем.
- Медицинские диагностические приборы также используют зашифрованные PDF для сохранения результатов исследований.
- Кроме того, некоторые государственные учреждения принимают входящие документы в виде шифрованных PDF. Например, американский департамент правосудия поступает так с исковыми заявлениями.
Прямая эксфильтрация (атака типа direct exfiltration)
Первый вариант атаки исследователи называют «взлом шифрования в обход криптографии». Изучая документацию формата, они выяснили, что в PDF-файлах шифруется только само содержимое — объекты типов string и stream. Остальные объекты, отвечающие за структуру документа, остаются незащищенными. То есть при желании можно узнать количество и размер страниц, объектов, ссылок. А эту информацию, по большому счету, не следовало бы оставлять потенциальным злоумышленникам.
Исследователи задумались, нельзя ли добавить в материал собственный контент. Они подробнее изучили документацию стандарта и нашли любопытный момент. Оказывается, в PDF 1.5 была добавлена функция гранулярного контроля над шифрованием контента. Иными словами, он допускает частичное шифрование – можно, например, зашифровать только вышеупомянутые объекты типа string или stream. А значит, часть контента может быть незашифрованной. Более того, проверка целостности не производится.
Это позволяет добавить в зашифрованный документ что-то постороннее. В том числе функцию submit-form action, которая позволят встроить в PDF-файл форму, отправляющую данные на сторонний сайт. При желании она активируется при открытии документа (то есть сразу после введения пароля). Так вот, в качестве отправляемых данных можно указать весь зашифрованный контент файла. Так что легитимный получатель вводит пароль, содержимое расшифровывается, а потом вся информация отправляется на сторонний сайт.
Впрочем, это не единственный метод эксфильтрации — при необходимости можно встроить простое обращение к сайту злоумышленников, добавив в URL все содержимое файла. Или использовать JavaScript.
Разумеется, при обращении к сайту некоторые программы для чтения уточняют, уверены ли вы, что это достойный доверия сайт. Но, во-первых, не все приложения это делают, а во-вторых, далеко не каждый пользователь задумается над этим вопросом.
Криптографическая атака (Malleability attack)
Второй недостаток формата — использование известного изъяна в режиме сцепления блоков шифрования (Cipher Block Chaining, CBC) без контроля целостности. Его суть заключается в том, что если часть зашифрованной информации известна злоумышленнику, то он может изменить содержимое одного из блоков.
Согласно спецификациям формата PDF, часть шифрованных данных — 12 байт различных разрешений (раздел /Perm), которые шифруются тем же AES-ключом, что и остальной документ. Это сделано для того, чтобы злоумышленники не пытались самовольно изменять их (например, выдавая читателю возможность редактировать файл). Но в результате получается, что атакующему заранее известна часть незашифрованных данных.
В итоге он может добавить в защищенный файл все тот же механизм эксфильтрации данных, который вышлет содержимое файла на сторонний сайт.
Итог
Исследователи проверили свои методы на 23 разных программах для чтения PDF и четырех браузерах. И обнаружили, что каждая из программ хотя бы частично уязвима к одной из этих атак.
К сожалению, справиться с этой проблемой непросто. Все каналы эксфильтрации данных перекрыть не удастся — это сделает использование формата бессмысленным. Исследователи связались с разработчиками программ и сообщили о существующей проблеме. Некоторые компании, в частности Apple, постарались сделать более заметным предупреждение о том, что файл обращается к стороннему сайту. Другие решили прекратить попытки «починить то, что починить невозможно». По большому счету, тут спасет только изменение стандарта.
Единственное, что мы можем порекомендовать в данной ситуации — использовать альтернативные методы передачи конфиденциальных данных. Например, зашифрованные контейнеры, которые можно создавать при помощи наших решений.