- PVSM.RU - https://www.pvsm.ru -

GUI для исследования внутренностей PDF

GUI для исследования внутренностей PDF - 1

Как известно, PDF-файлы часто используются как контейнеры для вирусов и эксплоитов. Они применяются в фишинговых кампаниях и социальной инженерии, когда жертве присылают для просмотра «безобидный документ» в формате PDF, а тот запускает на исполнение вредоносный код через незакрытую уязвимость в браузере или PDF-ридере.

Перед открытием документа всегда желательно посмотреть, что находится внутри. Для этих целей существуют парсеры, которые разбирают PDF. Например, Interactive PDF Analysis [1] (IPA, на скриншоте вверху) и другие.

Даже если перед нами чистый PDF, иногда нужно изучить содержимое и извлечь полезные ресурсы в нетронутом виде — например, оригинальные изображения в JPG.

С помощью таких инструментов можно извлечь из PDF-файлов ресурсы и полезную нагрузку, понять взаимосвязи между объектами и сделать вывод о внутренних элементах.

Interactive PDF Analysis (IPA)

Для создания IPA использовалась Rust-библиотека pdf-rs [2] для парсинга PDF, а также библиотека egui [3] для графических интерфейсов. Источником вдохновения автор называет замечательную программу PDF Dissector [4] от компании Zynamics, которую мы использовали ещё 10−15 лет назад. Новые версии уже не выпускаются, продукт заброшен, а исходный код так и не опубликован:

GUI для исследования внутренностей PDF - 2
PDF Dissector

Несколько десятилетий назад основными инструментами для реверс-инжиниринга считались утилиты Дидье Стивенса [5], в том числе PDF Tools [6]. Вот как работает парсер pdf-parser.py из того набора:

GUI для исследования внутренностей PDF - 3

Хотя они стали стандартом де-факто, но для их использования из консоли приходилось запоминать большую комбинацию флагов и сообщать номера различных объектов.

GUI для исследования внутренностей PDF - 4
Шаблон PDFTemplate.bt для редактирования файлов PDF в текстовом редакторе 010 Editor [7]

Поэтому продолжаются попытки улучшить и упростить парсеры PDF — создать такие же мощные инструменты, только с графическим интерфейсом.

Графика даёт дополнительные возможности для анализа, например, наглядно показывает взаимосвязи между объектами, на какие страницы они ссылаются и типы объектов (изображения, шрифты, цвета, метаданные). Через GUI проще экспортировать содержимое потоков и просматривать содержимое словарей в виде таблиц.

Функции IPA

  • Извлечение и анализ метаданных: автор, дата создания, история изменений и другие важные сведения.
  • Изучение структуры PDF-документа, анализ объектов (текст, изображения и шрифты) и страниц, их взаимосвязь и расположение.
  • Визуализация ссылок на другие объекты или места в файле (изображения, шрифты, определённые разделы)
  • Извлечение и сохранение потоков необработанных данных из PDF в указанном месте, что позволяет детально изучить и проанализировать бинарный контент.
  • Извлечение полезной информации из повреждённого или частично повреждённого файла, даже если традиционные методы парсинга не работают.

Программа компилируется из исходного кода. Для этого нужно клонировать репозиторий и запустить cargo:

git clone https://github.com/seekbytes/IPA

cd IPA

cargo b --release

В системе должен быть установлен Rust, иных зависимостей нет.

Текущие ограничения

  • мало эвристик (автор просит открывать тикеты или писать ему по почте, если есть идеи);
  • нет поддержки зашифрованных PDF (даже если вы знаете пароль, программа падает при попытке открыть такой файл);
  • не все файлы PDF открываются из-за строгих требований pdf-rs.

Другие инструменты

Вот некоторые другие похожие инструменты для просмотра внутреннего содержимого файлов PDF (исходные изображения и другие объекты):

Автор: GlobalSign_admin

Источник [19]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/pdf/405137

Ссылки в тексте:

[1] Interactive PDF Analysis: https://github.com/seekbytes/IPA

[2] pdf-rs: https://github.com/pdf-rs/pdf

[3] egui: https://github.com/emilk/egui

[4] PDF Dissector: https://web.archive.org/web/20110902114238/http://www.zynamics.com/dissector.html

[5] утилиты Дидье Стивенса: https://github.com/DidierStevens/DidierStevensSuite

[6] PDF Tools: https://blog.didierstevens.com/programs/pdf-tools/

[7] 010 Editor: http://www.sweetscape.com/010editor/

[8] PDF debugger: https://pdf.hyzyla.dev/

[9] PDFSyntax: https://github.com/desgeeko/pdfsyntax

[10] Polyfile: https://github.com/trailofbits/polyfile

[11] реализация libmagic: https://github.com/trailofbits/polyfile?tab=readme-ov-file#libmagic-implementation

[12] PDFViewer: https://www.reportmill.com/snaptea/PDFViewer/

[13] онлайн-демо: https://www.reportmill.com/snaptea/PDFViewer/pviewer.html

[14] PDF Inspector: https://sourceforge.net/projects/pdfinspector/

[15] в браузере: https://reportmill.com/snaptea/PDFViewer/pviewer.html

[16] PDFedit: http://pdfedit.cz/en/index.html

[17] iText RUPS: https://github.com/itext/i7j-rups

[18] PDFXplorer: https://www.o2sol.com/pdfxplorer/overview.htm

[19] Источник: https://habr.com/ru/companies/globalsign/articles/866806/?utm_campaign=866806&utm_source=habrahabr&utm_medium=rss