Sydr

Краткое описание программного обеспечения

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

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

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

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

Sydr-fuzz — это:

  • Гибридный фаззинг Sydr и libFuzzer/AFL++ проектов на C/C++, Rust, Go.
  • Автоматизация фаззинга и всего пайплайна динамического анализа Python/Java/JavaScript/C# проектов с помощью инструментов Atheris/Jazzer/Jazzer.jz/SharpFuzz.
  • Эффективность на уровне мировых аналогов: регулярный бенчмаркинг фаззинга (https://sydr-fuzz.github.io/fuzzbench/).
  • Репозиторий с настроенными проектами под фаззинг: 84 проекта (более 400 уникальных фаззинг-целей) в OSS-Sydr-Fuzz (https://github.com/ispras/oss-sydr-fuzz).
  • Достижения: Sydr-fuzz нашел 172 новых ошибок в 31 проекте с открытым исходным кодом (https://github.com/ispras/oss-sydr-fuzz/blob/master/TROPHIES.md), 30 ошибок найдено с помощью предикатов безопасности.
  • Эффективное символьное выполнение программ (concolic execution). Параллельное инвертирование и кэширование условных переходов, слайсинг формул из предиката пути, эвристика оптимистичных решений, высокоуровневое моделирование стандартных функций и использование производительного SMT-решателя Bitwuzla значительно ускоряют анализ. Реализованы алгоритмы по анализу неявных зависимостей (косвенные переходы, jump-таблицы и символьные указатели).
  • Удобная автоматизация динамического анализа. Унификация запуска и результатов для различных фаззеров. Удобная настройка фаззинг-кампании с помощью конфигурационного файла. Поддержка параллельного фаззинга, вывод статистики, возможность одновременного запуска Sydr + libFuzzer + AFL++.
  • Предикаты безопасности. Поиск ошибок методами символьного выполнения, заключающийся в генерации данных, приводящих к проявлению дефекта: деление на ноль, разыменование нулевого указателя, выход за границы массива, целочисленное переполнение, целочисленное усечение, ошибки форматной строки, внедрение команд.

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

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

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

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

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