Компания Google представила новый открытый проект Vanir, развивающий статический анализатор для автоматического выявления не применённых к коду патчей, устраняющих уязвимости. Vanir использует базу сигнатур с информацией об известных уязвимостях и патчах для устранения этих уязвимостей. Подобная БД ведётся Google с июля 2020 года и охватывает 95% уязвимостей в проектах, связанных с платформой Android, включая ядро Linux. В настоящее время поддерживается проверка исходного кода на языках C, C++ и Java. Код Vanir написан на языках С++ и Python, и распространяется под лицензией BSD.
Проект состоит из двух частей – генератора сигнатур и детектора пропущенных патчей. Генератор формирует сигнатуру для идентификации отсутствия исправления на основе описания уязвимости в формате OSV и ссылки на патч или коммит, устраняющий уязвимость. В текущем виде поддерживается обработка коммитов в репозиториях googlesource.com и git.codelinaro.org, но поддержка других сервисов может легко быть добавлена через подключение обработчика для извлечения кода.
Детектор выполняет разбор кода в указанном репозитории и определяет отсутствие в нём исправлений, описанных в предоставленных сигнатурах.
Реализация основана на алгоритмах автоматического уточнения сигнатур и анализа множественных шаблонов, предложенных в исследовательских проектах ReDeBug и VUDDY. На современном ПК с 16-ядерным CPU сканирование дерева исходных текстов платформы Android по OSV-базе с информацией о более чем 2000 уязвимостей занимает 10-20 минут. На выходе формируется отчёт со списком потенциально неисправленных уязвимостей и ссылками на связанные с ними позиции в коде, CVE-идентификаторы и патчи. По статистике, собранной за два года использования Vanir в Google, уровень ложных срабатываний составляет 2.72%.
Достоинства предложенного инструментария:
- Возможность выявления неисправленных уязвимостей в сторонних ответвлениях, модификациях и заимствованиях кода, напрямую не связанных с основным проектом. В контексте Android инструментарий может использоваться для проверки применения исправлений в вариантах платформы Android, развиваемых OEM-производителями устройств.
- Выполнение проверки лишь на основе анализа имеющегося кода, без привязки к метаданным, таким как номер версии, история коммитов и SBOM (Software Bill Of Materials).
- Поддержка автоматической генерации сигнатур, используя появляющуюся в публичных источниках информацию об уязвимостях и публикуемые сопровождающими патчи.
- Более высокая производительность проверки на основе статического анализа исходного кода по сравнению с инструментами для динамического анализа и проверки бинарных сборок.
- Самодостаточность – возможность развернуть инфраструктуру на своих системах без обращения к внешним сервисам.
- Наличие готовой актуальной базы сигнатур, сопровождаемой командой Google Android Security Team.
- Поддержка подключения к системам непрерывной интеграции и доставки
(CI/CD). Возможность интеграции в другие проекты с использованием Vanir в форме библиотек на языке Python. - Возможность адаптации системы для задач, не связанных с уязвимостями, например, для выявления клонирования кода или использования лицензированного кода в других проектах.