Безопасность ИИ: как перестать анализировать каждое новое ПО и перейти к системному подходу

Безопасность ИИ: как перестать анализировать каждое новое ПО и перейти к системному подходу

За последние два-три года компании в РФ перестали воспринимать ИИ как «чудо-машину» и начали активно внедрять его в рабочие процессы — от поддержки в чатах до написания кода и создания продуктов. Сегодня использование ИИ стало must have для специалистов. В этой статье речь пойдёт о безопасной разработке с генеративными ИИ, особенно в контексте ИИ-агентов.

Что происходит на рынке

Крупные отчёты NIST, ENISA и других регуляторов фиксируют: генеративный ИИ уже используется в разработке, тестировании и эксплуатации систем. Его применяют в DevSecOps — от code review до генерации инфраструктурного кода и управления конфигурациями.

Особое внимание стоит уделить так называемому «vibe coding» и coding-агентам — ИИ, которые работают в IDE, терминале или CI, умеют писать и запускать код, управлять файловой системой и git'ом.

Каждый такой инструмент — не просто «ещё одна модель», а новый элемент инфраструктуры. Вместе они формируют новый ландшафт угроз, который не покрывается классическим OWASP Top 10.

Дополнение — OWASP Top 10 for LLM Applications — выделяет риски, ранее не характерные для веб-приложений: prompt injection, небезопасная обработка вывода модели, чрезмерные полномочия агента, утечки секретов через контекст и другие.

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

Основные термины в новой ИИ-реальности

LLM (Large Language Model) — большие языковые модели, способные генерировать текст, код и другие форматы. В контексте безопасности важно, что они могут принимать текстовый ввод и выполнять действия: писать код, управлять файлами, вызывать API.

Основные функции LLM:

  • анализ и генерация кода
  • принятие решений по типу «какой следующий шаг»
  • формирование запросов к инструментам (shell, git и др.) через прослойку

Типичные права моделей:

  • доступ к исходникам (read, реже write)
  • доступ к конфигам и логам
  • доступ к секретам через переменные окружения

Ключевые риски:

  • prompt injection — модель можно «переубедить» выполнить нежелательное действие
  • небезопасная обработка вывода — текст модели без фильтрации может попасть в shell, SQL или CI
  • утечки данных — модель может раскрыть секреты или слить конфиденциальные данные

MCP (Model Context Protocol) — протокол, стандартизирующий подключение внешних инструментов к модели. Он описывает:

  • доступные tools (чтение файлов, вызов HTTP, работа с БД)
  • их параметры и возвращаемые значения
  • ограничения и политики (директории, домены, методы)

Функции MCP:

  • связывает модель с внешним миром
  • позволяет переиспользовать tools с разными моделями
  • структурирует взаимодействие: модель вызывает именованные действия, а не просто генерирует текст

Права MCP:

  • доступ к файловой системе
  • доступ к git
  • доступ к сетевым сервисам
  • редко — доступ к конфигам

Риски MCP:

  • небезопасный дизайн tools (слишком широкие полномочия)
  • отсутствие scoping (один сервер видит несколько репозиториев)
  • отсутствие явной политики использования tools

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

Функции ИИ-агентов:

  • автоматизация рутинных задач разработчиков и DevOps
  • полуавтоматический рефакторинг и code review
  • работа с баг-репортами и тикетами
  • автономное выполнение сценариев

Права ИИ-агентов:

  • read/write в репозиториях и директориях
  • вызов shell-команд, доступ к git и тестовым раннерам
  • доступ к облачным sandbox'ам

Риски:

  • чрезмерная агентность (агент получает root-доступ)
  • инъекции (командная, файловая, конфигурационная) в LLM-контексте
  • утечки секретов при логировании, аналитике, prompt-инжекции

Sandboxes — контейнерные песочницы, ограничивающие права и scope ИИ-агентов.

Исследование ИИ-агентов: что показал исходный код

ИИ-агенты следует рассматривать как обычное ПО. Для анализа я использовал semgrep для open-source решений и grep для проприетарных, фокусируясь на паттернах из OWASP Top 10 и LLM Top 10.

