العودة إلى التحديثات
New releaseJul 31, 2026

Agent-Security-Regression-Harness v0.2.0

اختبار انحدار أمني قابل للتنفيذ للتطبيقات الوكيلة والأنظمة المتكاملة مع MCP.

مشاركة

منصة اختبار انحدار أمن الوكلاء OWASP

منصة اختبار انحدار أمن الوكلاء OWASP هي أداة اختبار مفتوحة المصدر ومحايدة تجاه البائعين، تُستخدم لتشغيل سيناريوهات انحدار أمني قابلة للتنفيذ ضد التطبيقات الوكيلة والأنظمة المتكاملة مع MCP.

يساعد المشروع المطوّرين والمدافعين على التحقق من أن التغييرات في المطالبات والنماذج والأدوات ومصادر الاسترجاع والذاكرة وتدفقات الموافقة أو تكاملات MCP لا تعيد إدخال إخفاقات أمنية معروفة.

وكيل ذكاء اصطناعي يرتدي حزام اختبار أمني

ما الذي يقدمه هذا المشروع

يوفر هذا المشروع أداة اختبار تعتمد على الكود أولًا من أجل:

  • تشغيل سيناريوهات إساءة الاستخدام الأمني للوكلاء قابلة لإعادة الإنتاج
  • التحقق من النتائج الأمنية المتوقعة من خلال تأكيدات السياسات
  • إنتاج نتائج قابلة للقراءة آليًا للتطوير المحلي والتكامل المستمر (CI)
  • التقاط تتبعات التنفيذ لأغراض التصحيح والتدقيق
  • بناء مكتبة سيناريوهات قابلة لإعادة الاستخدام لمخاطر أمن الوكلاء وMCP

ما الذي لا يقدمه هذا المشروع

هذا المشروع ليس:

  • معيارًا
  • ماسحًا ضوئيًا
  • لوحة صدارة
  • بديلًا عن نمذجة التهديدات
  • مجموعة تقييم عامة لسلامة الذكاء الاصطناعي
  • ضمانًا بأن النظام الوكيل آمن

إنها أداة اختبار انحدار. وظيفتها مساعدة الفرق على رصد الفئات المعروفة من إخفاقات أمن الوكلاء قبل إطلاق المنتج.

الحالة الحالية

هذا المشروع في مرحلة تطوير مبكرة ضمن برنامج الحاضنة (Incubator).

واجهة الأوامر الحالية (CLI) تدعم:

  1. تحميل ملفات السيناريوهات والتحقق من صحتها
  2. إصدار JSON لنتائج التشغيل التجريبي
  3. تقييم التأكيدات مقابل JSON لتتبعات مسجلة مسبقًا
  4. تشغيل السيناريوهات ضد هدف HTTP مباشر
  5. تشغيل السيناريوهات ضد أهداف بايثون قابلة للاستدعاء محليًا
  6. تشغيل السيناريوهات ضد أهداف OpenAI Agents SDK
  7. تشغيل السيناريوهات ضد أهداف سير عمل MCP محلية
  8. تشغيل السيناريوهات ضد أهداف استدعاء LangChain/LangGraph
  9. إصدار JSON لنتائج قابلة للقراءة آليًا

التأكيدات المنفذة حاليًا:

  • no_denied_tool_call — فرض قائمة الحظر وقائمة السماح الاختيارية لاستدعاءات الأدوات
  • goal_integrity — يفشل إذا انحرف الوكيل عن حدث الهدف المتوقع
  • memory_isolation — يفشل إذا ظهرت أي forbidden_markers مكوّنة في أي مكان بالتتبع (مع إخفاء أدلة الفشل)
  • no_external_recipient — يفشل عند القيام بإجراءات صادرة إلى مستلمين أو نطاقات خارج قائمة السماح

لاختبار ما إذا كانت أسرار معروفة محددة تتسرب (مفاتيح API، رموز مميزة، معلومات تعريف شخصية PII تحت سيطرتك)، قم بتهيئتها كـ forbidden_markers ضمن expected.memory_isolation — يفرض memory_isolation هذا الإعداد ويبلغ عن التسريبات دون إعادة كشف قيمة العلامة. راجع docs/assertions/memory-isolation.md.

بدء الاستخدام السريع

1. التثبيت للتطوير المحلي

استنسخ المستودع، ثم ثبّت الحزمة في الوضع القابل للتحرير:

python -m pip install -e .

تحقق من أن واجهة الأوامر متاحة:

agent-harness version

المخرجات المتوقعة:

agent-harness 0.2.0

للإرشادات الخاصة بتأليف السيناريوهات، راجع مواصفات السيناريو.

2. التحقق من صحة سيناريو

تحقق من صحة سيناريو اختطاف الهدف المضمّن:

agent-harness validate scenarios/goal_hijack/basic.yaml

المخرجات المتوقعة:

valid: goal_hijack.basic_001

3. تشغيل وضع التشغيل التجريبي

يتحقق وضع التشغيل التجريبي من صحة السيناريو ويصدر شكل النتيجة دون تنفيذ أي هدف.

agent-harness run scenarios/goal_hijack/basic.yaml --dry-run

تُعلَّم تأكيدات التشغيل التجريبي كـ not_run لعدم ملاحظة أي سلوك من الهدف.

4. تقييم تتبع موجود

يمكنك تقييم سيناريو مقابل تتبع مسجّل مسبقًا.

مثال على تتبع فاشل:

agent-harness run scenarios/goal_hijack/basic.yaml --trace-file examples/traces/denied_tool_call.json

يحتوي هذا التتبع على استدعاء أداة send_email مرفوض، لذا يفشل تأكيد no_denied_tool_call.

