Дата публикации: 6 сентября 2025

Введение

За последние два года ИИ в программировании перестал быть экзотикой: генераторы кода и ассистенты встроены в IDE, CI/CD, ревью и документацию. Команды видят кратный прирост скорости и объёма — по оценкам отраслевых аналитик, разработчики с ИИ создают кода в 3–4 раза больше за то же время. Но вместе с ускорением растёт и другой показатель: безопасность кода проседает. В реальных репозиториях всё чаще встречаются уязвимости, небезопасные паттерны, «зашитые» секреты и архитектурные изъяны. В свежем анализе, выполненном специалистами из сферы AppSec, показано, что проблемы безопасности встречаются в ИИ-сгенерированном коде на порядок чаще.

В этом материале мы подробно разберём, почему так происходит, какие именно риски преобладают, где ИИ объективно полезен, а где складывает «бомбы замедленного действия», как перестроить процессы DevSecOps, чтобы извлечь выгоду из ускорения и не утонуть в техническом долге и инцидентах. Отдельно сравним выводы разных исследовательских групп и предложим набор практических мер AppSec, которые реально работают в продуктовой разработке.

Что показало исследование: продуктивность против безопасности

На большом массиве открытых репозиториев, где код писали и люди, и ассистенты ИИ, обнаружена чёткая зависимость: больше кода — больше потенциальных уязвимостей. Разработчики, активно использующие нейропомощников, вносят крупные пул-реквесты (PR) реже, но большим объёмом — это усложняет ревью и повышает шансы «провезти» рискованный фрагмент в основную ветку.

Какие типы проблем фиксируются чаще всего:

  • Небезопасные паттерны (например, конкатенация SQL без параметров, невалидированый ввод, слабые проверки авторизации).
  • Хранение секретов (API-ключи, токены, логины) в явном виде в коде или в репозитории.
  • Архитектурные изъяны, повышающие сложность угроз (неправильная изоляция контуров, смешение доменов, нарушение принципов наименьших привилегий).
  • Небезопасные зависимости — библиотеки с известными CVE и устаревшие компоненты без патчей.

При этом синтаксические и часть логических ошибок у «ИИ-кода» встречаются заметно реже: ассистенты хорошо справляются с выправлением очевидных огрехов. Иными словами, поверхность атаки расширяется, даже если мелкой «мусорной» дефектности становится меньше.

Почему ИИ усиливает риски: механика ошибок

Причины системны и упираются в данные и контекст:

  1. Обучение на смешанном корпусе. Модели впитывают не только лучшие практики, но и распространённые анти-паттерны. На выходе — статистически правдоподобные решения с вероятностью включения небезопасных приёмов.
  2. Дефицит доменного контекста. Ассистент не знает всех нефункциональных требований (угрозы, SLA, регуляторика, модель доверия), поэтому генерирует «общепринятое» решение, не всегда совместимое с вашей моделью угроз.
  3. Эффект автодополнения. Разработчик склонен доверять уверенно сформулированным фрагментам и встраивать их «как есть», снижая глубину ручной проверки.
  4. Крупные PR. Генерация больших кусков кода повышает когнитивную нагрузку на ревьюеров и повышает шанс пропустить тонкую логическую брешь.
  5. Поведенческая подмена. Снижение рутины подталкивает к большему количеству экспериментов и быстрым интеграциям зависимостей — часть из них уязвима.

Где ИИ действительно помогает

Чтобы не впасть в алармизм, важно признать: правильное использование ассистентов приносит ощутимую пользу.

  • Снижение синтаксических ошибок и ускорение «потока» при типовом кодинге.
  • Унификация стиля и шаблонов — меньше велосипедов, выше однородность кода.
  • Быстрая черновая реализация прототипов, миграций и клейкой логики между сервисами.
  • Генерация тестов и «скелетов» для покрытия, документации, контрактов.
  • Подсказки API и сниппеты, ускоряющие интеграции.

Вывод: ИИ — отличный усилитель продуктивности, но его сила должна проходить через фильтры процессов безопасности.

