Неважно, кто написал код: человек, ИИ или человек с помощью ИИ. Никто не застрахован от уязвимостей безопасности, которыми может воспользоваться злоумышленник. Для их предотвращения или быстрого исправления департамент информационной безопасности реализует разные меры, и часть из них требуют продвинутой разработки с добавлением методов машинного обучения.
Если у уязвимости есть четкий паттерн, который можно описать чем-то вроде регулярного выражения, например c помощью инструментов статического анализа кода — Semgrep и/или CodeQL, соответствующий ей фрагмент кода подсвечивается в наших CI/CD-пайплайнах. Но вот автоматически предложить качественное исправление могут уже только инструменты с ИИ.
Мало просто предложить исправление кода, важно еще объяснить разработчику потенциальную проблему, чтобы он смог сам разобраться с оптимальным решением. В этом случае полезно, что генеративная нейросеть может работать не только с текстом или кодом по отдельности, но и в комбинации.
Есть еще немало уязвимостей, которые не так-то просто найти по синтаксическим паттернам. Зато можно — семантическим поиском, с помощью векторных или нейросетевых представлений сниппетов кода. Еще вариант — искать для конкретного сниппета уязвимость из референсной базы данных, которой он может соответствовать или сканировать всю кодовую базу по сниппетам на предмет похожести на какую-то уязвимость из референсной базы данных.
Отдельная тема в поиске уязвимостей — фаззинг или тестирование ПО путем передачи разных неожиданных данных на вход. Большие генеративные нейросети хорошо справляются с направленной генерацией наборов входных данных, повышая вероятность обнаружения проблемных комбинаций и уменьшая количество ресурсов, необходимых для обеспечения определенного уровня качества.