Анализировал несколько агентов (Nymbalist, Serena, NanoClaw, GoClaw, VibeKit), которые работают как «обвязка» вокруг LLM. Подход:

  • статический анализ по правилам OWASP и LLM Top 10
  • ручной разбор реализации sandbox, работы с секретами, мостов между LLM и инструментами
  • динамические тесты в лаборатории с honeypot-файлами

Чем «болеют» ИИ-агенты?

Картина однотипная:

  • Bash / shell-доступ — все агенты могут вызывать shell через spawn/exec, docker exec, SSH и т.п.
  • Доступ к git с широкими правами — создание веток, коммитов, pull-requests. MCP-инструменты могут вызывать git напрямую.
  • Флаги bypassPermissions — режимы вроде allowDangerouslySkipPermissions: true, дающие агенту root-доступ без ограничений. При включении по умолчанию это создаёт высокий риск бесконтрольной поставки кода.

Какие возникают риски?

Сопоставление симптомов с OWASP LLM Top 10:

  • LLM01 (prompt injection) — через инъекцию можно заставить агента выполнить reverse shell
  • LLM02 (insecure output handling) — вывод модели без проверки приводит к выполнению опасных команд
  • LLM07 (insecure plugin/tool design) — MCP-инструменты с избыточными правами

При слабом контроле и высоком доверии возможны:

  • выполнение произвольных команд (включая reverse shell)
  • развёртывание криптомайнеров
  • считывание и выгрузка SSH-ключей, токенов
  • модификация кода с backdoor'ами
  • обход sandbox через docker.sock
  • боковое движение через git, CI/CD, внутренние API
  • утечки секретов через логи и аналитику

Безопасность ИИ-агентов от разработчиков

Некоторые разработчики внедряют меры безопасности:

  • Sandbox по умолчанию — например, VibeKit использует Docker/Podman-песочницу с ограниченным workspace, управляемой сетью и ужесточёнными правами
  • Управление секретами — отдельные модули для хранения и маскировки секретов
  • Наблюдаемость с фокусом на безопасность — логи и дашборды, показывающие, с какими файлами и tools работал агент
  • Документация по безопасной эксплуатации — рекомендации по запуску в изолированных профилях, ограничению сети, запрету доступа к прод-секретам

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

Системный подход: убрать слово «ИИ»

Если исключить слово «ИИ», картина упрощается: перед нами просто сервис (blackbox) с широкими правами — чтение/запись файлов, выполнение команд ОС, сетевые запросы, push в git.

Такую систему нужно оценивать через классические домены безопасности:

  • Идентификация, аутентификация, авторизация — актор (человек или сервис) должен быть аутентифицирован, его действия — залогированы, доступы — сопоставлены с правами в целевой системе
  • Минимальные привилегии — чётко определить scope: один репозиторий или монорепо? read-only или запись? только тесты или миграции? Каждый ответ — правило в policy
  • Изоляция — где работает агент: в контейнере, на dev-машине, в CI runner? Какие директории смонтированы? Есть ли доступ к docker.sock или Kubernetes API?
  • Сетевой контроль — может ли агент вызывать внешние API? Только через прокси? Как отслеживаются обращения к доменам не из white-list?
  • Логирование и мониторинг — что пишется в логи и как долго хранится?

Не нужен новый фреймворк — достаточно классического подхода с пониманием, что из себя представляет ИИ-агент под капотом:

  1. Статический анализ кода и конфигов (профиль под OWASP + LLM Top 10)
  2. Динамические тесты в лаборатории с honeypot-файлами и включённой песочницей
  3. Чёткие правила авторизации: какие директории, tools и сети доступны
  4. Обязательный аудит и алерты на нетипичные действия

Как — и не тормозить разработку

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

Главная задача безопасности — не тормозить внедрение, а сделать его управляемым.

  1. Вместе с разработчиками исследовать стек ИИ-агентов, декомпозировать на слои: модель, обвязка, tools, sandbox и т.д.
  2. Выявить общие черты и разработать единый профиль безопасности, который урезает лишние права, но сохраняет функциональность. Определить: какие права нужны, какие mounts недопустимы, какие сети разрешены, что логируется.
  3. Тестировать гипотезы в изолированной лаборатории с honeypot-файлами и фейковыми секретами. Сначала убедиться, что агент ничего лишнего не видит и не делает, только потом пускать к реальным репозиториям.

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

Читать оригинал