
Sistema autónomo de ciberdefensa impulsado por IA que utiliza MCP, Gemini 2.0 Flash, observabilidad de Dynatrace y MongoDB. Participación en el Google Cloud Hackathon.
Envío para Google Cloud Hackathon — Detección y remediación autónoma de amenazas orquestada por Google Cloud Agent Builder (Vertex AI Agent), impulsado por Gemini 2.0 Flash, Protocolo de Contexto de Modelo (MCP) y observabilidad de Dynatrace.
Los equipos de seguridad enfrentan un MTTD de 30 minutos y un MTTR de 4 horas para incidentes típicos. Cuando un analista humano detecta el ataque, redacta la regla de firewall y la despliega, el daño ya está hecho.
SentinelMCP reduce el MTTD a < 30 segundos y el MTTR a < 30 segundos mediante el despliegue de un agente de Google Cloud Agent Builder que recibe webhooks de anomalías de Dynatrace, razona sobre ellos con Gemini 2.0 Flash e invoca herramientas de defensa reales a través de MCP, actuando sobre la infraestructura en vivo, no solo alertando.
Webhook de Dynatrace → Agent Builder recibe alerta → Gemini razona → Herramientas MCP ejecutan → Amenaza neutralizada
1 s 2 s 8 s 15 s 25 s total
El resultado: un ciclo de vida de incidente que previamente requería un analista humano y 4 horas ahora se completa de forma autónoma en menos de 30 segundos, con un registro de auditoría completo en MongoDB y trazas distribuidas en Jaeger.
┌──────────────────────────────────────────────────────────────────────┐
│ ENTORNO SANDBOX │
│ │
│ ┌─────────────┐ 100–1000 req/s ┌──────────────────────────┐ │
│ │ atacante │ ──────────────────►│ victim-service │ │
│ │ (DDoS/SQLi) │ │ puerto 8080 │ │
│ └─────────────┘ │ API de control /admin/*│ │
│ └────────────┬─────────────┘ │
└───────────────────────────────────────────────────│──────────────────┘
│ métricas + webhook de anomalía
┌────────────────────────────────▼─────────────────┐
│ Dynatrace Mock (motor de anomalías) │
│ Puntuación de Riesgo de Amenaza → dispara POST │
│ /alerts/simulate │
└────────────────────────┬─────────────────────────┘
│ webhook
┌─────────────────────────────────▼──────────────────────────┐
│ Google Cloud Agent Builder (Vertex AI Agent) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Gemini 2.0 Flash ── razona sobre contexto de │ │
│ │ amenaza │ │
│ │ Manifiesto de herramientas ── obtenido │ │
│ │ dinámicamente desde MCP │ │
│ │ Puerta HITL ── se detiene si la confianza es │ │
│ │ menor al umbral │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────┬─────────────────────────┬───────────────────┘
│ Llamadas REST │ escritura de auditoría
┌───────────────▼──────┐ ┌────────────▼──────────┐
│ Servidor MCP :8001 │ │ MongoDB 7.0 Atlas │
│ 11 herramientas │ │ incidentes + trazas │
│ reales │ │ │
└───────────┬──────────┘ └───────────────────────┘
│ actúa sobre infraestructura en vivo
┌───────────▼──────────┐
│ FastAPI :8000 │
│ victim-service :8080│
└──────────────────────┘
┌──────────────────────────────────────────────────┐
│ PILA DE OBSERVABILIDAD │
│ Colector OTel ──► Jaeger (trazas distribuidas) │
│ Prometheus ──────────────► Grafana │
└──────────────────────────────────────────────────┘
Principio de diseño clave: Degradación gradual + Humano en el Ciclo (HITL). El agente de Agent Builder se detiene de manera segura y devuelve el control al operador cuando no puede alcanzar una decisión con suficiente confianza — nunca adivina sobre infraestructura crítica.
Los tres servicios están desplegados y ejecutándose en Google Cloud Run:
| Servicio | URL |
|---|---|
| Centro de Comando (Panel) | https://sentinel-api-62d3d66zda-uc.a.run.app/dashboard |
| Documentación Swagger | https://sentinel-api-62d3d66zda-uc.a.run.app/docs |
| Verificación de Salud | https://sentinel-api-62d3d66zda-uc.a.run.app/health |
| Catálogo de Herramientas MCP | https://sentinel-mcp-62d3d66zda-uc.a.run.app/mcp/tools |
| Servicio Víctima | https://victim-service-62d3d66zda-uc.a.run.app |
Ejecuta un ataque en vivo contra producción:
.\attack.production.ps1 status # verificar que todos los servicios estén saludables
.\attack.production.ps1 ddos # DDoS — Gemini bloquea IPs + límite de tasa
.\attack.production.ps1 sql # Inyección SQL — Gemini activa WAF
.\attack.production.ps1 brute # Fuerza Bruta — Gemini bloquea IPs de origen
.\attack.production.ps1 stop # restablecer defensas
El contenedor atacante se ejecuta localmente y apunta al victim-service de Cloud Run a través de HTTPS. Observa el panel del Centro de Comando para ver el ciclo completo de detección → razonamiento → neutralización en tiempo real.
Google Cloud Agent Builder (Vertex AI ReasoningEngine) es el orquestador central de SentinelMCP. La implementación reside en sentinel_mcp/agent/agent_builder.py.
SentinelAgent hereda de vertexai.preview.reasoning_engines.Queryable — la interfaz programática oficial de Agent Builder — y puede ejecutarse localmente o desplegarse en el servicio gestionado Agent Builder con un solo comando.
| Responsabilidad | Implementación |
|---|---|
| Recepción de webhooks | SentinelAgent.query(incident=...) — llamado por Agent Builder en cada alerta de Dynatrace |
| Declaraciones de herramientas | 6 herramientas MCP registradas como objetos FunctionDeclaration de Vertex AI en set_up() |
| Razonamiento | Gemini 2.0 Flash lee el contexto de amenaza + catálogo de herramientas, selecciona las herramientas mínimas, las invoca automáticamente |
| Puerta HITL | Si Gemini no devuelve llamadas a herramientas (confianza < umbral), se emite escalate_to_humans=True |
| Auditoría | Cada llamada a herramienta se registra en MongoDB Atlas y se exporta como span OTel a Jaeger |
Código clave — sentinel_mcp/agent/agent_builder.py:
class SentinelAgent(reasoning_engines.Queryable):
def set_up(self):
# Herramientas MCP como FunctionDeclarations de Vertex AI — Gemini selecciona en tiempo de ejecución
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:
# Punto de entrada — Agent Builder llama a esto por cada webhook de Dynatrace
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, ...}
Desplegar en Google Cloud Agent Builder:
# Prueba local (sin GCP necesario con backend google_ai_studio)
python scripts/deploy_agent_builder.py --test-only
# Desplegar en el endpoint gestionado de Agent Builder
python scripts/deploy_agent_builder.py --project my-gcp-project
Establecer Agent Builder como backend activo:
# .env
GEMINI_BACKEND=agent_builder
GOOGLE_CLOUD_PROJECT=my-gcp-project
VERTEX_LOCATION=us-central1
SentinelMCP integra la observabilidad de Dynatrace en tres capas:
Canalización de OpenTelemetry — El sentinel-otel-collector ingiere spans y métricas del núcleo FastAPI y los reenvía al endpoint de Dynatrace Mock (OTLP/HTTP :14318). Cada incidente, ejecución de herramienta y llamada de LLM se rastrea de extremo a extremo con IDs de correlación completos.
Motor de anomalías con auto-disparo — dynatrace-mock ejecuta un bucle en segundo plano que monitorea http_requests_total, calcula una Puntuación de Riesgo de Amenaza (dynatrace_mock_sentinel_risk_score, 0–10) y dispara POST /api/v1/alerts/simulate/{type} a SentinelMCP automáticamente cuando la puntuación supera el umbral crítico — replicando el comportamiento exacto de un webhook de detección de anomalías Davis de Dynatrace en producción.
Panel de Grafana alimentado por métricas de Dynatrace — El indicador de Puntuación de Riesgo y la línea de tiempo consumen dynatrace_mock_sentinel_risk_score directamente, lo que permite visualizar el momento preciso en que Dynatrace marcó la anomalía frente al momento en que SentinelMCP logró la neutralización.
El agente Gemini descubre sus capacidades de defensa dinámicamente en tiempo de ejecución — sin listas de herramientas codificadas, sin reescribir prompts cuando cambian las capacidades:
GET /mcp/tools → devuelve 11 descriptores de herramientas → Gemini selecciona e invoca herramientas
Cada herramienta está etiquetada como REAL o Solo-Auditoría en el catálogo en vivo. Gemini lee esta bandera, comprende lo que realmente puede hacer en infraestructura en vivo y justifica cada selección de herramienta en su traza de razonamiento. Agregar una nueva capacidad de defensa requiere cero ingeniería de prompts.
Herramientas que actúan sobre infraestructura en vivo:
| Herramienta | Qué hace |
|---|---|
block_ip_address | POST /admin/block_ip — bloquea IPs de atacantes en el middleware en ejecución |
activate_waf | POST /admin/waf — habilita el modo de bloqueo WAF en el servicio en ejecución |
rate_limit_requests | POST /admin/rate_limit — limitador de tasa de ventana deslizante, activo inmediatamente |
scale_service | SDK de Docker sobre socket — inicia réplicas reales de contenedores bajo carga |
rollback | POST /admin/reset_defenses — demuestra el ciclo de vida completo del incidente: ataque → defender → restaurar |
collect_forensic_logs | Captura evidencia real de contenedores en ejecución para revisión posterior al incidente |
build_attack_timeline | Línea de tiempo cronológica a partir de registros de contenedores en vivo |
analyze_attack_pattern | Clasifica el tipo de ataque con datos de contexto de incidentes reales |
identify_iocs | Extrae IPs reales, user-agents y payloads de archivos de incidentes en vivo |
Requisitos: Docker Desktop 24+, credenciales de Google Cloud o clave API de AI Studio, ~3 GB de disco, ~2 GB de RAM.
docker compose up -d --build
La primera ejecución descarga imágenes base (~3 GB, 5–10 min). Ejecuciones posteriores toman menos de 1 minuto.
cd simulacion
docker compose up -d victim-service
cd ..
docker compose ps
# Esperado: 8 servicios ejecutándose/saludables
curl http://localhost:8000/health
# Esperado: {"status": "healthy", "service": "SentinelMCP", ...}
.\attack.ps1 ddos # Ataque DDoS (predeterminado)
.\attack.ps1 sql # Inyección SQL
.\attack.ps1 brute # Fuerza Bruta
.\attack.ps1 stop # Detener ataque + restablecer defensas
.\attack.ps1 status # Verificar estado del sistema
Abre el Centro de Comando mientras se ejecuta el ataque:
http://localhost:8000/dashboard
Observa las 4 fases en ~25 segundos:
AMENAZA DETECTADA — Dynatrace dispara la alertaDEFENDIENDO — Gemini lee el catálogo de herramientas MCP, selecciona acciones, registra razonamientoNEUTRALIZADA — MTTD y MTTR mostrados con registro de auditoría completoSentinelMCP está construido sobre Gemini. Elige el método de autenticación que se adapte a tu entorno:
Opción A — Google AI Studio (configuración más rápida):
# Editar .env
GOOGLE_API_KEY=AIza...tu_clave_aqui
GEMINI_BACKEND=google_ai_studio
Opción B — Vertex AI en Google Cloud:
gcloud auth application-default login
.\scripts\setup_gcloud.ps1 # establece proyecto, crea clave SA, actualiza .env automáticamente
Luego reinicia el motor de IA: docker compose restart api
| URL | Qué muestra |
|---|---|
| https://sentinel-api-62d3d66zda-uc.a.run.app/dashboard | Centro de Comando — UI principal de demostración |
| https://sentinel-api-62d3d66zda-uc.a.run.app/docs | Swagger — explorador de API interactivo |
| https://sentinel-api-62d3d66zda-uc.a.run.app/health | Verificación de salud |
| https://sentinel-api-62d3d66zda-uc.a.run.app/api/v1/incidents | Historial de incidentes (JSON) |
| https://sentinel-mcp-62d3d66zda-uc.a.run.app/mcp/tools | Catálogo de herramientas MCP en vivo tal como lo lee Gemini |
| https://victim-service-62d3d66zda-uc.a.run.app | Servicio víctima (el objetivo bajo ataque) |
| URL | Qué muestra |
|---|---|
http://localhost:8000/dashboard | Centro de Comando — UI principal de demostración |
http://localhost:8000/docs | Swagger — explorador de API interactivo |
http://localhost:8000/api/v1/incidents | Historial de incidentes (JSON) |
http://localhost:8000/api/v1/incidents/statistics/summary | Promedios de MTTD / MTTR en todos los incidentes |
http://localhost:8001/mcp/tools | Catálogo de herramientas MCP en vivo tal como lo lee Gemini |
http://localhost:8080 | Servicio víctima (el objetivo bajo ataque) |
http://localhost:14499 | Dynatrace Mock — métricas en vivo + motor de anomalías |
http://localhost:16686 | Jaeger — trazas distribuidas |
http://localhost:9090 | Prometheus — métricas sin procesar |
http://localhost:3000 | Grafana — panel de infraestructura (admin / admin) |
| Escenario | Script | Qué sucede |
|---|---|---|
| DDoS | .\attack.ps1 ddos | Inundación de 1000 req/s; Gemini bloquea IPs + habilita límite de tasa |
| Inyección SQL | .\attack.ps1 sql | Detección de payload; Gemini activa WAF en modo de bloqueo |
| Fuerza Bruta | .\attack.ps1 brute | Ataque de inicio de sesión; Gemini bloquea IPs de origen + habilita WAF |
| Modo automático | Panel 🎯 Auto ON | Ataques aleatorios cada 45–90s, respuesta totalmente autónoma |
GET http://localhost:8001/mcp/tools
| Herramienta | Categoría | Modo |
|---|---|---|
analyze_attack_pattern | análisis | REAL |
identify_iocs | análisis | REAL |
block_ip_address | defensa | REAL → victim-service |
activate_waf | defensa | REAL → victim-service |
rate_limit_requests | defensa | REAL → victim-service |
scale_service | defensa | REAL → SDK Docker |
collect_forensic_logs | forense | REAL |
build_attack_timeline | forense | REAL |
patch_vulnerabilities | remediación | Solo-Auditoría |
apply_hardening | remediación | Solo-Auditoría |
rollback | remediación | REAL → victim-service |
SentinelMCP emplea un Modo de Auditoría a Prueba de Fallos. Si la infraestructura de destino no está disponible, el agente registra las acciones previstas sin romper el pipeline, asegurando una degradación gradual. Gemini lee la bandera REAL / Solo-Auditoría en el catálogo — sabe precisamente qué puede ejecutar frente a qué solo puede recomendar.
sentinel_mcp/
├── api/ Núcleo FastAPI — rutas, esquemas, UI del panel
├── agent/ Motor de decisión + proveedores de LLM (Gemini 2.0 Flash, Vertex AI)
├── mcp_server/ Servidor MCP + 11 implementaciones de herramientas
├── services/ Servicio de incidentes, orquestador de remediación, calculadora de amenazas
├── observability/ Proveedores OTel / Dynatrace / SigNoz
└── core/ Configuración, registro, excepciones
simulacion/
├── victim-service/ Servicio objetivo FastAPI con plano de control /admin/*
└── attacker/ Motor de ataque Python (DDoS / SQLi / fuerza bruta)
docker/
├── prometheus.yml Configuración de scrape (victim-service en intervalo de 5s)
└── grafana/ Panel auto-aprovisionado — testigo de infraestructura de 6 paneles
| Capa | Tecnología |
|---|---|
| Orquestador de Agentes | Google Cloud Agent Builder (Vertex AI Agent) |
| LLM | Gemini 2.0 Flash — a través del SDK google-genai |
| Protocolo de herramientas | MCP (Model Context Protocol) — 11 herramientas reales |
| API | FastAPI + Uvicorn (Python 3.11) |
| Base de datos | MongoDB 7.0 Atlas (Motor asíncrono) |
| Observabilidad | OpenTelemetry → Dynatrace |
| Trazado | Jaeger |
| Métricas | Prometheus + Grafana |
| Cliente HTTP | httpx (asíncrono) |
| Orquestación de contenedores | Docker Compose v2 |