SecureCode AI: эксперименты

Итог

Корпус — 600 реальных файлов из CVEfixes, базы исправлений опубликованных уязвимостей (CVE). Для каждой уязвимости взяты две версии одного файла: до исправления (уязвимая, инструмент должен её найти) и после исправления (безопасная, находок быть не должно). Так проверяется и полнота поиска, и число ложных срабатываний.

Гибрид «сканеры SecureCode + DeepSeek» находит больше уязвимостей, чем любая конфигурация по отдельности: recall 35,8% против 34,3% у Semgrep. На отложенной выборке разница составляет 32,8% против 32,5%, 95% доверительный интервал от −8,9 до +10,0 п.п. включает ноль. Гибрид на уровне Semgrep, статистически значимого превосходства нет.

Precision всех конфигураций около 50%: исправление обычно меняет несколько строк, а остальной код файла совпадает, поэтому детектор часто срабатывает и на исправленную версию. Для такого корпуса это ожидаемо и одинаково для всех инструментов, включая Semgrep.

Корпус и методика

Результаты на всём корпусе

Конфигурация Precision Recall F1 Проанализировано
Сканеры SecureCode 49,0% 25,7% 33,7% 84,7%
DeepSeek, прямая классификация 50,5% 16,8% 25,2% 100%
DeepSeek, one-shot 52,0% 22,7% 31,6% 100%
Гибрид: сканеры + DeepSeek 49,9% 35,8% 41,7% 84,7%
Semgrep 1.177.0 50,0% 34,3% 40,7% 100%

«Проанализировано» — доля файлов, которые сканеры смогли разобрать. Оставшиеся 92 файла (код на Python 2, фрагменты JS) учтены как непроверенные, а не как «чистые».

Отложенная выборка по языкам

Язык Конфигурация Precision Recall F1
Python Гибрид 48,4% 50,0% 49,2%
Python Semgrep 50,0% 45,0% 47,4%
JavaScript/TypeScript Гибрид 49,2% 25,8% 33,9%
JavaScript/TypeScript Semgrep 48,1% 32,5% 38,8%
Go Гибрид 52,9% 22,5% 31,6%
Go Semgrep 53,3% 20,0% 29,1%

Гибрид лучше Semgrep на Python и Go и уступает на JavaScript/TypeScript.

Что улучшилось в версии 1.0

Исправление сравнения узлов синтаксического дерева и ошибок в Go-сканерах подняло recall сканеров с 19,7% до 25,7%, а число файлов, которые не удавалось проанализировать, сократилось с 253 до 92.

Живой прогон агентов

На демонстрационном файле с SQL-инъекцией Аудитор на локальной модели Qwen 2.5 Coder 7B (Q4_K_M, Ollama) нашёл уязвимость CWE-89 в той же строке, что и детерминированный сканер. Архитектор предложил параметризованный запрос, патч прошёл разбор и повторное сканирование во временной копии. Тот же сценарий на DeepSeek дал такой же результат за $0,00014.

Ограничения

Подробные таблицы по языкам и CWE, хеши и команды воспроизведения — в репозитории.