Комплекс гибридного фаззинга и динамического анализа 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 — это:
- Гибридный фаззинг Sydr и libFuzzer/AFL++. Возможность гибридного фаззинга проектов на C/C++, Rust, Go.
- Фаззинг с помощью Atheris и Jazzer, полный пайплайн динамического анализа Python/Java проектов.
- Эффективность на уровне мировых аналогов: регулярный бенчмаркинг фаззинга (https://sydr-fuzz.github.io/fuzzbench/).
- Репозиторий с настроенными проектами под фаззинг: 70+ проектов (500 фаззинг-целей) в OSS-Sydr-Fuzz (https://github.com/ispras/oss-sydr-fuzz).
- Достижения: Sydr-fuzz нашел 145 новых ошибок в 28 проектах с открытым исходным кодом (https://github.com/ispras/oss-sydr-fuzz/blob/master/TROPHIES.md), 25 ошибок найдено с помощью предикатов безопасности.
- Инвертирование на конкретном пути выполнения всех условных переходов, которые зависят от входных данных, для открытия новых путей выполнения программы. Реализована возможность параллельного инвертирования.
- Предикаты безопасности. Генерация входных данных, приводящих к проявлению дефекта (деление на ноль, разыменование нулевого указателя, выход за границы массива, целочисленное переполнение и др.).
- Инвертирование косвенных переходов (switch statement). Разработан алгоритм определения таблиц и переходов по вычисляемым адресам.
- Слайсинг формул. Удаление избыточных формул из предиката пути, которые не влияют на инвертируемый условный переход. Решает проблему недостаточной помеченности, а также ускоряет обработку запросов SMT-решателем.
- Обработка символьных указателей, зависящих от входных данных. Это позволяет находить критичные ошибки, когда они возникают из-за влияния пользовательского ввода на вычисление индекса массива. Поддержка символьных указателей требует дополнительного моделирования, которым часто пренебрегают аналогичные инструменты.
Системные требования
Запуск на платформах архитектуры x86_64 и Aarch64. Поддержка 64-битных ОС семейства Linux: Ubuntu 18.04/20.04/22.04, Astra 1.7, ALT Workstation 10.0 и аналогов.
Опыт внедрения
Sydr и Sydr-fuzz входят в состав программного комплекса ИСП Crusher, который в разной комплектации используется более чем в 70 компаниях и лабораториях, в том числе в ОАО «РусБИТех», Postgres Professional, ООО «Код Безопасности», МВП «СВЕМЕЛ» и др. Используется в Исследовательском центре доверенного искусственного интеллекта ИСП РАН.
Схема работы Sydr
Публикации
- 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. Скачать презентацию
Разработчик/участник
Перейти к списку всех технологий