открыть во весь экран →

Аудит кода, написанного языковой моделью

Проверка репозитория, где значительная часть кода пришла от ассистента: секреты в исходниках, пропущенная проверка прав, собранный строками SQL.

Классы дефектов, характерные для сгенерированного кода, закрываются правилом в конвейере сборки, а не вычитыванием диффов глазами.

Безопасность · Код ИИ
Ворота релиза: какие правила блокируют сборку, какие уходят предупреждением
Ворота релиза: какие правила блокируют сборку, какие уходят предупреждением

Задача

Ассистент пишет код, который компилируется и проходит тесты, — и при этом молча выключает проверку сертификата, собирает запрос строками и кладёт ключ в репозиторий, потому что так было в обучающих примерах. Ревью человеком за этим не успевает: за квартал сгенерированного кода больше, чем команда способна прочитать глазами.

Что сделано

  • Инвентаризация: какая доля кода пришла от ассистентов и в каких частях системы
  • Поиск классов дефектов, характерных именно для генерации: секреты в исходниках, пропущенная авторизация, конкатенация запроса, небезопасная десериализация, отключённая проверка сертификата, заглушка вместо валидации
  • Проверка предложенных зависимостей: существует ли пакет, кто его сопровождает, нет ли подмены имени
  • Правила в конвейере сборки: что блокирует релиз, что уходит предупреждением
  • Разбор находок с командой — каждая с путём эксплуатации и готовой правкой

Внутри системы

  • Опасность сгенерированного кода не в экзотике, а в правдоподобии: он написан в стиле проекта, назван по соглашениям проекта и потому проходит ревью взглядом. Ищется не «плохой код вообще», а конкретные шаблоны, которые модель воспроизводит устойчиво: обработка ошибки, глушащая исключение; проверка прав, сделанная на клиенте; тестовый ключ, оставшийся в коде после отладки.
  • Выдуманное имя пакета — отдельный класс риска: модель предлагает зависимость, которой не существует, кто-то регистрирует это имя в публичном реестре, и следующая сборка тянет чужой код. Поэтому каждая новая зависимость проверяется отдельно: дата регистрации, сопровождающий, число загрузок и расстояние имени до популярного пакета.
  • Сканер с высоким уровнем ложных срабатываний команда перестаёт читать через две недели, и дальше он не защищает ничего. Порог ставится по цене ошибки: сборку блокирует только правило, для которого доказан путь от внешнего ввода до опасной операции, остальное идёт задачей в очередь, а не письмом всем.

Как устроено

Проверка идёт срезом, а не по одному диффу: ассистент повторяет найденное решение десятки раз подряд, поэтому одна находка почти всегда означает семейство одинаковых мест в разных модулях.

Результат

На выходе — не отчёт, а изменение в конвейере: набор правил, порог блокировки и разобранный с командой список находок. Дальше проверка работает на каждом коммите без нашего участия.

Следующая работа
Защита приложений с языковой моделью от инъекций в промпт