RSS Zero Day Initiative - Блог
Подписаться
MindshaRE: Использование API Binary Ninja для обнаружения потенциальных уязвимостей Use-After-Free
Баги использования после освобождения (use-after-free), являющиеся типом повреждения памяти, сложны для обнаружения статически. Этот пост исследует использование MLIL от Binary Ninja для создания графа потока данных, который отслеживает взаимодействия с выделением памяти. Граф представляет области памяти как узлы и сохранения указателей как ребра, используя отслеживаемые выделения, кадры стека, динамическую память и глобальные узлы памяти. Переменные SSA сопоставляются с узлами, а смещения хранятся для представления арифметики указателей. Операции сохранения и загрузки памяти создают ребра графа, предполагая предварительную инициализацию для загрузок вне области видимости функции. Информация распространяется по графу на основе присваиваний переменных SSA и вычислений смещений во время арифметики указателей. Вызываемые функции анализируются, если аргументы имеют сопоставления или смещения стека удовлетворяют определенным условиям, управляя рекурсией для предотвращения бесконечных циклов. После генерации графа инструкции, зависящие от отслеживаемого узла выделения, регистрируются. Этот анализ помогает выявить потенциальные уязвимости UAF посредством контекстно-независимой достижимости. Подход признает присущие ошибки классификации в статическом анализе, но подчеркивает адаптируемые примитивы для других уязвимостей.