
Автономная система киберзащиты на базе ИИ, использующая MCP, Gemini 2.0 Flash, Dynatrace observability и MongoDB. Заявка на хакатон Google Cloud.
Работа для Google Cloud Hackathon — Автономное обнаружение угроз и реагирование, оркестрируемое Google Cloud Agent Builder (Vertex AI Agent), работающее на Gemini 2.0 Flash, Model Context Protocol (MCP) и Dynatrace observability.
Группы безопасности сталкиваются с MTTD в 30 минут и MTTR в 4 часа для типичных инцидентов. К тому времени, как человек-аналитик обнаружит атаку, напишет правило брандмауэра и развернет его, ущерб уже нанесен.
SentinelMCP сокращает MTTD до и MTTR до , развертывая , который получает вебхуки аномалий Dynatrace, анализирует их с помощью Gemini 2.0 Flash и вызывает реальные средства защиты через MCP — воздействуя на живую инфраструктуру, а не просто оповещая.
Dynatrace webhook → Agent Builder receives alert → Gemini reasons → MCP tools execute → Threat neutralized
1 s 2 s 8 s 15 s 25 s total
Результат: жизненный цикл инцидента, который ранее требовал человека-аналитика и 4 часа, теперь завершается автономно менее чем за 30 секунд, с полным журналом аудита в MongoDB и распределенными трассировками в Jaeger.
┌──────────────────────────────────────────────────────────────────────┐
│ SANDBOX ENVIRONMENT │
│ │
│ ┌─────────────┐ 100–1000 req/s ┌──────────────────────────┐ │
│ │ attacker │ ──────────────────►│ victim-service │ │
│ │ (DDoS/SQLi) │ │ port 8080 │ │
│ └─────────────┘ │ /admin/* control API │ │
│ └────────────┬─────────────┘ │
└───────────────────────────────────────────────────│──────────────────┘
│ metrics + anomaly webhook
┌────────────────────────────────▼─────────────────┐
│ Dynatrace Mock (anomaly engine) │
│ Threat Risk Score → fires POST /alerts/simulate │
└────────────────────────┬─────────────────────────┘
│ webhook
┌─────────────────────────────────▼──────────────────────────┐
│ Google Cloud Agent Builder (Vertex AI Agent) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Gemini 2.0 Flash ── reasons over threat context │ │
│ │ Tool manifest ── dynamically fetched from MCP │ │
│ │ HITL gate ── halts if confidence < threshold │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────┬─────────────────────────┬───────────────────┘
│ REST calls │ audit write
┌───────────────▼──────┐ ┌────────────▼──────────┐
│ MCP Server :8001 │ │ MongoDB 7.0 Atlas │
│ 11 real tools │ │ incidents + traces │
└───────────┬──────────┘ └───────────────────────┘
│ acts on live infra
┌───────────▼──────────┐
│ FastAPI :8000 │
│ victim-service :8080│
└──────────────────────┘
┌──────────────────────────────────────────────────┐
│ OBSERVABILITY STACK │
│ OTel Collector ──► Jaeger (distributed traces) │
│ Prometheus ──────────────► Grafana │
└──────────────────────────────────────────────────┘
Ключевой принцип проектирования: Graceful degradation + Human-in-the-Loop (HITL). Агент Agent Builder безопасно останавливается и передает управление обратно оператору, когда не может принять решение с достаточной уверенностью — он никогда не гадает на критической инфраструктуре.
Все три сервиса развернуты и работают на Google Cloud Run:
| Сервис | URL |
|---|---|
| Центр управления (Панель) | https://sentinel-api-62d3d66zda-uc.a.run.app/dashboard |
| Документация Swagger API | https://sentinel-api-62d3d66zda-uc.a.run.app/docs |
| Проверка здоровья | https://sentinel-api-62d3d66zda-uc.a.run.app/health |
| Каталог инструментов MCP | https://sentinel-mcp-62d3d66zda-uc.a.run.app/mcp/tools |
| Сервис жертвы | https://victim-service-62d3d66zda-uc.a.run.app |
Запустите живую атаку на production:
.\attack.production.ps1 status # verify all services healthy
.\attack.production.ps1 ddos # DDoS — Gemini blocks IPs + rate limit
.\attack.production.ps1 sql # SQL Injection — Gemini activates WAF
.\attack.production.ps1 brute # Brute Force — Gemini blocks source IPs
.\attack.production.ps1 stop # reset defenses
Контейнер атакующего запускается локально и нацеливается на Cloud Run victim-service через HTTPS. Смотрите панель Центра управления для полного цикла обнаружение → анализ → нейтрализация в реальном времени.
Google Cloud Agent Builder (Vertex AI ReasoningEngine) является центральным оркестратором SentinelMCP. Реализация находится в sentinel_mcp/agent/agent_builder.py.
SentinelAgent наследуется от vertexai.preview.reasoning_engines.Queryable — официального программного интерфейса Agent Builder — и может запускаться локально или быть развернут в управляемый сервис Agent Builder одной командой.
| Обязанность | Реализация |
|---|---|
| Прием вебхуков | SentinelAgent.query(incident=...) — вызывается Agent Builder для каждого оповещения Dynatrace |
| Объявления инструментов | 6 инструментов MCP зарегистрированы как объекты Vertex AI FunctionDeclaration в set_up() |
| Рассуждение | Gemini 2.0 Flash читает контекст угрозы + каталог инструментов, выбирает минимальные инструменты, автоматически их вызывает |
| Ворота HITL | Если Gemini не возвращает вызовов инструментов (уверенность < порога), выдается escalate_to_humans=True |
| Аудит | Каждый вызов инструмента записывается в MongoDB Atlas + экспортируется как OTel span в Jaeger |
Ключевой код — sentinel_mcp/agent/agent_builder.py:
class SentinelAgent(reasoning_engines.Queryable):
def set_up(self):
# MCP tools as Vertex AI FunctionDeclarations — Gemini selects at runtime
mcp_tools = Tool(function_declarations=[
FunctionDeclaration(name="block_ip_address", ...),
FunctionDeclaration(name="activate_waf", ...),
FunctionDeclaration(name="rate_limit_requests", ...),
FunctionDeclaration(name="scale_service", ...),
FunctionDeclaration(name="collect_forensic_logs", ...),
FunctionDeclaration(name="analyze_attack_pattern", ...),
])
self._model = GenerativeModel("gemini-2.0-flash-001", tools=[mcp_tools])
self._chat = self._model.start_chat()
def query(self, *, incident: dict) -> dict:
# Entry point — Agent Builder calls this for every Dynatrace webhook
response = self._chat.send_message(threat_prompt(incident))
tool_calls = [{"name": p.function_call.name, "args": dict(p.function_call.args)}
for p in response.candidates[0].content.parts if p.function_call]
return {"engine": "agent_builder", "tool_calls": tool_calls, ...}
Развертывание в Google Cloud Agent Builder:
# Test locally (no GCP needed with google_ai_studio backend)
python scripts/deploy_agent_builder.py --test-only
# Deploy to managed Agent Builder endpoint
python scripts/deploy_agent_builder.py --project my-gcp-project
Установка Agent Builder в качестве активного бэкенда:
# .env
GEMINI_BACKEND=agent_builder
GOOGLE_CLOUD_PROJECT=my-gcp-project
VERTEX_LOCATION=us-central1
SentinelMCP интегрирует наблюдаемость Dynatrace на трех уровнях:
OpenTelemetry pipeline — sentinel-otel-collector принимает spans и метрики от ядра FastAPI и пересылает их на конечную точку Dynatrace Mock (OTLP/HTTP :14318). Каждый инцидент, выполнение инструмента и вызов LLM трассируются от начала до конца с полными корреляционными идентификаторами.
Anomaly Engine with auto-trigger — dynatrace-mock запускает фоновый цикл, который отслеживает http_requests_total, вычисляет Threat Risk Score (dynatrace_mock_sentinel_risk_score, 0–10) и автоматически отправляет POST /api/v1/alerts/simulate/{type} в SentinelMCP, когда оценка превышает критический порог — воспроизводя точное поведение производственного вебхука обнаружения аномалий Dynatrace Davis.
Grafana dashboard fed by Dynatrace metrics — датчик Risk Score и временная шкала потребляют dynatrace_mock_sentinel_risk_score напрямую, что позволяет визуализировать точный момент, когда Dynatrace зафиксировал аномалию, по сравнению с моментом, когда SentinelMCP достиг нейтрализации.
Агент Gemini динамически обнаруживает свои защитные возможности во время выполнения — никаких жестко заданных списков инструментов, никакого переписывания подсказок при изменении возможностей:
GET /mcp/tools → returns 11 tool descriptors → Gemini selects and invokes tools
Каждый инструмент помечен как REAL или Audit-Only в живом каталоге. Gemini читает этот флаг, понимает, что он может реально сделать на живой инфраструктуре, и обосновывает каждый выбор инструмента в своей трассировке рассуждений. Добавление новой защитной возможности не требует никакого инженерного промпта.
Инструменты, действующие на живую инфраструктуру:
| Инструмент | Что делает |
|---|---|
block_ip_address | POST /admin/block_ip — блокирует IP-адреса атакующего в работающем промежуточном ПО |
activate_waf | POST /admin/waf — включает режим блокировки WAF в работающем сервисе |
rate_limit_requests | POST /admin/rate_limit — скользящий оконный ограничитель скорости, действует немедленно |
scale_service | Docker SDK через сокет — запускает реальные реплики контейнеров под нагрузкой |
rollback | POST /admin/reset_defenses — демонстрирует полный жизненный цикл инцидента: атака → защита → восстановление |
collect_forensic_logs | Захватывает реальные доказательства из работающих контейнеров для последующего анализа инцидента |
build_attack_timeline | Хронологическая шкала из живых журналов контейнеров |
analyze_attack_pattern | Классифицирует тип атаки с реальными данными контекста инцидента |
identify_iocs | Извлекает реальные IP, user-agent и полезные данные из живых файлов инцидентов |
Требования: Docker Desktop 24+, учетные данные Google Cloud или ключ API AI Studio, ~3 ГБ диска, ~2 ГБ ОЗУ.
docker compose up -d --build
Первый запуск загружает базовые образы (~3 ГБ, 5–10 мин). Последующие запуски занимают менее 1 минуты.
cd simulacion
docker compose up -d victim-service
cd ..
docker compose ps
# Expected: 8 services running/healthy
curl http://localhost:8000/health
# Expected: {"status": "healthy", "service": "SentinelMCP", ...}
.\attack.ps1 ddos # DDoS-атака (по умолчанию)
.\attack.ps1 sql # SQL-инъекция
.\attack.ps1 brute # Атака перебором
.\attack.ps1 stop # Остановить атаку + сбросить защиту
.\attack.ps1 status # Проверить состояние системы
Откройте Центр управления во время атаки:
http://localhost:8000/dashboard
Наблюдайте за 4 фазами в течение ~25 секунд:
THREAT DETECTED — Dynatrace отправляет оповещениеDEFENDING — Gemini читает каталог инструментов MCP, выбирает действия, записывает рассужденияNEUTRALIZED — MTTD и MTTR отображаются с полным журналом аудитаSentinelMCP построен на Gemini. Выберите метод аутентификации, подходящий для вашей среды:
Вариант A — Google AI Studio (самая быстрая настройка):
# Отредактируйте .env
GOOGLE_API_KEY=AIza...your_key_here
GEMINI_BACKEND=google_ai_studio
Вариант B — Vertex AI на Google Cloud:
gcloud auth application-default login
.\scripts\setup_gcloud.ps1 # устанавливает проект, создает ключ SA, автоматически обновляет .env
Затем перезапустите AI-движок: docker compose restart api
| URL | Что показывает |
|---|---|
| https://sentinel-api-62d3d66zda-uc.a.run.app/dashboard | Центр управления — основной демо-интерфейс |
| https://sentinel-api-62d3d66zda-uc.a.run.app/docs | Swagger — интерактивный обозреватель API |
| https://sentinel-api-62d3d66zda-uc.a.run.app/health | Проверка здоровья |
| https://sentinel-api-62d3d66zda-uc.a.run.app/api/v1/incidents | История инцидентов (JSON) |
| https://sentinel-mcp-62d3d66zda-uc.a.run.app/mcp/tools | Живой каталог инструментов MCP в том виде, в котором его читает Gemini |
| https://victim-service-62d3d66zda-uc.a.run.app | Сервис жертвы (цель под атакой) |
| URL | Что показывает |
|---|---|
http://localhost:8000/dashboard | Центр управления — основной демо-интерфейс |
http://localhost:8000/docs | Swagger — интерактивный обозреватель API |
http://localhost:8000/api/v1/incidents | История инцидентов (JSON) |
http://localhost:8000/api/v1/incidents/statistics/summary | Средние значения MTTD / MTTR по всем инцидентам |
http://localhost:8001/mcp/tools | Живой каталог инструментов MCP в том виде, в котором его читает Gemini |
http://localhost:8080 | Сервис жертвы (цель под атакой) |
http://localhost:14499 | Dynatrace Mock — живые метрики + механизм аномалий |
http://localhost:16686 | Jaeger — распределенные трассировки |
http://localhost:9090 | Prometheus — сырые метрики |
http://localhost:3000 | Grafana — панель инфраструктуры (admin / admin) |
| Сценарий | Скрипт | Что происходит |
|---|---|---|
| DDoS | .\attack.ps1 ddos | 1000 запросов/с флуд; Gemini блокирует IP + включает ограничение скорости |
| SQL Injection | .\attack.ps1 sql | Обнаружение полезной нагрузки; Gemini активирует WAF в режиме блокировки |
| Brute Force | .\attack.ps1 brute | Перебор логинов; Gemini блокирует исходные IP + включает WAF |
| Auto-mode | Панель 🎯 Auto ON | Случайные атаки каждые 45–90 с, полностью автономный ответ |
GET http://localhost:8001/mcp/tools
| Инструмент | Категория | Режим |
|---|---|---|
analyze_attack_pattern | анализ | REAL |
identify_iocs | анализ | REAL |
block_ip_address | защита | REAL → victim-service |
activate_waf | защита | REAL → victim-service |
rate_limit_requests | защита | REAL → victim-service |
scale_service | защита | REAL → Docker SDK |
collect_forensic_logs | криминалистика | REAL |
build_attack_timeline | криминалистика | REAL |
patch_vulnerabilities | исправление | Audit-Only |
apply_hardening | исправление | Audit-Only |
rollback | исправление | REAL → victim-service |
SentinelMCP использует безопасный аудит-режим. Если целевая инфраструктура недоступна, агент записывает запланированные действия без нарушения конвейера, обеспечивая graceful degradation. Gemini читает флаг REAL / Audit-Only в каталоге — он точно знает, что может выполнить, а что может только рекомендовать.
sentinel_mcp/
├── api/ Ядро FastAPI — маршруты, схемы, пользовательский интерфейс панели управления
├── agent/ Движок принятия решений + провайдеры LLM (Gemini 2.0 Flash, Vertex AI)
├── mcp_server/ MCP сервер + 11 реализаций инструментов
├── services/ Сервис инцидентов, оркестратор исправлений, калькулятор угроз
├── observability/ Провайдеры OTel / Dynatrace / SigNoz
└── core/ Конфигурация, логирование, исключения
simulacion/
├── victim-service/ Целевой сервис FastAPI с плоскостью управления /admin/*
└── attacker/ Движок атак на Python (DDoS / SQL-инъекции / перебор)
docker/
├── prometheus.yml Конфигурация сбора (victim-service с интервалом 5 с)
└── grafana/ Автоматически подготовленная панель — 6-панельная инфраструктурная панель
| Слой | Технология |
|---|---|
| Оркестратор агента | Google Cloud Agent Builder (Vertex AI Agent) |
| LLM | Gemini 2.0 Flash — через SDK google-genai |
| Протокол инструментов | MCP (Model Context Protocol) — 11 реальных инструментов |
| API | FastAPI + Uvicorn (Python 3.11) |
| База данных | MongoDB 7.0 Atlas (Motor async) |
| Наблюдаемость | OpenTelemetry → Dynatrace |
| Трассировка | Jaeger |
| Метрики | Prometheus + Grafana |
| HTTP клиент | httpx (async) |
| Оркестрация контейнеров | Docker Compose v2 |