
Плагин для Binary Ninja, использующий обратное срезывание переменных в качестве движка для статического анализа распространения меток.
Mole — это плагин для Binary Ninja, предназначенный для выявления интересных путей выполнения в бинарных файлах. Он выполняет обратный срез переменных, используя Binary Ninja's Medium Level Intermediate Language (MLIL) в форме Static Single Assignment (SSA), что является основой для статического анализа помеченных данных.
В Mole под путем понимается поток данных между заданными источником и стоком. Что именно считать «интересным» путем, зависит от целей анализа. Например, при поиске уязвимостей могут рассматриваться пути, где недоверенные входные данные (источники) влияют на чувствительные операции (стоки) потенциально опасным образом.
Ниже перечислены некоторые текущие возможности Mole:
Режим работы: Mole может запускаться как внутри пользовательского интерфейса Binary Ninja, так и в головном режиме. Головной режим особенно полезен для скриптового анализа большого количества бинарных файлов. С другой стороны, использование Mole через UI идеально для детального исследования обнаруженных путей.
Идентификация путей:
.bndb Binary Ninja). Пути также можно экспортировать, например, при выполнении головного анализа на множестве бинарных файлов в файловой системе, чтобы позже импортировать их для более удобного исследования внутри Binary Ninja.Анализ путей с помощью ИИ: Mole может взаимодействовать с локальными или удаленными Large Language Models (LLMs) через OpenAI API (см. Использование). Модели используются для анализа идентифицированных путей и оценки того, соответствует ли данный путь эксплуатируемой уязвимости. LLM пытается классифицировать уязвимость и назначить уровень критичности, что помогает расставить приоритеты для дальнейшего исследования аналитиком. Mole предоставляет базовый набор инструментов, которые LLM может использовать для запроса дополнительной информации об анализируемом бинарном файле.
Межпроцедурный срез переменных: Mole поддерживает срез MLIL-переменных через границы функций — задача, представляющая ряд сложностей. Например, статическое определение эффективных вызывающих субъектов функции часто затруднительно или даже невозможно. В результате реализованный подход является приближением. Хотя он не идеален, он достаточно хорошо работает в широком спектре практических сценариев.
Базовый анализ указателей: В настоящее время Mole реализует упрощенную стратегию отслеживания использования указателей. Как и межпроцедурный срез, этот подход является упрощением с присущими ограничениями (например, невозможность отслеживать глобальные переменные). Тем не менее, он хорошо работает во многих практических случаях, и в будущих версиях планируется его улучшение.
Посмотрите, как Mole раскрывает CVE-2021-4045 — неаутентифицированную уязвимость внедрения команд в IP-камере TP-Link Tapo C200 (нажмите на изображение ниже, чтобы посмотреть на YouTube):
Mole в настоящее время находится в стадии разработки. Если вы обнаружите ошибку, у вас есть полезный новый модульный тест, выявляющий ложноположительный или ложноотрицательный результат, или у вас есть предложение по новой функции, пожалуйста, рассмотрите возможность открыть issue или внести свой вклад через pull request. Также учтите, что текущие модульные тесты были проверены только на бинарных файлах linux-x86_64 и linux-armv7.
Если у вас есть интересная история успеха — например, вы нашли уязвимость с помощью Mole — мы будем рады услышать о ней! Не стесняйтесь поделиться своим опытом с нами.