Вайб-кодинг и безопасность: агент в контуре разработки

English version

Вайб-кодинг · безопасность агентов в разработке

Вайб-кодинг и безопасность: агент в контуре разработки

Вайб-кодинг (vibe coding) — разработка, в которой код по описанию на естественном языке пишет ИИ-агент, а человек принимает результат, почти не вчитываясь в код. Термин предложил Андрей Карпатый в феврале 2025 года. Агент в такой разработке действует выданным токеном — с доступом к репозиторию, секретам сборки, оболочке и сети, — поэтому его ошибка или чужая инструкция, спрятанная в зависимости, задаче или комментарии кода, становится действием с этими правами. В апреле 2026 года агент Cursor удалил том с промышленной базой PocketOS; в июле агент Codex в режиме полного доступа удалял файлы, а у одного пользователя — промышленную базу (разбор инцидентов). Ниже — что требует норма для государственных систем и где в конвейере ставится детерминированный барьер.


Что требует Приказ ФСТЭК России № 117

для государственных информационных систем и систем госорганов, ГУП и госучреждений; в силе с 01.03.2026 взамен приказа № 17, изменения — приказ № 137 от 08.05.2026 · Проверено: 16.10.2026 — по тексту Требований в ред. от 08.05.2026 и тексту проекта изменений 170500; кратко — приказ № 117 по тексту.

  • п. 34 «т»: защита информации при использовании искусственного интеллекта — одно из 21 обязательного мероприятия;
  • п. 60: исключить несанкционированный доступ и воздействие на систему через наборы данных, модели ИИ и их параметры; не передавать разработчику модели информацию ограниченного доступа, в том числе для улучшения модели;
  • п. 61: шаблоны или допустимые тематики запросов и ответов с контролем соответствия, статистические критерии недостоверных ответов, исключение нерегламентированного влияния ИИ на модель и работу системы;
  • проект изменений от 24.08.2026 (regulation.gov.ru, № 170500), с 01.03.2027: отдельный сегмент для моделей ИИ, минимальные права, меры для агентов ИИ, в том числе автономных, против несанкционированного воздействия на ресурсы системы — разбор проекта.

Где болит

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


Чем закрывается

MITR Sentinel. Вызов инструмента перехватывается до исполнения и проверяется детерминированно, по заданным правилам: вывод секретного ключа наружу, выход за рабочую директорию, разрушающая операция с базой без условия, опасная команда оболочки — не доходят до исполнителя, если совпали с образцом запрета. Проверка воспроизводима: один вызов — один вердикт; при блокировке агент получает причину отказа — сработавшее правило. Граница: правила сопоставляют аргументы с образцами, и вызов, изменённый до неузнаваемости, может пройти — так сказано в описании пакета. Открытый код — ниже.

Открытый код · Apache-2.0 · mcp-sentinel 1.1.2

Установочный пакет (.whl) ↓

mcp_sentinel-1.1.2-py3-none-any.whl · sha256: 681a4db59a1a44e89a2b1386ec4b4f2e1fc23c1025c295b9ebf00fd5d20901ea

Исходники (.tar.gz) ↓

mcp_sentinel-1.1.2.tar.gz · sha256: abb88978db7b34a2f1f56e0eff42bcd1365b9cc0eb17e4a4380f7815e4f1b79e

Исходный код: https://git.isslab.ru/isslab/mcp-sentinel

Замер: проверка контрактов в памяти: медиана 0,015 мс; полный цикл с записью решения в журнал на диск: медиана 22,5 мс (N=100).

Противоречие: агент должен действовать свободно, чтобы решать задачи, — и каждое его действие должно быть гарантированно безопасным. Разрешение по ТРИЗ: мысль модели остаётся свободной, а дискретный вызов инструмента проверяется отдельно от неё: открытый пакет сверяет вызов и ответ инструмента с заданными правилами и возвращает агенту причину отказа, чтобы тот не повторял недопустимое.

ISS Ledger 117. Каждое решение барьера в конвейере пишется в журнал с хеш-цепочкой по ГОСТ «Стрибог»: что запрашивалось, какое условие проверялось, каков исход и когда. Выборочная правка записи задним числом рвёт цепочку, и проверяющий видит разрыв; полную перезапись журнала тем, у кого есть доступ к файлу, цепочка без внешнего свидетеля не обнаруживает.

Открытый код · Apache-2.0 · iss-ledger-117 1.1.1

Установочный пакет (.whl) ↓

iss_ledger_117-1.1.1-py3-none-any.whl · sha256: 8d4ffe60f41ebd377c476f369655aaef5e0ac91858a3d294be37fd1e3100bc87

Исходники (.tar.gz) ↓

iss_ledger_117-1.1.1.tar.gz · sha256: 6eccef523e24fa60fed29c78866ff12afbab092bd17d51642e00d34dfcea9fa5

Проверщик одним файлом ↓

iss_verifier.py · sha256: 1ff894574407307d33ec99115652bcaec4e53d06189178696d0db1c767a8608f

Исходный код: https://git.isslab.ru/isslab/iss-ledger-117

Замер: контрольные векторы ГОСТ по RFC 6986 (M1, M2) проходят; автономный однофайловый проверщик для изолированных контуров.

