GUI для исследования внутренностей PDF
Как известно, PDF-файлы часто используются как контейнеры для вирусов и эксплоитов. Они применяются в фишинговых кампаниях и социальной инженерии, когда жертве присылают для просмотра «безобидный документ» в формате PDF, а тот запускает на исполнение вредоносный код через незакрытую уязвимость в браузере или PDF-ридере.
Перед открытием документа всегда желательно посмотреть, что находится внутри. Для этих целей существуют парсеры, которые разбирают PDF. Например, Interactive PDF Analysis (IPA, на скриншоте вверху) и другие.
Даже если перед нами чистый PDF, иногда нужно изучить содержимое и извлечь полезные ресурсы в нетронутом виде — например, оригинальные изображения в JPG.
С помощью таких инструментов можно извлечь из PDF-файлов ресурсы и полезную нагрузку, понять взаимосвязи между объектами и сделать вывод о внутренних элементах.
Interactive PDF Analysis (IPA)
Для создания IPA использовалась Rust-библиотека pdf-rs для парсинга PDF, а также библиотека egui для графических интерфейсов. Источником вдохновения автор называет замечательную программу PDF Dissector от компании Zynamics, которую мы использовали ещё 10−15 лет назад. Новые версии уже не выпускаются, продукт заброшен, а исходный код так и не опубликован:
PDF Dissector
Несколько десятилетий назад основными инструментами для реверс-инжиниринга считались утилиты Дидье Стивенса, в том числе PDF Tools. Вот как работает парсер pdf-parser.py
из того набора:
Хотя они стали стандартом де-факто, но для их использования из консоли приходилось запоминать большую комбинацию флагов и сообщать номера различных объектов.
Шаблон PDFTemplate.bt
для редактирования файлов PDF в текстовом редакторе 010 Editor
Поэтому продолжаются попытки улучшить и упростить парсеры PDF — создать такие же мощные инструменты, только с графическим интерфейсом.
Графика даёт дополнительные возможности для анализа, например, наглядно показывает взаимосвязи между объектами, на какие страницы они ссылаются и типы объектов (изображения, шрифты, цвета, метаданные). Через GUI проще экспортировать содержимое потоков и просматривать содержимое словарей в виде таблиц.
Функции IPA
- Извлечение и анализ метаданных: автор, дата создания, история изменений и другие важные сведения.
- Изучение структуры PDF-документа, анализ объектов (текст, изображения и шрифты) и страниц, их взаимосвязь и расположение.
- Визуализация ссылок на другие объекты или места в файле (изображения, шрифты, определённые разделы)
- Извлечение и сохранение потоков необработанных данных из PDF в указанном месте, что позволяет детально изучить и проанализировать бинарный контент.
- Извлечение полезной информации из повреждённого или частично повреждённого файла, даже если традиционные методы парсинга не работают.
Программа компилируется из исходного кода. Для этого нужно клонировать репозиторий и запустить cargo
:
git clone https://github.com/seekbytes/IPA
cd IPA
cargo b --release
В системе должен быть установлен Rust, иных зависимостей нет.
Текущие ограничения
- мало эвристик (автор просит открывать тикеты или писать ему по почте, если есть идеи);
- нет поддержки зашифрованных PDF (даже если вы знаете пароль, программа падает при попытке открыть такой файл);
- не все файлы PDF открываются из-за строгих требований
pdf-rs
.
Другие инструменты
Вот некоторые другие похожие инструменты для просмотра внутреннего содержимого файлов PDF (исходные изображения и другие объекты):