Институт системного программирования Роcсийской академии наук


Anxtiety. Инструмент обнаружения дефектов в программе методами динамического анализа программ

Динамическое символьное выполнение

Anxtiety. Инструмент обнаружения дефектов в программе методами динамического анализа программ

1. Автоматический поиск ошибок

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

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

Из множества обнаруженных новых путей выполнения выбирается путь с наибольшим приростом покрытия базовых блоков.

В качестве источников входных данных используются файлы, сокеты, аргументы командной строки и переменные окружения.

Обнаруживаются нарушения пользовательских утверждений (asserts), деления на ноль, разыменования нулевого указателя и зацикливания.

Инструментация

Для получения трассы могут быть использованы средства инструментации: DynamoRIO, PIN, Dyninst и Valgrind. Для инструментатора Valgrind разработаны плагины сбора трассы и вычисления покрытия базовых блоков. Для остальных инструментаторов поток инструкций обрабатывается инструментом Triton.

Решатели

Для проверки выполнимости ограничений пути и построения новых входных данных используются SMT-решатели. Поддерживается ряд передовых решателей, таких как STP, Z3, MathSAT и др.

2. Проверка потенциальных дефектов

Методами динамического символьного выполнения возможно проверить потенциальные дефекты в анализируемой программе, обнаруженные методами статического анализа или аналитиком.

Поиск путей

Проверка достижимости потенциально опасной операции с разметкой графа потока управления метками расстояния до потенциально опасной операции при помощи статического анализа исполняемого кода.

Anxtiety. Инструмент обнаружения дефектов в программе методами динамического анализа программ

Направленный анализ

Построение входных данных для программы с целью исполнения программы по пути, приводящему к потенциально опасной операции.

Anxtiety. Инструмент обнаружения дефектов в программе методами динамического анализа программ

3. Достижение определённой инструкции

Динамическое символьное выполнение может быть использовано для построения входных данных программы, подача на вход которых приведёт к исполнению указанной инструкции. Это может быть использовано для помощи фаззеру в целенаправленном прохождении определённых условных переходов.

Фаззинг

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

Anxtiety. Инструмент обнаружения дефектов в программе методами динамического анализа программ

Разработчик/участник

Компиляторные технологии

Перейти к списку всех технологий