
Автоматизированные инструменты статического анализа для бинарных программ
Фреймворк статического анализа бинарных файлов Pharos является проектом Института программной инженерии Университета Карнеги-Меллона. Фреймворк предназначен для автоматизированного анализа бинарных программ. Он использует инфраструктуру компилятора ROSE, разработанную Ливерморской национальной лабораторией, для дизассемблирования, анализа потока управления, семантики инструкций и многого другого. Это программное обеспечение выпущено под лицензией BSD.
Текущая версия является существенным обновлением предыдущей и добавляет множество функций, включая улучшения инструмента OOAnalyzer, экспериментальный код анализа путей, улучшения partitioner, многопоточность и многие другие небольшие функции.
Фреймворк Pharos является исследовательским проектом, и код находится в стадии активной разработки. Никаких гарантий пригодности для каких-либо целей не предоставляется. Хотя этот релиз предоставляет инструкции по сборке, модульные тесты и некоторую документацию, предстоит еще много работы. Мы протестировали несколько выбранных конфигураций сборки, но не проводили активного тестирования переносимости исходного кода. Смотрите инструкции по установке для более подробной информации.
Поскольку основная цель выпуска этого кода — обеспечить прозрачность наших исследований и стимулировать обсуждение с другими исследователями статического анализа бинарных файлов, пожалуйста, не стесняйтесь обращаться к Кори Коэну [email protected] с вопросами об этой работе. Возможно, я не смогу ответить своевременно, но я сделаю все возможное.
ApiAnalyzer — это инструмент для поиска последовательностей вызовов API с заданными отношениями данных и управления. Эта возможность предназначена для обнаружения типичных парадигм взаимодействия с операционной системой, таких как открытие файла, запись в него и его закрытие.
OOAnalyzer — это инструмент для анализа и восстановления объектно-ориентированных конструкций. Этот инструмент стал предметом статьи под названием "Using Logic Programming to Recover C++ Classes and Methods from Compiled Executables", опубликованной на конференции ACM по компьютерной безопасности и коммуникациям в 2018 году. Инструмент идентифицирует члены объектов и методы, отслеживая указатели на объекты между функциями в программе. Предыдущая реализация этого инструмента называлась "Objdigger", но она была переименована, чтобы отразить существенную переработку с использованием правил Prolog для восстановления атрибутов объектов. Текущая версия инструмента поддерживает только анализ 32-битных x86 исполняемых файлов, скомпилированных Microsoft Visual C++. Для более подробных инструкций по запуску OOAnalyzer на очень больших исполняемых файлах см. эти заметки.
Раньше в состав дистрибутива Pharos входил плагин, импортировавший информацию об объектно-ориентированном анализе, экспортированную OOAnalayzer, в набор инструментов обратной разработки Ghidra. Чтобы получить эту функциональность сейчас и в будущем, установите плагин Kaiju для Ghidra, который включает функциональность, предоставлявшуюся плагином OOAnalayzer.
CallAnalyzer — это инструмент для отчета о статических параметрах вызовов API в бинарной программе. Он в значительной степени является демонстрацией наших текущих возможностей по анализу соглашений о вызовах, параметров и определению типов, хотя также предоставляет полезный анализ кода в программе.
FN2Yara — это инструмент для создания сигнатур YARA для сопоставления функций в исполняемой программе. Программы, которые имеют значительное количество общих функций, скорее всего, имеют общее поведение.
FN2Hash — это инструмент для создания различных хешей и других описательных свойств для функций в исполняемой программе. Как и FN2Yara, его можно использовать для поддержки анализа сходства бинарных файлов или для предоставления признаков для алгоритмов машинного обучения.
DumpMASM — это инструмент для дампа листингов дизассемблера из исполняемого файла с использованием фреймворка Pharos в том же стиле, что и другие инструменты. Он не поддерживается активно, и вам следует рассмотреть возможность использования стандартного recursiveDisassemble из ROSE http://rosecompiler.org/ROSE_HTML_Reference/rosetools.html.