Главные угрозы ИИ-кода: «бомбы с часовым механизмом»

Практика показывает, что риски концентрируются в нескольких зонах.

1. Секреты и конфиденциальные данные

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

2. Повышение привилегий и обход авторизации

Тонкие дефекты в проверках прав, отсутствие явных deny-by-default, нестрогая валидация claim’ов и ролей — всё это повышает вероятность эскалации привилегий.

3. Инъекции и небезопасные конкатенации

SQL/NoSQL-инъекции, Command Injection, XSS — классика, которая возвращается, если модель «подсмотрела» старые паттерны без параметризации и экранирования.

4. Неправильная криптография

Самодельные схемы шифрования, устаревшие алгоритмы, неверная генерация/хранение ключей — ИИ нередко предлагает «простые» примеры, которые неприемлемы в проде.

5. Архитектура и изоляция

Смешение доменов, хрупкая связность, отсутствие чётких границ между контекстами — всё это растит поверхность атаки и стоимость изменений.

Сравнение с другими исследованиями: почему результаты расходятся

Часть академических работ указывает, что итеративное «улучшение» кода моделями способно ухудшать безопасность, что резонирует с практикой AppSec. В то же время есть эксперименты, где ИИ-программисты снижали общую производительность команды — это объяснимо: много кода ≠ много полезной ценности. Качество задач, зрелость процессов и культура ревью сильно меняют итог.

Важная мысль: методология исследований разная. Где-то оценивают скорость и количество строк, где-то — частоту багов и уязвимостей, где-то — влияние на throughput команды. Поэтому корректнее говорить не «ИИ полезен/вреден», а «ИИ усиливает то, что у вас уже есть»: сильные процессы становятся сильнее, слабые — ломаются быстрее.

Практические меры: как ускориться с ИИ и не потерять безопасность

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

Политики и гвардrails для генерации

  • Запрет на секреты в коде. Жёстко: любые ключи/токены — только через Secret Manager (Vault, KMS, SSM, Doppler и т. п.).
  • Шаблоны безопасности. Готовые сниппеты для аутентификации, авторизации, криптографии, логирования и ошибок.
  • Профили подсказок для ИИ. Промпты с безопасными предпочтениями (parametrized queries, prepared statements, input validation).

Автоматизация AppSec в CI/CD

  • SAST (статический анализ) как обязательный gate.
  • DAST и IAST на стендах для ключевых сервисов.
  • SCA (скан зависимостей) с авто-PR на обновления и блокировкой известных CVE.
  • Secret Scanning и Commit Signing — на всех репозиториях.
  • Policy-as-code в инфраструктуре (OPA, Conftest, Checkov) — дрейф конфигураций под контролем.

Ревью и формат PR

  • Мелкие PR: лимит по строкам/файлам, чек-листы безопасного ревью.
  • Обязательные ревьюеры для зон повышенного риска (authz, crypto, payments, PII).
  • Threat modeling на уровне фич: STRIDE/LINDDUN для изменений, затрагивающих данные и границы сервисов.

Код-гигиена и стандарты

  • Secure coding guidelines для используемых языков/фреймворков.
  • Библиотека безопасных абстракций (обёртки для БД, HTTP-клиенты, crypto utils), которую ИИ должен предпочитать.
  • Обязательные тесты безопасности: негативные кейсы, property-based, fuzzing для парсеров и протоколов.

Наблюдаемость и раннее обнаружение

  • Логирование безопасности (аутентификация, нарушения политик, доступы к секретам) с алертингом.
  • RASP/WAF для критичных периметров.
  • Багбаунти/пентест как регулярная практика.

Обучение команды

  • Brown bag sessions по secure patterns и «разбору полётов» уязвимостей.
  • Встроенные подсказки в IDE и wiki: как просить ИИ генерировать безопасно, примеры «плохих» и «хороших» промптов.

