
بيئة معزولة eBPF على مستوى النواة لتأمين استدعاءات أدوات وكلاء LLM التي تتم عبر بروتوكول سياق النموذج (MCP)
عزل على مستوى النواة لاستدعاءات أدوات وكلاء النماذج اللغوية الكبيرة (LLM) عبر بروتوكول سياق النموذج (MCP).
يعمل MCPGuard كوسيط شفاف بين عميل MCP (الوكيل / المشغّل) وعملية فرعية لخادم MCP، مطبّقًا ثلاث طبقات دفاعية على كل استدعاء أداة. تُنفَّذ الطبقة الدنيا في eBPF وتفرض سياسات القدرات عند حدود استدعاءات النظام، بحيث لا يستطيع خادم MCP خبيث تجاوز السياسة عبر ترميز سلوك حساس داخل تنفيذه الخاص.
يحتوي هذا المستودع على الوسيط، وبرامج eBPF، ومعيار قياسي من 14 خادمًا / 82 حالة، وأداة التقييم المستخدمة في الورقة البحثية المرافقة Kernel-Level Sandboxing for LLM Agent Tool Calls via eBPF.
| الطبقة | المكوّن | الغرض |
|---|---|---|
| L1 | proxy/policy_engine.py | سياسة قدرات لكل خادم مستمدة من مخطط MCP لكل أداة؛ قوائم السماح للمسارات، وجهات الشبكة، والعمليات، ومتغيرات البيئة. |
| L2 | proxy/argument_validator.py | فحص على مستوى التطبيق لوسائط استدعاء الأدوات: تقنين المسارات، والتحقق من عناوين URL، وكشف حقن الأوامر النصية، وكشف تسريب متغيرات البيئة / حقن الأوامر، ومسح المفاتيح الحساسة، وتعقيم الاستجابات. |
| L3 | ebpf/*.bpf.c + proxy/ebpf_sandbox.py | فرض على مستوى نظام التشغيل: ثلاثة برامج BPF LSM (file_guard، net_guard، proc_guard) تعترض open() / connect() / execve()، وبرنامج tracepoint واحد (fork_guard) يتتبع العمليات الفرعية عبر sched_process_fork بحيث تنتقل السياسة عبر التفريعات. |
ست إعدادات دفاعية قابلة للتبديل (proxy/proxy_base.py) تغطي فضاء الاستئصال المستخدم في الورقة البحثية: C0 (تمرير مباشر)، C-AB (خط أساس AgentBound)، C-app (L1 + L2)، C-ebpf (L3 فقط)، C-full (L1 + L2 + L3)، C-AB+ebpf (AgentBound + L3).
.
├── proxy/ L1 policy engine, L2 argument validator, L3 eBPF controller, AgentBound baseline
├── ebpf/ BPF C sources for file/net/proc/fork guards + Makefile + vmlinux.h
├── policies/ Per-server JSON capability policies (defaults + overrides)
├── servers/ 14 MCP servers: 11 Python (filesystem, notes, weather, shell, sqlite, git, env + malicious/trojan variants) + 3 JavaScript (servers/js/)
├── test_cases/ 82 benchmark scenarios across 7 categories (file_read, exfiltration, env_leak, sandbox_escape, priv_escalation, cross_language, benign)
├── notes_data/ 170 valid synthetic notes JSON fixtures used by notes_server
├── runner/ evaluate.py, aggregate.py, agentbound_check.py, ebpf_edge_tests.py, latency_benchmark.py, override_workflow.py, smoke_test.py
└── EXECUTION_PLAN.md Phase-by-phase reproduction instructions
CONFIG_BPF_LSM=y، وlsm=bpf في سطر أوامر النواة)clang 21 أو أحدث مع هدف BPFbpftool لتحميل برامج وخرائط BPFservers/js/)# Build the eBPF programs
cd ebpf && make && cd ..
# Smoke test (one server, a handful of cases)
python3 runner/smoke_test.py
# Full benchmark for one configuration
python3 runner/evaluate.py --config C-full --run-id trial
# Aggregate a reproduced run
python3 runner/aggregate.py --run-id trial
# Reproduce the steady-state latency table after installing eBPF
sudo python3 runner/latency_benchmark.py --run-id codex_20260523_latency --iterations 100 --warmup 20
# Reproduce the audit/override workflow
python3 runner/override_workflow.py --run-id codex_20260523_override
# Run focused eBPF edge tests after installing eBPF
sudo python3 runner/ebpf_edge_tests.py --run-id codex_20260523_ebpf_edges
# Run AgentBound-style baseline conformance checks
python3 runner/agentbound_check.py --run-id codex_20260523_agentbound
تفشل C-ebpf وC-full وC-AB+ebpf الآن بشكل مغلق إذا كانت برامج BPF LSM
والخرائط المثبّتة غير متاحة. شغّلها فقط بعد تثبيت طبقة eBPF
بصلاحيات الجذر.
معدل منع الهجمات (APR)، ومعدل منع الهجمات القابلة للتنفيذ (V-APR)، ومعدل
الإيجابيات الكاذبة (FPR) للتشغيل المثبّت الواحد codex_20260523_full (معيار
من 14 خادمًا و82 حالة؛ هذا هو ملف التعريف fx_r لكل فئة — يقدّم الجدول 1 في
الورقة البحثية متوسطات N=5، لذا تقرأ C-app هنا 13/48 مقابل المتوسط 12/48):
| الإعداد | APR | V-APR | القابلة للتنفيذ المحجوبة | FPR |
|---|---|---|---|---|
| C0 | 21.3% | 0.0% | 0/48 | 0/21 |
| C-AB | 37.7% | 20.8% | 10/48 | 0/21 |
| C-app | 42.6% | 27.1% | 13/48 | 0/21 |
| C-ebpf | 60.7% | 50.0% | 24/48 | 0/21 |
| C-full | 68.9% | 60.4% | 29/48 | 0/21 |
| C-AB+ebpf | 67.2% | 58.3% | 28/48 | 0/21 |
يتضمن APR الهجمات التي تفشل جوهريًا تحت C0. يستخدم V-APR فقط الهجمات التي تنجح تحت C0 كمقام، وهو المقياس الأكثر تحفظًا لتغطية الدفاع.
يُخزَّن معيار زمن الاستجابة المتكرر للاستدعاءات الحميدة في مساحة العمل
الداخلية للورقة البحثية باسم results/latency/codex_20260523_latency.md. يقيس BN-01
(filesystem_server.read_file) مع 20 استدعاء تسخين و100 استدعاء مقاس لكل
إعداد؛ تضيف C-full +0.488 مللي ثانية وسيط زمن الاستجابة نسبةً إلى C0 وتبقى
عند 1.141 مللي ثانية p95 لهذا الاستدعاء الحميد الثابت. تستبعد شجرة CodeSync
العامة results/، لذا يعيد المستخدمون الخارجيون توليد هذا المخرج بالأمر أعلاه.
يُخزَّن سير عمل التدقيق/التجاوز داخليًا باسم
results/audit/codex_20260523_override.md. يوضح كيف يُسجَّل الرفض الحميد
كحدث تدقيق منظّم ويُحلّ بإضافة تجاوز مشغّل محدد النطاق ضمن تخطيط متوافق مع
policies/overrides.
تُخزَّن اختبارات حواف eBPF المركزة داخليًا باسم
results/ebpf_edges/codex_20260523_ebpf_edges.md. تغطي توفر الخرائط
بالفشل المغلق، وسلوك السماح بالكتابة في مساحة العمل، ورفض حدود بادئة
المجلد، ورفض التجهيز في /tmp، ورفض تسريب localhost.
يُخزَّن فحص خط الأساس بنمط AgentBound داخليًا باسم
results/agentbound/codex_20260523_agentbound.md. يوثّق أن C-AB هو
إعادة إنتاج على مستوى التطبيق لكل خادم ويتحقق من التغطية المتوقعة المرئية
للوسائط والنقطة العمياء المخفية في التنفيذ.
يُعامَل خادم MCP كغير موثوق. قد يكون حميدًا لكنه مُهيّأ بشكل خاطئ، أو خبيثًا عن قصد، أو نسخة مُحصّنة بحصان طروادة من خادم شرعي. يُعامَل الوكيل / المشغّل ونظام التشغيل المضيف كموثوقين. تفترض طبقة eBPF أن النواة غير مخترقة؛ فالتصعيدات داخل النواة (CWE-269 في وحدات النواة) خارج النطاق.
ستُضاف مدخلة BibTeX هنا بمجرد نشر الورقة البحثية.
راجع CONTRIBUTING.md. يجب على جميع المساهمين توقيع اتفاقية CLA الخاصة بـ Meta.
للإبلاغ عن مشكلة أمنية، راجع SECURITY.md. يُرجى عدم فتح قضايا GitHub عامة لتقارير الأمان.
MIT — راجع LICENSE.