Институт системного программирования им. В.П. Иванникова РАН


Crusher

Комплекс динамического анализа программ

Crusher – программный комплекс, комбинирующий несколько методов динамического анализа. Состоит из двух инструментов: ИСП Fuzzer для проведения фаззинг-тестирования и Sydr, отвечающий за автоматическую генерацию тестов для сложных программных систем. В ближайшие 1-2 года в комплекс планируется включить ещё две технологии ИСП РАН: BinSide и Casr. Crusher позволяет построить процесс разработки в соответствии с ГОСТ Р 56939-2016 и «Методикой выявления уязвимостей и недекларированных возможностей в программном обеспечении» ФСТЭК России.

Инструмент тестирования ИСП FUZZER

ИСП Fuzzer – инструмент проведения фаззинг-тестирования, необходимый на всех этапах разработки, тестирования и эксплуатации ПО. Обнаруживает ошибки или закладки как при наличии, так и при отсутствии исходного кода. Решает те же задачи, что и мировые аналоги (Synopsys Codenomicon, beSTORM, Peach Fuzzer), однако более удобен для российских компаний в условиях процесса импортозамещения.

ИСП Fuzzer – это:

  • Осуществление фаззинг-тестирования через различные источники внешних данных (файл, аргументы командной строки, стандартный поток ввода, аргументы переменных окружений, сеть).
  • Возможность добавления пользовательских мутационных преобразований (для генерации новых входных данных и увеличения эффективности тестирования).
  • Наличие модулей пред- и постобработки входных данных для осуществления константных преобразований над данными перед их отправкой в анализируемое ПО.
  • Поддержка многопоточного анализа как на одной машине, так и на распределённых.
  • Поддержка пользовательских плагинов отправки данных по сети (плагины позволяют осуществлять взаимодействие с клиентским или серверным ПО и отправлять мутированные данные).
  • Возможность интеграции с рядом необходимых инструментов жизненного цикла разработки безопасного ПО, созданных в ИСП РАН:
    • использование инструментов динамического символьного выполнения Sydr и Anxiety для повышения эффективности фаззинг-тестирования;
    • возможность получать входные данные, на которых проявляются ошибки, размеченные инструментом статического анализа BinSide в автоматическом режиме;
    • отображение трассы последовательности функций, приводящих к аварийному завершению, в интерфейсе статического анализатора Svace;
    • использование генератора данных по формальным грамматикам ANTLR для формирования корпуса входных данных.
  • Совместная работа с дизассемблером IDA PRO (сохранение покрытия для плагина Lighthouse, которое отображает покрытые базовые блоки в ПО, а также вывод процента покрытых базовых блоков).
  • Возможность проведения анализа серверного и клиентского ПО, работающего по протоколам с состояниями и без состояний.
  • Возможность запуска систем динамического анализа на новых входных данных (Valgrind, DrMemory, QASan).
  • Лёгкая расширяемость и добавление новых методов в рамках существующей инфраструктуры; оперативная адаптация под новые задачи.
  • Возможность распределения корпуса входных данных между процессами фаззеров для повышения эффективности их работы.
  • Оценка критичности найденных аварийных завершений.
  • Использование фаззера Radamsa для генерации новых данных.
  • Поддержка различных видов инструментации: DynamoRIO, QemuUserMode, статическая инструментация GCC, статическая инструментация LLVM, QemuSystemArm.

Инструмент динамического символьного выполнения Sydr

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

Sydr – это:

  • Инвертирование на конкретном пути выполнения всех условных переходов, которые зависят от входных данных. Реализована возможность параллельного инвертирования.
  • Интеграция с ИСП Fuzzer для инвертирования, что решает проблемы при прохождении переходов, зависящих от сравнения с константами.
  • Решение задач обратной разработки. Помощь аналитику в достижении интересующей его точки в программе. Получение трассы инструкций, которые зависят от входных данных.
  • Поддержка различных источников внешних данных программы (файлы, сетевые сокеты, переменные окружения, стандартный поток ввода, аргументы командной строки).
  • Предикаты безопасности. Генерация входных данных, приводящих к проявлению дефекта (деление на ноль, разыменование нулевого указателя, доступ за границы буфера, целочисленное переполнение).
  • Символьное выполнение многопоточных программ.
  • Инвертирование косвенных переходов (switch statement). Разработан алгоритм определения таблиц и переходов по вычисляемым адресам.
  • Слайсинг формул. Удаление избыточных формул из предиката пути, которые не влияют на инвертируемый условный переход. Решает проблему недостаточной помеченности, а также ускоряет обработку запросов SMT-решателем.

Для кого предназначен Crusher?

  • Компании, нацеленные на разработку ПО с высоким уровнем надёжности и безопасности.
  • Компании, отвечающие за аудит или сертификацию ПО.

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

Поддержка ОС семейства Linux и Windows. Возможность проводить фаззинг-тестирование встроенных устройств (контроллеры, устройства интернета вещей), а также сервисов и COM-объектов ОС Windows.

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

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

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

ИСП FUZZER

Схема работы ИСП Fuzzer

Sydr

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

Публикации

  1. Презентация ISP Fuzzer
  2. Мишечкин М.В., Акользин В.В., Курмангалеев Ш.Ф. Архитектура и функциональные возможности инструмента ИСП Фаззер. Открытая конференция ИСП РАН им. В.П. Иванникова, 2020.
  3. Акользин В.В., Мишечкин М.В., Курмангалеев Ш.Ф. Разработка эффективного метода фаззинга приложений, работающих со сложными форматами данных. Открытая конференция ИСП РАН им. В.П. Иванникова, 2020.
  4. 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. Скачать презентацию

По вопросам определения стоимости, приобретения и использования, обращайтесь по адресу crusher@ispras.ru

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

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

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