Противоречие: журнал аудита должен иметь доказательную силу для регулятора — и не должен зависеть от закрытых серверов доверия и внешних поставщиков. Разрешение по ТРИЗ: цепочка квитанций по ГОСТ Р 34.11-2012 на чистом Python без зависимостей, целостность пересчитывается однофайловым скриптом в изолированном контуре, без доверия к разработчику.

Куда встаёт шлюз допустимостиОбёртка-прокси между агентом и настоящим MCP-сервером: допущенный вызов проходит к исполнителю, недопустимый возвращается агенту причиной отказа, каждое решение пишется в журнал с хеш-цепочкой по ГОСТ, который пересчитывает внешний проверщик.Агент / IDEClaude Code · Cursor · MCP-клиентstdio · вызов инструментаmcp-sentinelобёртка-прокси в разрыве stdio4 контракта: FS-Jail · SQL-Guard ·Secret-Filter · Shell-Barrierдетерминированно, без второй моделиPERMIT · допущеноНастоящий MCP-сервердочерний процессИсполнениеФС · СУБД · оболочка · сетьОтказ — агентупричина отказа: нарушенное правило;вызов не исполняетсяBLOCKЖурнал ГОСТ «Стрибог»каждое решение, в хеш-цепочкерешение → записьпроверкаВнешний проверщикпересчитывает без ПО института
Ответ на вопрос «куда встаёт шлюз»: не вторая нейросеть и не сетевой экран, а прозрачная обёртка-прокси в разрыве stdio между агентом и настоящим MCP-сервером. Допущенный вызов проходит к исполнителю, недопустимый возвращается агенту причиной отказа и не исполняется, а каждое решение ложится в журнал с хеш-цепочкой по ГОСТ, целостность которой посторонний пересчитывает сам.

Быстрый старт: обернуть свой MCP-сервер

Уязвимый MCP-сервер не запускается напрямую — он оборачивается в mcp-sentinel wrap, и каждый вызов инструмента проверяется до исполнения, а ответ сервера — до передачи агенту. Пакет написан на чистом Python без сторонних зависимостей и ставится без доступа в сеть.

Установка

# изолированный контур: файлы .whl скачаны заранее, сеть не нужна
pip install --no-index --find-links ./wheels mcp-sentinel
# с доступом в сеть
pip install --find-links https://isslab.ru/wp-content/uploads/iss-utils/index.html mcp-sentinel

Конфигурация Claude Code / Cursor — claude_desktop_config.json или ~/.cursor/mcp.json

{
  "mcpServers": {
    "postgres-secure": {
      "command": "mcp-sentinel",
      "args": ["wrap", "--ledger", "/var/log/fstec117_audit.jsonl", "--agent", "claude-code", "--",
               "npx", "-y", "@modelcontextprotocol/server-postgres", "postgresql://user:pass@localhost/prod"]
    }
  }
}

Проверка одного вызова из консоли

mcp-sentinel check --tool sql_query \
  --args '{"query": "DROP TABLE users;"}'
# BLOCK — разрушающая операция DROP TABLE остановлена, код выхода 2

Агент на Python: подключение одним импортом — пакет iss-agent-kit

from iss_agent_kit import AgentGuard
guard = AgentGuard(ledger_path="/var/log/agent_gost.jsonl")
result = guard.run(execute_sql, "sql_query", {"query": "SELECT id FROM users WHERE id = 1;"})

Открытый код · Apache-2.0 · iss-agent-kit 0.1.1

Установочный пакет (.whl) ↓

iss_agent_kit-0.1.1-py3-none-any.whl · sha256: 7ed0ae9073f512a5cfd71b62904094ca36d0ae2fdb1b4bfff5900d3e368781c3

Исходники (.tar.gz) ↓

iss_agent_kit-0.1.1.tar.gz · sha256: 0314047404888c29a231fc8710874f15bc2bd75e2b89ba7c4c882da3c792116a

Исходный код: https://git.isslab.ru/isslab/iss-agent-kit

Команды этого раздела исполняются при приёмке каждой версии в чистом окружении без сети — теми же строками, что напечатаны здесь. Журнал по пути —ledger ведётся цепочкой по ГОСТ Р 34.11-2012 и пересчитывается внешним проверщиком без установки чужого программного обеспечения.


Вопросы

Что такое вайб-кодинг?

Разработка, в которой код по описанию на естественном языке пишет ИИ-агент, а человек принимает результат, почти не читая код. Термин предложил Андрей Карпатый в феврале 2025 года. Главный риск — в правах агента: он работает с репозиторием, секретами и оболочкой, и его ошибка становится действием с этими правами.

Как барьер встаёт в конвейер сборки?

Обёрткой: агент вызывает инструменты не напрямую, а через mcp-sentinel wrap, который проверяет каждый вызов до передачи в оболочку, репозиторий или базу. Установка из открытого пакета, без внешних зависимостей; конфигурация Claude Code и Cursor приведена ниже.

Какие именно действия блокируются?

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

Работает ли это в изолированном (air-gapped) контуре?

Да. Реализация на чистом Python без внешних зависимостей; журнал проверяется автономным однофайловым скриптом, переносимым на изолированную машину. Целевые ОС — Astra Linux, РЕД ОС, Альт Линукс.


Зачем это всё и чем ИБ 3.0 отличается от привычного стека — разбор на десять минут.

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