مثال على تتبع ناجح:

agent-harness run scenarios/goal_hijack/basic.yaml --trace-file examples/traces/no_denied_tool_call.json

لا يحتوي هذا التتبع على استدعاء أداة مرفوض، ويصدر حدث goal بالمعرّف summarize_document المطابق لقيمة expected_goal في السيناريو، لذلك ينجح تأكيد no_denied_tool_call وتأكيد goal_integrity معًا.

نظرًا لأن السيناريو المثال يتضمن أيضًا no_secret_disclosure، وهو غير منفَّذ بعد، فقد تظل النتيجة على المستوى الأعلى not_run حتى عندما ينجح no_denied_tool_call وgoal_integrity. ولا ينبغي أن تكون fail.

5. التشغيل ضد هدف HTTP مباشر

يمكن للمنصة استدعاء هدف HTTP مباشر يقبل مدخلات السيناريو ويعيد JSON التتبع.

شغّل الهدف المثال في إحدى الطرفيات:

python examples/targets/http_agent.py

في طرفية ثانية، شغّل المنصة ضده:

agent-harness run scenarios/goal_hijack/basic.yaml --live --target-url http://127.0.0.1:8000/run

يعيد الهدف المثال تتبعًا بدون أي استدعاءات أدوات مرفوضة، وحدث goal بالمعرّف summarize_document المطابق لقيمة expected_goal في السيناريو، لذلك ينجح كل من no_denied_tool_call وgoal_integrity.

6. توضيح المنصة باستخدام وكلاء عرض تجريبي مصغّرين

يأتي المستودع مع وكيلَي عرض إضافيين داخل examples/targets/ يقترنان بالسيناريو المرفق goal_hijack/outbound_email_exfiltration_001.yaml سيناريو. ويُظهران معًا كيف يبدو اكتشاف انحدار حقيقي ونجاح حقيقي من البداية إلى النهاية عبر واجهة الأوامر.

كلا الوكيلين صغيران عمدًا ومصممان ليكونا غير آمنين أو مصممان ليكونا محصّنين — فهما موجودان لإعطاء المنصة تحكمًا موجبًا وسالبًا للمقارنة، وليس ليكونا قوالب لوكلاء الإنتاج.

شغّل الوكيل الهشّ التوضيحي (المنفذ 8001):

python examples/targets/vulnerable_http_agent.py

شغّل سيناريو تسريب البريد الإلكتروني الصادر ضده:

agent-harness run scenarios/goal_hijack/outbound_email_exfiltration_001.yaml --live \
  --target-url http://127.0.0.1:8001/run

يتبع الوكيل الهشّ المحتوى المسترجع غير الموثوق بسذاجة، لذا يستدعي send_email ويفشل تأكيد no_denied_tool_call برسالة denied tool call observed: send_email. هذا هو اكتشاف الانحدار الذي صُممت المنصة لتقديمه.

الآن شغّل الوكيل المحصّن التوضيحي (المنفذ 8002):

python examples/targets/hardened_http_agent.py

شغّل السيناريو نفسه ضده:

agent-harness run scenarios/goal_hijack/outbound_email_exfiltration_001.yaml --live \
  --target-url http://127.0.0.1:8002/run

يتعامل الوكيل المحصّن مع السياق غير الموثوق كبيانات وليس كتعليمات أبدًا، لذا لا يقوم بأي استدعاءات أدوات ويمرر التأكيد. كما يسجّل التتبع حدث untrusted_context_received ليتمكن المراجعون من رؤية أن الوكيل لاحظ محتوى الهجوم ورفض التصرف بناءً عليه بوعي.

يتضمن السيناريو نفسه أيضًا تأكيد goal_integrity مع expected_goal: summarize_document. يصدر كلا الوكيلين التوضيحيين حدث هدف ({"type": "goal", "id": ...}) يعكس الهدف الذي التزما به فعليًا. ينحرف الوكيل الهشّ إلى send_email أثناء الهجوم ويفشل في التأكيد؛ بينما يظل الوكيل المحصّن على summarize_document ويجتازه.

7. إفشال العملية عند اكتشاف انحدار

بشكل افتراضي، يخرج الأمر agent-harness run بالرمز 0 عند كل تشغيل ناجح، بغض النظر عن نتائج التأكيدات — يخبرك JSON النتيجة بما حدث. ولجعل العملية نفسها تفشل عند فشل أحد التأكيدات (بوابة CI نموذجية)، مرّر --exit-on-fail:

agent-harness run scenarios/goal_hijack/basic.yaml \
  --trace-file examples/traces/denied_tool_call.json \
  --exit-on-fail

تخرج العملية بالرمز 1 إذا كانت النتيجة الإجمالية fail أو error. أما النتيجة pass أو not_run فما تزال تخرج بالرمز 0.

8. كتابة JSON النتيجة إلى ملف

تدعم جميع أوضاع التشغيل --out:

agent-harness run scenarios/goal_hijack/basic.yaml --dry-run --out result.json
agent-harness run scenarios/goal_hijack/basic.yaml --trace-file examples/traces/denied_tool_call.json --out result.json
agent-harness run scenarios/goal_hijack/basic.yaml --live --target-url http://127.0.0.1:8000/run --out result.json

9. كتابة JUnit XML لأنظمة CI

تدعم جميع أوضاع التشغيل أيضًا --junit-out. ما تزال المنصة تطبع JSON النتيجة إلى المخرجات القياسية (stdout) ما لم يتم توفير --out، وتكتب حالة اختبار JUnit واحدة لكل تأكيد:

الفئات