Информационная безопасность является актуальным и востребованным направлением ИТ. Многие компании вынуждены вкладываться в безопасность своих систем, что повышает доверие клиентов, не говоря уже о том, что не найденные вовремя уязвимости могут привести к существенным убыткам и снижению использования ИТ-продуктов. Есть множество способов по обеспечению безопасности на разных уровнях разработки, начиная с комплекса мероприятий/технических средств изнутри компании и заканчивая аудитом информационной безопасности извне.
Одним из способов проверить безопасность приложения является использование сторонних инструментов, в том числе анализаторов. Периодическое тестирование способно выявить уязвимости, появившиеся в ходе разработки, что даёт возможность своевременно от них избавиться.
Существует множество разных подходов для анализа программ. Наиболее востребованными технологиями на сегодняшний день являются динамический и статический анализы. Рассмотрим их с точки зрения безопасности. Статический анализ кода производится без запуска программы. Он позволяет сканировать код и выявлять известные уязвимости. Однако, поскольку информация о ходе выполнения программы недоступна, такой вид анализа часто лишь сообщает о возможных проблемах с безопасностью, никак не проверяя их и не уточняя способ их воспроизведения. Таким образом, значительная часть найденных потенциальных уязвимостей оказывается нереализуемой, но требует много времени на валидацию. В отличие от статического, динамический анализ осуществляется при помощи запуска программы, что позволяет ему исследовать код качественнее, используя информацию о программных сущностях во время исполнения.
В целом такие утилиты часто нуждаются в достаточно большом количестве входных данных и оценивают покрытие кода1, показывающие полноту анализа. Однако собрать данные, чтобы проверить инструмент, может быть слишком затратно. К тому же нет никаких гарантий, что их будет достаточно или что они не устареют. Такой подход нельзя назвать автоматическим.
Есть несколько особых техник, не имеющих этого недостатка: фаззинг и символьное исполнение. В данной работе изучаются эти подходы (в основном символьное исполнение) и их применимость для поставленной задачи. Предоставляется решение в виде приложения-анализатора.
Модульные тесты — простой и понятный формат результата для разработчиков. Их легко проверить. В контексте данной задачи они могут содержать всю необходимую информацию для воспроизведения уязвимости. Именно в этом формате и представляется результат работы анализатора.
Были получены следующие результаты:
• Разработано приложение для генерации security тестов на основе UTBot
• Создан формат базы знаний, реализована его обработка и проверка уязвимостей
• Расширена функциональность базового инструмента
• Добавлена возможность интеграции с другими инструментами.