
نظام دفاع إلكتروني مستقل مدعوم بالذكاء الاصطناعي باستخدام MCP و Gemini 2.0 Flash و Dynatrace للمراقبة و MongoDB. تقديم مسابقة Google Cloud Hackathon.
تقديم لمسابقة Google Cloud Hackathon — كشف التهديدات ومعالجتها بشكل مستقل بوساطة Google Cloud Agent Builder (Vertex AI Agent)، مدعومة بـ Gemini 2.0 Flash و Protocol Model Context Protocol (MCP) وقابلية المراقبة من Dynatrace.
تواجه فرق الأمن متوسط وقت اكتشاف (MTTD) يبلغ 30 دقيقة ومتوسط وقت استجابة (MTTR) يبلغ 4 ساعات للحوادث النمطية. عندما يكتشف المحلل البشري الهجوم، ويكتب قاعدة جدار الحماية، وينشرها، يكون الضرر قد وقع.
يقلل SentinelMCP متوسط وقت الاكتشاف إلى < 30 ثانية ومتوسط وقت الاستجابة إلى < 30 ثانية من خلال نشر وكيل Google Cloud Agent Builder الذي يستقبل إشعارات Dynatrace الخاصة بالشذوذ، ويحللها باستخدام Gemini 2.0 Flash، ثم يستدعي أدوات الدفاع الحقيقية عبر MCP — مما يتيح العمل على البنية التحتية الحية، وليس مجرد التنبيه.
إشعار Dynatrace → Agent Builder يستقبل التنبيه → Gemini يحلل → أدوات MCP تنفذ → تحييد التهديد
1 ثانية 2 ثانية 8 ثوانٍ 15 ثانية 25 ثانية إجمالاً
النتيجة: دورة حياة الحادث التي كانت تتطلب محللاً بشرياً و4 ساعات، تُكتمل الآن بشكل مستقل في أقل من 30 ثانية، مع سجل تدقيق كامل في MongoDB وآثار موزعة في Jaeger.
┌──────────────────────────────────────────────────────────────────────┐
│ بيئة التجربة المعزولة │
│ │
│ ┌─────────────┐ 100–1000 طلب/ثانية ┌──────────────────────────┐ │
│ │ المهاجم │ ──────────────────────►│ victim-service │ │
│ │ (DDoS/SQLi) │ │ المنفذ 8080 │ │
│ └─────────────┘ │ /admin/* واجهة التحكم │ │
│ └────────────┬─────────────┘ │
└───────────────────────────────────────────────────────│────────────────┘
│ المقاييس + إشعار الشذوذ
┌────────────────────────────────────▼─────────────────┐
│ Dynatrace Mock (محرك الشذوذ) │
│ درجة مخاطر التهديد ← يرسل POST /alerts/simulate │
└────────────────────────┬─────────────────────────────┘
│ الإشعار
┌─────────────────────────────────▼──────────────────────────────┐
│ Google Cloud Agent Builder (Vertex AI Agent) │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Gemini 2.0 Flash — يحلل سياق التهديد │ │
│ │ وصف الأدوات — يتم جلبها ديناميكياً من MCP │ │
│ │ بوابة الإنسان في الحلقة — تتوقف إذا كانت الثقة < الحد الأدنى │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────┬─────────────────────────┬───────────────────────┘
│ استدعاءات REST │ كتابة التدقيق
┌───────────────▼──────┐ ┌────────────▼──────────┐
│ خادم MCP :8001 │ │ MongoDB 7.0 Atlas │
│ 11 أداة حقيقية │ │ الحوادث + الآثار │
└───────────┬──────────┘ └───────────────────────┘
│ يعمل على البنية التحتية الحية
┌───────────▼──────────┐
│ FastAPI :8000 │
│ victim-service :8080│
└──────────────────────┘
┌──────────────────────────────────────────────────┐
│ مكدس قابلية المراقبة │
│ مجمع OTel ──► Jaeger (آثار موزعة) │
│ Prometheus ──────────► Grafana │
└──────────────────────────────────────────────────┘
مبدأ التصميم الأساسي: التدهور التدريجي + الإنسان في الحلقة (HITL). يتوقف وكيل Agent Builder بأمان ويعيد التحكم إلى المشغل عندما لا يتمكن من اتخاذ قرار بثقة كافية — لا يخمن أبداً على بنية تحتية حرجة.
جميع الخدمات الثلاث منشورة وتعمل على Google Cloud Run:
قم بتشغيل هجوم حي ضد الإنتاج:
.\attack.production.ps1 status # تحقق من أن جميع الخدمات سليمة
.\attack.production.ps1 ddos # DDoS — Gemini يحجب عناوين IP + يحدد المعدل
.\attack.production.ps1 sql # SQL Injection — Gemini يفعل WAF
.\attack.production.ps1 brute # Brute Force — Gemini يحجب عناوين IP المصدر
.\attack.production.ps1 stop # إعادة تعيين الدفاعات
حاوية المهاجم تعمل محلياً وتستهدف خدمة victim-service على Cloud Run عبر 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 المُدارة بأمر واحد.
الكود الأساسي — sentinel_mcp/agent/agent_builder.py:
class SentinelAgent(reasoning_engines.Queryable):
def set_up(self):
# أدوات MCP كـ FunctionDeclarations من Vertex AI — Gemini يختار وقت التشغيل
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:
# نقطة الدخول — Agent Builder يستدعي هذا لكل إشعار 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, ...}
النشر إلى Google Cloud Agent Builder:
# اختبار محلي (لا حاجة لـ GCP مع الواجهة الخلفية google_ai_studio)
python scripts/deploy_agent_builder.py --test-only
# النشر إلى نقطة نهاية Agent Builder المُدارة
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 — يقوم sentinel-otel-collector باستيراد spans والمقاييس من نواة FastAPI وإرسالها إلى نقطة نهاية Dynatrace Mock (OTLP/HTTP :14318). يتم تتبع كل حادث وتنفيذ أداة واستدعاء LLM من البداية إلى النهاية مع معرفات ارتباط كاملة.
محرك الشذوذ مع التشغيل التلقائي — يقوم dynatrace-mock بتشغيل حلقة خلفية تراقب http_requests_total، وتحسب درجة مخاطر التهديد (dynatrace_mock_sentinel_risk_score، 0–10)، وترسل POST /api/v1/alerts/simulate/{type} إلى SentinelMCP تلقائياً عندما تتجاوز الدرجة الحد الحرج — مما يحاكي السلوك الدقيق لإشعار Davis الخاص بـ Dynatrace في الإنتاج.
لوحة تحكم Grafana تُغذى بمقاييس Dynatrace — يستخدم مقياس Risk Score والخط الزمني dynatrace_mock_sentinel_risk_score مباشرة، مما يجعل من الممكن تصور اللحظة الدقيقة التي أشار فيها Dynatrace إلى الشذوذ مقابل اللحظة التي حقق فيها SentinelMCP التحييد.
يكتشف وكيل Gemini قدراته الدفاعية ديناميكياً في وقت التشغيل — لا قوائم أدوات ثابتة، لا إعادة كتابة للموجه عند تغيير الإمكانيات:
GET /mcp/tools → يعيد 11 واصف أداة → Gemini يختار الأدوات ويستدعيها
يتم تصنيف كل أداة كـ REAL أو Audit-Only في الكتالوج المباشر. يقرأ Gemini هذه العلامة، ويفهم ما يمكنه فعله فعلياً على البنية التحتية الحية، ويبرر كل اختيار أداة في أثر تحليله. إضافة قدرة دفاعية جديدة لا تتطلب أي هندسة موجهات.
الأدوات التي تعمل على البنية التحتية الحية:
المتطلبات: Docker Desktop 24+، بيانات اعتماد Google Cloud أو مفتاح AI Studio API، ~3 قرص GB، ~2 ذاكرة RAM GB.
docker compose up -d --build
يُحمّل التشغيل الأول الصور الأساسية (~3 GB، 5–10 دقائق). التشغيلات اللاحقة تستغرق أقل من دقيقة.
cd simulacion
docker compose up -d victim-service
cd ..
docker compose ps
# المتوقع: 8 خدمات قيد التشغيل/سليمة
curl http://localhost:8000/health
# المتوقع: {"status": "healthy", "service": "SentinelMCP", ...}
.\attack.ps1 ddos # هجوم DDoS (افتراضي)
.\attack.ps1 sql # SQL Injection
.\attack.ps1 brute # Brute Force
.\attack.ps1 stop # إيقاف الهجوم + إعادة تعيين الدفاعات
.\attack.ps1 status # التحقق من حالة النظام
افتح مركز القيادة أثناء تشغيل الهجوم:
http://localhost:8000/dashboard
شاهد المراحل الأربع في ~25 ثانية:
THREAT DETECTED — Dynatrace يطلق التنبيهDEFENDING — Gemini يقرأ كتالوج أدوات MCP، يختار الإجراءات، يسجل التحليلNEUTRALIZED — عرض MTTD و MTTR مع سجل تدقيق كاملتم بناء SentinelMCP على Gemini. اختر طريقة المصادقة التي تناسب بيئتك:
الخيار أ — Google AI Studio (أسرع إعداد):
# تحرير .env
GOOGLE_API_KEY=AIza...your_key_here
GEMINI_BACKEND=google_ai_studio
الخيار ب — Vertex AI على Google Cloud:
gcloud auth application-default login
.\scripts\setup_gcloud.ps1 # يعدّل المشروع، ينشئ مفتاح SA، يحدث .env تلقائياً
ثم أعد تشغيل محرك الذكاء الاصطناعي: docker compose restart api
GET http://localhost:8001/mcp/tools
يستخدم SentinelMCP وضع التدقيق الآمن. إذا كانت البنية التحتية المستهدفة غير قابلة للوصول، يسجل الوكيل الإجراءات المقصودة دون كسر خط الأنابيب، مما يضمن التدهور التدريجي. يقرأ 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 / SQLi / brute force)
docker/
├── prometheus.yml إعداد الجمع (victim-service بفاصل 5 ثوانٍ)
└── grafana/ لوحة تحكم مزودة تلقائياً — شاهد بستة أقسام للبنية التحتية
| الخدمة | الرابط |
|---|
| مركز القيادة (لوحة التحكم) | 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 |
| المسؤولية | التطبيق |
|---|
| استقبال الإشعارات | SentinelAgent.query(incident=...) — يتم استدعاؤها بواسطة Agent Builder عند كل تنبيه Dynatrace |
| إعلانات الأدوات | 6 أدوات MCP مسجلة ككائنات FunctionDeclaration من Vertex AI في set_up() |
| التحليل | Gemini 2.0 Flash يقرأ سياق التهديد + كتالوج الأدوات، يختار الحد الأدنى من الأدوات، يستدعيها تلقائياً |
| بوابة الإنسان في الحلقة | إذا لم يُرجع Gemini أي استدعاءات أدوات (ثقة < الحد الأدنى)، يتم إصدار escalate_to_humans=True |
| التدقيق | يتم تسجيل كل استدعاء أداة في MongoDB Atlas + تصديره كـ OTel span إلى Jaeger |
| الأداة | ما تفعله |
|---|
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 حقيقية، ووكلاء مستخدم، وحمولات من ملفات الحوادث الحية |
| الرابط | ما يعرضه |
|---|
| 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 | خدمة الهدف (الهدف تحت الهجوم) |
| الرابط | ما يعرضه |
|---|
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 ON | هجمات عشوائية كل 45–90 ثانية، استجابة مستقلة بالكامل |
| الأداة | التصنيف | الوضع |
|---|
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 |
| الطبقة | التقنية |
|---|
| منسق الوكيل | 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 |