Как известно, PDF-файлы часто используются как контейнеры для вирусов и эксплоитов. Они применяются в фишинговых кампаниях и социальной инженерии, когда жертве присылают для просмотра «безобидный документ» в формате PDF, а тот запускает на исполнение вредоносный код через незакрытую уязвимость в браузере или PDF-ридере.
Перед открытием документа всегда желательно посмотреть, что находится внутри. Для этих целей существуют парсеры, которые разбирают PDF. Например, Interactive PDF Analysis (IPA, на скриншоте вверху) и другие.
Даже если перед нами чистый PDF, иногда нужно изучить содержимое и извлечь полезные ресурсы в нетронутом виде — например, оригинальные изображения в JPG.
С помощью таких инструментов можно извлечь из PDF-файлов ресурсы и полезную нагрузку, понять взаимосвязи между объектами и сделать вывод о внутренних элементах.
Несколько десятилетий назад основными инструментами для реверс-инжиниринга считались утилиты Дидье Стивенса, в том числе PDF Tools. Вот как работает парсер pdf-parser.py из того набора:
Хотя они стали стандартом де-факто, но для их использования из консоли приходилось запоминать большую комбинацию флагов и сообщать номера различных объектов.
Поэтому продолжаются попытки улучшить и упростить парсеры PDF — создать такие же мощные инструменты, только с графическим интерфейсом.
Графика даёт дополнительные возможности для анализа, например, наглядно показывает взаимосвязи между объектами, на какие страницы они ссылаются и типы объектов (изображения, шрифты, цвета, метаданные). Через GUI проще экспортировать содержимое потоков и просматривать содержимое словарей в виде таблиц.
Программа компилируется из исходного кода. Для этого нужно клонировать репозиторий и запустить cargo:
В системе должен быть установлен Rust, иных зависимостей нет.
Перед открытием документа всегда желательно посмотреть, что находится внутри. Для этих целей существуют парсеры, которые разбирают PDF. Например, Interactive PDF Analysis (IPA, на скриншоте вверху) и другие.
Даже если перед нами чистый PDF, иногда нужно изучить содержимое и извлечь полезные ресурсы в нетронутом виде — например, оригинальные изображения в JPG.
С помощью таких инструментов можно извлечь из PDF-файлов ресурсы и полезную нагрузку, понять взаимосвязи между объектами и сделать вывод о внутренних элементах.
Interactive PDF Analysis (IPA)
Для создания IPA использовалась Rust-библиотека pdf-rs для парсинга PDF, а также библиотека egui для графических интерфейсов. Источником вдохновения автор называет замечательную программу PDF Dissector от компании Zynamics, которую мы использовали ещё 10−15 лет назад. Новые версии уже не выпускаются, продукт заброшен, а исходный код так и не опубликован:Несколько десятилетий назад основными инструментами для реверс-инжиниринга считались утилиты Дидье Стивенса, в том числе PDF Tools. Вот как работает парсер pdf-parser.py из того набора:
Хотя они стали стандартом де-факто, но для их использования из консоли приходилось запоминать большую комбинацию флагов и сообщать номера различных объектов.
Поэтому продолжаются попытки улучшить и упростить парсеры PDF — создать такие же мощные инструменты, только с графическим интерфейсом.
Графика даёт дополнительные возможности для анализа, например, наглядно показывает взаимосвязи между объектами, на какие страницы они ссылаются и типы объектов (изображения, шрифты, цвета, метаданные). Через GUI проще экспортировать содержимое потоков и просматривать содержимое словарей в виде таблиц.
Функции IPA
- Извлечение и анализ метаданных: автор, дата создания, история изменений и другие важные сведения.
- Изучение структуры PDF-документа, анализ объектов (текст, изображения и шрифты) и страниц, их взаимосвязь и расположение.
- Визуализация ссылок на другие объекты или места в файле (изображения, шрифты, определённые разделы)
- Извлечение и сохранение потоков необработанных данных из PDF в указанном месте, что позволяет детально изучить и проанализировать бинарный контент.
- Извлечение полезной информации из повреждённого или частично повреждённого файла, даже если традиционные методы парсинга не работают.
Программа компилируется из исходного кода. Для этого нужно клонировать репозиторий и запустить cargo:
Код:
git clone https://github.com/seekbytes/IPA
cd IPA
cargo b --release
В системе должен быть установлен Rust, иных зависимостей нет.
Текущие ограничения
- мало эвристик (автор просит открывать тикеты или писать ему по почте, если есть идеи);
- нет поддержки зашифрованных PDF (даже если вы знаете пароль, программа падает при попытке открыть такой файл);
- не все файлы PDF открываются из-за строгих требований pdf-rs.
Другие инструменты
Вот некоторые другие похожие инструменты для просмотра внутреннего содержимого файлов PDF (исходные изображения и другие объекты):- PDF debugger.
- Питоновская библиотека PDFSyntax.
Использование:
Код:python3 -m pdfsyntax inspect foo.pdf > output.html
- Polyfile, питоновская реализация libmagic.
Использование:
Код:polyfile --html output.html foo.pdf
- PDFViewer. Есть онлайн-демо, куда можно загрузить свой файл PDF для проверки.
- PDF Inspector, работает в браузере
- PDFedit: GUI-редактор и мультиплатформенная библиотека для работы с документами PDF.
- iText RUPS (Reading and Updating PDF Syntax).
- PDFXplorer.