Комплекс гибридного фаззинга и динамического анализа Sydr + Sydr-fuzz


Скачать сборник технологий

Комплекс гибридного фаззинга и динамического анализа Sydr + Sydr-fuzz

Sydr – инструмент автоматической генерации тестов для сложных программных систем с целью увеличения покрытия кода и обнаружения ошибок. Cтроит математическую модель программы, позволяя фаззеру открывать новые пути выполнения, которые сложно обнаружить классическими методами генетических мутаций. Разработанные методы развивают технологию символьного выполнения, представленную в созданных ранее в ИСП РАН инструментах Avalanche и Anxiety. Sydr-fuzz – инструмент динамического анализа программ для безопасного цикла разработки ПО, который сочетает в себе возможности инструмента динамического символьного выполнения Sydr и современных фаззеров (libFuzzer и AFL++).

Особенности и преимущества

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

  • гибридный фаззинг с помощью Sydr и libFuzzer/AFL++: sydr-fuzz run;
  • минимизация корпуса: sydr-fuzz cmin;
  • поиск ошибок (выхода за границу массива, целочисленного переполнения, деления на ноль и других): sydr-fuzz security;
  • сбор покрытия: sydr-fuzz cov-report;
  • дедупликация, кластеризация и оценка критичности аварийных завершений с использованием Casr: sydr-fuzz casr.

Sydr + Sydr-fuzz — это:

  • Гибридный фаззинг libFuzzer и Sydr, AFL++ и Sydr.
  • Эффективность на уровне мировых аналогов: регулярный бенчмаркинг фаззинга (https://sydr-fuzz.github.io/fuzzbench/).
  • Репозиторий с настроенными проектами под фаззинг: 40+ проектов (270+ фаззинг-целей) в OSS-Sydr-Fuzz (https://github.com/ispras/oss-sydr-fuzz).
  • Достижения: Sydr-fuzz нашел 80+ новых ошибок в 18+ проектах с открытым исходным кодом (https://github.com/ispras/oss-sydr-fuzz/blob/master/TROPHIES.md).
  • Инвертирование на конкретном пути выполнения всех условных переходов, которые зависят от входных данных, для открытия новых путей выполнения программы. Реализована возможность параллельного инвертирования.
  • Предикаты безопасности. Генерация входных данных, приводящих к проявлению дефекта (деление на ноль, разыменование нулевого указателя, выход за границы массива, целочисленное переполнение и др.).
  • Инвертирование косвенных переходов (switch statement). Разработан алгоритм определения таблиц и переходов по вычисляемым адресам.
  • Слайсинг формул. Удаление избыточных формул из предиката пути, которые не влияют на инвертируемый условный переход. Решает проблему недостаточной помеченности, а также ускоряет обработку запросов SMT-решателем.
  • Обработка символьных указателей, зависящих от входных данных. Это позволяет находить критичные ошибки, когда они возникают из-за влияния пользовательского ввода на вычисление индекса массива. Поддержка символьных указателей требует дополнительного моделирования, которым часто пренебрегают аналогичные инструменты.

Системные требования

Поддержка 64-битных ОС семейства Linux: Ubuntu 18.04/20.04/22.04, Astra Linux 1.7, ALT Workstation 10.0 и аналогов.

Опыт внедрения

Sydr и Sydr-fuzz входят в состав программного комплекса ИСП Crusher, который в разной комплектации используется более чем в 70 компаниях и лабораториях, в том числе в ОАО «РусБИТех», Postgres Professional, ООО «Код Безопасности», МВП «СВЕМЕЛ» и др. Используется в Центре доверенного искусственного интеллекта ИСП РАН.

Схема работы Sydr

Схема работы Sydr

Публикации

  1. Vishnyakov A., Fedotov A., Kuts D., Novikov A., Parygina D., Kobrin E., Logunova V., Belecky P., Kurmangaleev Sh. Sydr: Cutting Edge Dynamic Symbolic Execution. 2020 Ivannikov ISPRAS Open Conference (ISPRAS), IEEE, 2020. Скачать презентацию

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

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

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