Короткая памятка разработчику: как подсказать ИИ безопаснее

  • Проси параметризованные запросы, а не конкатенацию строк.
  • Требуй валидацию входа (schema validation) и явное deny-by-default в авторизации.
  • Уточняй: «Не храни секреты в коде, используй переменные окружения/Secret Manager».
  • Проси тесты (включая негативные) и чек-лист угроз к фрагменту.
  • Запрашивай OWASP Top 10 self-check применительно к сгенерированному коду.

Сравнительная таблица: где ИИ помогает, а где вредит

АспектПлюс от ИИРиск/МинусКонтрольная мера
Скорость и объёмБыстрый код, меньше рутиныКрупные PR, поверхностное ревьюЛимиты на размер PR, чек-листы, обязательные ревьюеры
Качество синтаксисаМеньше опечаток и мелких баговИллюзия безопасности, пропуск архитектурных дефектовАрхитектурные ревью, threat modeling
Интеграции и зависимостиБыстрые прототипы и связкиУязвимые пакеты, дрейф версийSCA, renovate/депендбот, allowlist библиотек
Работа с даннымиУскоренная схема/ORM/CRUDИнъекции, неверная авторизацияParametrized queries, input validation, access control tests
СекретыУдобные примерыЗашитые ключи в кодеSecret scanning, Secret Manager, policy-as-code
КриптографияГотовые сниппетыСлабые алгоритмы, самопалApproved crypto list, security wrappers

Кейс: «безобидный» пример, ставший инцидентом

Команда интегрирует платёжный шлюз. Ассистент предлагает пример с клиентским SDK, где токен доступа подставляется из конфигурации. На этапе отладки токен временно хардкодят в переменную — «чтобы проверить». В спешке коммит уходит в репозиторий, а затем в основной бранч. Репо приватное, но есть интеграция со сторонним сервисом для отчётности, который подтягивает код для анализа. Через несколько недель обнаруживается подозрительная активность: токен «утёк» через журнал аварийной диагностики и был использован злоумышленником. Итог — инцидент, ротация ключей, расследование и экстренные фиксы.

Мораль проста: секреты нельзя «временно» хранить в коде. Нужны автоматические сканеры, политики и защита по периметру, которые не дадут подобному попасть в main.

Как внедрять ИИ безопасно: дорожная карта для CTO/CISO

  1. Определите зоны допустимости. Где ИИ пишем «клей», где — только черновики, где — табу.
  2. Стандартизируйте безопасные абстракции. Дайте ИИ «направляющие»: внутренние пакеты/обёртки.
  3. Включите AppSec-gates в CI/CD. Скан секретов, SAST/SCA, блокирующие правила, auto-fix PR.
  4. Настройте ревью-процедуры. Лимиты PR, чек-листы, обязательные ревьюеры по областям.
  5. Обучайте команду. Плейбуки промптов, разбор инцидентов, OWASP практикум.
  6. Измеряйте. DORA-метрики + security KPI (MTTR уязвимостей, % блокированных секретов, покрытие тестами).
  7. Проводите тесты на проникновение. Регулярно, для критичных сервисов и крупных релизов.

Заключение: ИИ усилит то, что вы выстроили

Ассистенты ИИ — мощный рычаг. Они ускоряют разработку, вычищают рутину и демократизируют доступ к паттернам. Но вместе с этим они легко масштабируют технический долг и риски, если процессы безопасности не встроены в жизненный цикл разработки. ИИ не «ломает» команды сам по себе — он обнажает слабые места и делает их видимыми и дорогими. Если вы уже живёте в парадигме DevSecOps, внедрите несколько описанных выше контуров — и получите ускорение без взрывов. Если нет — начните с простого: запретите секреты в коде, включите сканеры и ограничьте размер PR. Эффект будет уже завтра.

FAQ: вопросы и ответы

Вопрос: Почему с ИИ уязвимости встречаются чаще?

Ответ: Модели обучены на смешанном коде и не знают вашей модели угроз. Они генерируют статистически вероятные решения, где нередко присутствуют небезопасные паттерны. Плюс крупные PR усложняют ревью.

Вопрос: Можно ли запретить ИИ и решить проблему?

Ответ: Запрет снизит скорость и не устранит корневые проблемы процессов. Рациональнее ввести гвардrails: политики, сканеры, ревью и обучение.

