Российские исследователи создали нейросетевую систему, которая не просто генерирует программный код, но и автоматически проверяет его на уязвимости, исправляет ошибки и со временем учится писать безопаснее. Над проектом работали специалисты Института системного программирования им. В. П. Иванникова РАН, МФТИ, НИУ ВШЭ, РТУ МИРЭА и Института AIRI. Их задача — сделать так, чтобы ИИ‑помощники не усиливали киберриски, а, напротив, снижали вероятность дефектов и взломов.
Современная ИТ‑сфера переживает радикальное преобразование. Генеративные модели вроде крупных языковых нейросетей стремительно меняют разработку: писать программы теперь могут не только профессиональные программисты, но и новички, и люди без технического образования. Появился даже отдельный термин — «vibe‑кодинг»: пользователь формулирует идею на естественном языке, а нейросеть превращает ее в работающий фрагмент программы. Однако за удобство приходится платить: вместе с быстрым ростом популярности ИИ растет и число киберугроз.
Ключевая проблема в том, что языковые модели учатся на огромных массивах открытого кода, где наряду с удачными решениями присутствуют многочисленные ошибки и уязвимые конструкции. В результате нейросеть может уверенно генерировать фрагменты, которые внешне выглядят корректно, проходят простые тесты, но содержат лазейки для атак. Исследования показывают, что до 40% автоматически сгенерированного кода включает дефекты, связанные с безопасностью: от использования небезопасных функций до нарушений правил работы с памятью и данными.
Особенно опасно это для начинающих разработчиков. Они склонны доверять ИИ «по умолчанию», воспринимая результат генерации как готовое решение. Ошибки остаются незамеченными и попадают в реальные продукты — веб‑сервисы, мобильные приложения, корпоративные системы. Так формируется «скрытый техдолг безопасности»: изначально уязвимый софт выходит в продакшн, а у злоумышленников появляется все больше точек входа для атак и кражи данных.
Чтобы разорвать эту цепочку, российские ученые предложили комбинировать сильные стороны нейросетей и классических методов контроля качества программного обеспечения. В центре новой методики — статический анализ кода. Если представить ИИ‑модель в образе способного, но невнимательного студента, то статический анализатор — это строгий преподаватель‑проверяющий, который не упускает ни одной мелкой неточности и принципиально не закрывает глаза на сомнительные конструкции.
В основе подхода лежит промышленный инструмент Svace — мощный статический анализатор, умеющий находить дефекты без запуска программы: по самому тексту исходного кода. Разработчики встроили его в связку с языковой моделью: нейросеть генерирует фрагмент программы, Svace тут же его анализирует, выявляет потенциальные ошибки, а затем формирует развернутую обратную связь. На основе этой обратной связи ИИ корректирует свое решение и предлагает улучшенную версию. Так возникает замкнутый цикл: «творческая генерация — строгая проверка — целенаправленное исправление».
В опубликованной работе ученые показывают характерный пример такого взаимодействия. Модели задают запрос: написать на Python функцию, которая принимает список чисел и возвращает сумму всех положительных элементов, а для пустого списка возвращает 0. Нейросеть формирует код, но, как нередко бывает, допускает ошибку — переменная `total` используется до инициализации. Статический анализатор обнаруживает проблему и выдает четкое пояснение: «неопределенная переменная 'total' в строке 10». Далее в систему подается новый промпт: «Исправь предыдущее решение с учетом замечания». На основе такой подсказки модель перестраивает код, корректно объявляет и инициализирует переменную, и итоговая версия уже не содержит найденного дефекта.
Однако для исследователей было важно не только научить ИИ реагировать на единичные замечания, но и выработать у него устойчивую «интуицию безопасности». Речь идет о том, чтобы модель изначально стремилась избегать небезопасных решений и сомнительных паттернов, даже если пользователь явно о безопасности не спрашивает. Для этого применен метод прямой оптимизации предпочтений (Direct Preference Optimization, DPO).
Суть DPO заключается в том, что нейросеть дообучают на парах примеров: «плохой» и «хороший» код. В каждой такой паре присутствует реализация с уязвимостью или ошибкой и исправленный, безопасный вариант. Модели показывают оба, но усиливают склонность выбирать и воспроизводить тот, который признан предпочтительным с точки зрения критериев безопасности и качества. Постепенно формируется статистическое «чутье»: система начинает распознавать небезопасные паттерны и избегать их уже в процессе генерации, а не только при постфактум‑проверке анализатором.
Фактически речь идет о новом уровне ответственности ИИ‑ассистентов. Если раньше они действовали по принципу «сделать то, что запросил пользователь», не задумываясь о последствиях, то в предлагаемой архитектуре модель получает дополнительную цель: не просто удовлетворить запрос, но и минимизировать риск появления дефектов безопасности. Это особенно важно в тех сценариях, где код быстро попадает в рабочую среду: при прототипировании, создании внутренних инструментов, написании скриптов автоматизации.
Один из ключевых плюсов такой системы — масштабируемость. Связку «нейросеть + статический анализ» можно адаптировать под разные языки программирования и технологические стеки: от C/C++ и Java до Python, Go или Rust. Для каждого стека достаточно настроить правила и базы знаний анализатора, после чего модель сможет учиться на реальных замечаниях для конкретного стека. Это открывает путь к созданию специализированных ИИ‑ассистентов, «наточенных» под безопасную разработку, например, для финансовых или медицинских систем, где цена ошибки особенно высока.
Практическое применение такого подхода может серьезно изменить повседневную работу разработчиков. Вместо того чтобы получать от ИИ «сырые» решения, программист будет взаимодействовать с помощником, чья генерация уже прошла несколько циклов проверки и автоисправления. Для новичков это превращается в встроенный учебный процесс: система не только предлагает более правильный код, но и показывает, какие именно конструкции были признаны небезопасными и почему. Для опытных специалистов это экономия времени на рутинных ревью и поиск типовых дефектов.
При этом ученые подчеркивают: ни один, даже самый продвинутый, ИИ‑ассистент не отменяет необходимость человеческого контроля. Нейросеть может снизить вероятность ошибок, но не гарантирует абсолютной безупречности. Оптимальный сценарий — когда ИИ берет на себя массовый, однотипный слой работы по обеспечению базовой безопасности, а разработчики и аудиторы сосредотачиваются на сложных, архитектурных и бизнес‑критичных аспектах.
Отдельный вопрос — риски злоупотребления такими технологиями. Те же инструменты, которые повышают качество кода у добросовестных команд, теоретически могут быть использованы злоумышленниками для создания более изощренных вредоносных программ. Поэтому исследователи рассматривают не только технические аспекты безопасной генерации, но и вопросы регулирования, этики и ограничений: например, запрет на автоматическую генерацию эксплойтов и типовых шаблонов атак, фильтрацию «опасных» запросов и внедрение дополнительных ступеней проверки в чувствительных областях.
В перспективе подобные подходы могут быть интегрированы в стандартные инструменты разработки: IDE, системы непрерывной интеграции и поставки, внутренние платформы компаний. Код, сгенерированный ИИ, будет по умолчанию проходить через слой статического анализа и корректирующего дообучения модели. Постепенно это может сформировать новый отраслевой стандарт, при котором «просто рабочий код» уже не считается достаточным: базовый уровень — это «код, по умолчанию проверенный на безопасность ИИ‑средствами».
Важно и образовательное измерение. Университеты и учебные центры, готовящие разработчиков, уже включают в программы курсы по безопасному программированию и применению ИИ‑инструментов. Интеграция таких систем в учебные среды позволит студентам с первых шагов видеть не только, «как заставить программу работать», но и «как сделать ее устойчивой к атакам». Это формирует культуру ответственной разработки, которую невозможно заменить одними лишь технологиями.
Ближайшие шаги в развитии подобных решений связаны с расширением каталогов типовых уязвимостей, использованием реальных данных о киберинцидентах и автоматической корреляцией генерации кода с практиками безопасной архитектуры. Это позволит ИИ‑ассистентам не просто исправлять локальные ошибки, а предлагать более защищенные схемы обработки данных, авторизации, шифрования и журналирования.
Таким образом, работа российских ученых показывает, что генеративный искусственный интеллект и программная безопасность не обязаны находиться в конфликте. Напротив, грамотно выстроенное взаимодействие между нейросетями и проверенными инструментами анализа кода способно превратить ИИ из источника новых рисков в важный элемент системы защиты. Условие только одно: воспринимать такие технологии не как магию, а как часть профессионального инженерного процесса, где на первом месте — надежность и безопасность.



