ИКРБС
№ 223050200017-8Отчёт «Исследование комбинированных методов автоматического анализа программ на наличие ошибок и уязвимостей безопасности» по проекту РФФИ 20-07-00921 (заключительный). Этап 3
27.12.2022
Были исследованы существующие подходы по обработке неявных зависимостей в программах при проведении динамического анализа. Большинство современных инструментов (QSYM, SymQEMU, SymCC, Fuzzolic) не учитывают такие зависимости в символьной модели программы, выполняя вместо этого простой перебор значений символьного адреса. Те инструменты, которые поддерживают полноценную интерпретацию неявных зависимостей, либо обладают низкой производительностью из-за особенностей реализации (KLEE, angr), либо являются закрытым коммерческим инструментом (Mayhem).
Были разработаны методы для обработки неявных зависимостей по управлению и по данным. Методы были реализованы в инструменте динамического символьного выполнения Sydr, который разрабатывается в ИСП РАН. Среди неявных зависимостей по управлению были выделены табличные условные переходы — косвенная передача управления через табличные преобразования. Табличные условные переходы используются компилятором для компиляции switch выражений в языках Си и Си++. Разработанный метод позволяет инвертировать такие переходы во всех направлениях, его применение на наборе реальных программ позволило обнаружить и инвертировать множество новых символьных переходов. Например, в muraster - разборщике формата pdf, удалось обнаружить 1000 косвенных передач управления через таблицы. Для неявных зависимостей по данным был разработан метод, позволяющий интерпретировать обращения к ячейкам памяти, когда адрес обращения является символьной переменной. Обработка таких зависимостей во время анализа позволяет открывать новые состояния программы, что в свою очередь полезно при фаззинге. Исходя из анализа результатов, предлагаемый подход приводит к небольшому замедлению анализа, но помогает находить много новых символьных ветвей и увеличивает достигнутое покрытие программы.
Было проведено исследование существующих подходов к автоматическому обнаружению ошибок с помощью предикатов безопасности (KLEE, Mayhem, SAVIOR, ParmeSan, IntScope) и выявлены их слабые и сильные стороны. Был разработан метод поиска ошибок работы с памятью и неопределенного поведения в программах, использующий гибридный фаззинг и предикаты безопасности. Данный метод был реализован в инструменте Sydr. Метод составляет предикаты безопасности, позволяющие обнаруживать разыменование нулевого указателя, деление на ноль, выход за границы буфера (на стеке и куче) и целочисленное переполнение. Реализованный метод позволил обнаружить 17 неизвестных ранее ошибок в программах с открытым исходным кодом.
ГРНТИ
50.41.17 Системное программное обеспечение
Ключевые слова
статический анализ программ
динамический анализ программ
комбинированные методы анализа программ.
Детали
Заказчик
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ УЧРЕЖДЕНИЕ "РОССИЙСКИЙ ФОНД ФУНДАМЕНТАЛЬНЫХ ИССЛЕДОВАНИЙ"
Исполнитель
Федеральное государственное бюджетное учреждение науки Институт системного программирования им. В.П. Иванникова Российской академии наук
Бюджет
Средства фондов поддержки научной и (или) научно-технической деятельности: 1 183 000 ₽
Похожие документы
Отчёт "Исследование и разработка методов глубокого статического анализа с учетом отдельных путей выполнения и потока чувствительных данных" по проекту РФФИ 20-01-00581 (заключительный). Этап 3.
0.896
ИКРБС
ОТЧЕТ «Исследование и разработка методов направленного динамического анализа программ» по проекту РФФИ 17-07-00702 (этап 2017 года).
0.895
ИКРБС
Отчёт "Разработка методов абстракции динамических структур данных для верификации программ на языке Си" по проекту РФФИ 18-01-00426 (итоговый).
0.891
ИКРБС
ОТЧЁТ "Исследование подходов к совмещению статического и динамического анализа программ" по теме:"Динамический анализ программ в интерпретирующих средах" (финальный).
0.891
ИКРБС
Отчёт "Разработка методов статического анализа бинарного кода для поиска ошибок в программах" по проекту РФФИ 18-07-01154 (заключительный). Этап 3.
0.887
ИКРБС
Отчёт о научно-исследовательской работе "ИССЛЕДОВАНИЕ И РАЗРАБОТКА МЕТОДОВ СТАТИЧЕСКОГО АНАЛИЗА ИСХОДНОГО И БИНАРНОГО КОДА ДЛЯ ВЫЯВЛЕНИЯ ОШИБОК И УЯЗВИМОСТЕЙ" по теме: "Методы организации детерминированного межпроцедурного статического анализа для поиска ошибок и уязвимости переполнения буфера" (заключительный).
0.886
ИКРБС
Автоматическая направленная генерации тестов на основе двунаправленного символьного исполнения
0.883
НИОКТР
Отчёт "Разработка методов абстракции динамических структур данных для верификации программ на языке Си" по проекту РФФИ 18-01-00426 (промежуточный, этап 2019 года).
0.883
ИКРБС
Отчёт "Методология построения статического анализа программ для поиска ошибок и уязвимостей в исходном коде программ" по теме: "Исследование и разработка методов выявления дефектов производительности и архитектуры приложений для современных мобильных и параллельных вычислительных систем" (заключительный).
0.882
ИКРБС
Автоматическая направленная генерации тестов на основе двунаправленного символьного исполнения (этап 2, заключительный)
0.879
ИКРБС