- Отравление — сервер был вредоносным с самого начала. Его манифест выглядел безвредным; опасное поведение было в реализации инструмента, а не в объявленных областях.
- Rug-pull — вы ему доверяли, потом он изменился. Появился новый инструмент, тихо добавленный оператором сервера, или запись в community-реестре была захвачена и обновлена для звонка домой.
1. Как отравление инструментов MCP достигает ваших агентов
Каждыйtools/call, инициируемый вашим агентом, проходит через объявленный
набор инструментов MCP-сервера. Отравленный или подвергшийся rug-pull сервер
эксплуатирует это доверие несколькими способами:
| Вектор | Что происходит |
|---|---|
| Необъявленный инструмент | Новый инструмент появляется в tools/list, который манифест сервера никогда не объявлял. Ваш агент находит его и вызывает. |
| Захваченная запись реестра | Листинг в community-реестре захватывается; эндпоинт теперь указывает на сервер, контролируемый злоумышленником. |
| Сбор учётных данных | Реализация инструмента сервера отправляет собранные входные данные на внешний хост. |
| Prompt injection через результат инструмента | Инструмент возвращает контролируемый злоумышленником текст, перенаправляющий следующее действие агента. |
2. Защиты OrcaRouter
2.1 Каждый tools/call оценивается firewall’ом до выполнения
MCP-серверы подключаются к вашим агентам через MCP gateway Firewall по адресу
/api/v1/firewall/mcp. Шлюз не пересылает вызов инструмента до тех пор, пока
движок firewall не оценит его против вашей политики.
Это означает, что ваш allow-list — источник истины, а не манифест инструментов
сервера. Если rug-pull добавляет shell.exec и ваша политика не имеет правила,
разрешающего его, вердикт — deny, и вызов никогда не покидает шлюз. Модель
получает ошибку инструмента (firewall deny: …) и может среагировать; добавленный
злоумышленником инструмент мёртв при поступлении.
Вердикты, которые может вернуть движок:
| Вердикт | Эффект |
|---|---|
allow / audit | Вызов пересылается; audit дополнительно логирует аргументы. |
sanitize | Аргументы переписываются перед пересылкой. |
deny | Вызов заблокирован; модель получает ошибку инструмента. |
pending_approval | Вызов удерживается; человек должен одобрить до выполнения. |
cap_cost | Ограничение стоимости применено; вызов заблокирован, если превысит его. |
2.2 Автоматически обнаруженные возможности помещаются в карантин до проверки
Когда агент самостоятельно устанавливает возможность — или rug-pull добавляет новые инструменты, которых не было при регистрации сервера — Firewall автоматически обнаруживает новую возможность вне горячего пути, синтезирует манифест, сканирует его и назначает risk band и режим применения. Важно, что автоматически обнаруженные возможности всегда помещаются в карантин независимо от результата сканирования: они удерживаются вpending_approval до проверки человеком.
Вот как сдерживаются rug-pulls. Оператор не может тихо добавить новый инструмент
и заставить ваших агентов начать его использовать — эти вызовы удерживаются до
тех пор, пока вы не осмотрите и не одобрите новую возможность.
2.3 Сканирование навыков назначает risk band и режим применения
Каждая устанавливаемая возможность — зарегистрированная вами или автоматически обнаруженная Firewall — проходит через сканер навыков. Сканер выполняет детерминированные проходы по манифесту и объявленным областям:- prompt_injection — текст манифеста, пытающийся захватить инструкции.
- tool_creep — инструменты, которые манифест использует, но никогда не объявлял.
- network_egress — HTTP(S)-хосты вне одобренных сетевых областей.
- fs_write_unsafe — файловый доступ на запись вне
/tmp.
low / medium / high / critical)
и режим применения:
| Режим | Что происходит во время выполнения |
|---|---|
allow | Навык ничего своего не налагает; правила вашей политики решают. |
quarantine | Любой вердикт, не являющийся deny, эскалирует до pending_approval. Человек должен одобрять каждый вызов инструмента. |
block | Принудительный deny для всех инструментов этого навыка, независимо от правил политики. |
high автоматически помещается в карантин; critical — блокируется.
Одна находка error (например, tool_creep для необъявленного shell.exec)
достаточна для блокировки навыка, даже когда его числовая оценка выглядит низкой.
Режим только ужесточается — одобрение навыка никогда не ослабляет блокировку,
установленную свежим сканированием.
2.4 Учётные данные хранятся в зашифрованном виде
Auth-секреты серверов шифруются в состоянии покоя с ключом секретов рабочего пространства и внедряются шлюзом во время диспетча. Они никогда не достигают модели, агента или аргументов вызова. Скомпрометированный сервер не может эксфильтрировать ваши API-ключи, читая собственныйauth_json.
Контрольный список проверки стороннего MCP-сервераПеред регистрацией внешнего MCP-сервера:
- Проверьте личность издателя — кто контролирует URL эндпоинта?
- Прочитайте исходный код или changelog; ищите новые инструменты, добавленные после первоначального выпуска.
- Проверьте, не возвращает ли сканирование навыков никаких находок
tool_creepилиprompt_injectionпри регистрации. - Назначьте правило firewall с
tool_name_glob: <server>.*наauditилиpending_approvalдо получения истории вызовов. - Просмотрите находки
network_egress: утверждает ли манифест, что ему нужен только один домен, но в описаниях инструментов упоминаются другие? - Повторно зондируйте сервер после любого обновления версии upstream
(
POST /api/workspace/firewall/mcp_servers/:id/probe) для обнаружения новых инструментов.
3. Что делать после предполагаемого rug-pull
- Немедленно отключите сервер — отключённый сервер удаляется из runtime-реестра
и его учётные данные никогда не дешифруются. Используйте
PUT /api/workspace/firewall/mcp_serversс"enabled": false. - Повторно зондируйте для обнаружения изменений —
POST /api/workspace/firewall/mcp_servers/:id/probeвыполняетtools/listи возвращает любые новые инструменты, появившиеся с момента последнего зондирования. - Повторно сканируйте запись навыка —
POST /api/workspace/firewall/skills/:id/rescanповторно запускает сканер против обновлённого манифеста. Если вердикт ухудшается доflaggedилиblocked, Firewall выпускает событие в вашей ленте. - Просмотрите очередь
pending_approval— все вызовы, удержанные с момента rug-pull, в очереди. Осмотрите и отклоните их, а не одобряйте оптом. - Проверьте лог вызовов — проверьте журнал событий Firewall на вызовы, прошедшие до обнаружения изменения.
4. Совмещение сканирования навыков с правилами firewall
Сканирование навыков и правила firewall взаимодополняющие и компонуются:- Правило с
tool_name_glob: community.*, установленным наpending_approval, гарантирует проверку каждого вызова от сервера из community-реестра независимо от risk band. - Навык в карантине переопределяет правило
allow— даже если ваша политика широко разрешаетhttp.fetch, навык в карантине, которому принадлежит этот инструмент, всё равно удерживает вызов. - Используйте
skill_name_globв правиле для назначения более строгих политик ненадёжным серверам без затрагивания ваших first-party интеграций.
5. Связанные угрозы
- Опасные вызовы инструментов — правила для блокировки деструктивных или необратимых действий инструментов независимо от источника.
- Эксфильтрация данных — правила egress, ограничивающие адреса назначения, куда вызовы инструментов могут отправлять данные.
- Модель угроз — полная поверхность атаки, для защиты которой разработан OrcaRouter.
Firewall: MCP-серверы
Регистрируйте MCP-серверы за шлюзом, зондируйте их инструменты и применяйте
вердикты на каждый вызов до его достижения реального сервера.
Firewall: Навыки
Сканируйте и оценивайте по риску каждую устанавливаемую возможность. Помещайте
в карантин или блокируйте рискованные навыки до запуска их инструментов.