Вопрос: Какой первый шаг для снижения риска прямо сейчас?

Ответ: Включите secret scanning во всех репозиториях и заблокируйте мердж при обнаружении секретов. Параллельно добавьте SCA и SAST-gates.

Вопрос: ИИ правда уменьшает количество багов?

Ответ: Да, в части синтаксиса и типовых логических ошибок. Но возрастает доля архитектурных дефектов и рисков безопасности.

Вопрос: Как писать промпты, чтобы выходило безопаснее?

Ответ: Просите параметризацию, валидацию входа, deny-by-default, тесты и OWASP self-check. Давайте ссылку на внутренние безопасные обёртки.

Вопрос: Что делать с зависимостями и CVE?

Ответ: Включить SCA, автогенерацию PR на обновления, policy на блокировку известных уязвимостей, allowlist для пакетов.

Вопрос: Поможет ли RASP/WAF?

Ответ: Да, как дополнительный рубеж. Но это не замена secure coding и ревью — только один из слоёв защиты.

Вопрос: Как контролировать размер и качество PR?

Ответ: Линтеры и git-хуки с лимитом строк/файлов, чек-листы безопасности, обязательные ревьюеры по чувствительным зонам.

Вопрос: Нужны ли отдельные правила для фронтенда и мобайла?

Ответ: Да. Для фронта — XSS, CSP, безопасное хранение токенов; для мобайла — секреты, защита хранилищ, безопасные WebView и deeplink-и.

Вопрос: Как проверять ИИ-код на соответствие регуляторике (PII, финтех, здравоохранение)?

Ответ: Политики и автоматические проверки (policy-as-code), data lineage, DLP, шифрование «на покое» и в транзите, аудит доступа.

Вопрос: Помогают ли тесты безопасности, сгенерированные ИИ?

Ответ: Да, как старт. Но их нужно дополнять негативными сценариями, property-based и fuzzing, а также ручными проверками.

Вопрос: Можно ли подключать ИИ к код-ревью?

Ответ: Можно, как ко-ревьюера: подсветка подозрительных фрагментов, чек-листы. Финальная ответственность — у людей.

Вопрос: Как минимизировать риск хардкода секретов?

Ответ: Secret Manager, запрет на секреты в коде, pre-commit хуки и блокирующие проверки в CI, ротация ключей.

Вопрос: Где взять «правильные» безопасные сниппеты?

Ответ: Поддерживайте внутреннюю библиотеку обёрток и примеров, ссылку на неё включайте в промпты и документацию.

Вопрос: А если у нас legacy и без ИИ всё плохо?

Ответ: Начните с инвентаризации рисков, включите SCA/SAST/secret scan, стабилизируйте пайплайн и только потом масштабируйте ИИ.

Вопрос: Как измерять успех безопасной интеграции ИИ?

Ответ: DORA + security KPI: время до фикса уязвимостей, количество блокированных секретов, доля уязвимых зависимостей, размер PR, покрытие тестами.

Вопрос: Нужны ли отдельные среды для экспериментов с ИИ?

Ответ: Да. Песочницы без доступа к прод-данным, с ограниченными правами и мониторингом.

Вопрос: Может ли ИИ улучшать архитектуру?

Ответ: Может, если давать правильный контекст, ограничения и примеры. Но итоговую архитектуру утверждает архитектор/техлид.

Вопрос: Как защититься от «копипасты» небезопасных решений из интернета?

Ответ: Политика источников, линтеры безопасных практик, ревью, обучение и внутренняя база «запрещённых» паттернов.

Вопрос: Заменит ли ИИ программистов?

Ответ: ИИ автоматизирует рутину и обогащает разработчика. Ответственность за архитектуру, безопасность, компромиссы и ценность — за людьми.

Вопрос: Как договориться между безопасностью и скоростью?

Ответ: Встроить безопасность в поток: автоматические гейты, чек-листы, малые PR, библиотеки безопасных абстракций. Тогда безопасность не «тормозит», а направляет.