shell.exec مع rm -rf /، أو واجهة برمجية للمدفوعات بمبلغ تحويل
ضخم، أو أداة قاعدة بيانات تستهدف النسخة الإنتاجية. هذه إساءة استخدام أدوات
الوكيل، وهي من أكثر المخاطر تأثيراً في الأنظمة الوكيلة لأن استدعاءات
الأدوات لها آثار جانبية في العالم الحقيقي غالباً ما تكون لا رجعة فيها.
يمتلك جدار الحماية للوكيل ثلاثة دفاعات متعددة الطبقات. يمكنك نشرها بشكل
مستقل أو مجتمعة.
1. قائمة السماح: احجب كل ما لم تسمح به صراحةً
أقوى ضبط هو قائمة السماح. بدلاً من محاولة تعداد كل أداة خطرة، تُعدِّد الأدوات التي يحتاجها هذا الوكيل فعلاً — وتحجب كل شيء آخر. هذا هو أساس الثقة الصفرية. تُحقق ذلك سياسة بـdefault_verdict: deny وقواعد allow صريحة لكل أداة
مُعتمَدة. مثال: وكيل يجب أن يقرأ فقط من نظام CRM:
shell.exec أو db.delete أو payment.transfer — سواء صدر
عن قصد أو أطلقته تعليمة محقونة — يصطدم بقاعدة المسايرة الشاملة * ويُعيد
خطأ HTTP 400 firewall_blocked. يرى الوكيل خطأ أداة منظَّمة ولا يستطيع
إعادة المحاولة (يُعلَّم الحجب بـ skip-retry)، لذا لا يستطيع التحايل على
الرفض بالتكرار.
اضبط
default_verdict لسياستك على deny لإنفاذ قائمة السماح بالكامل.
مع الحكم الافتراضي audit، تُسمح الاستدعاءات غير المطابقة وتُسجَّل لكنها
لا تُحجب — مفيد أثناء الطرح لكنه ليس ضبطاً أمنياً في حد ذاته.| النمط | ما يغطيه |
|---|---|
crm.* | جميع الأدوات في نطاق أسماء crm |
*.read | أي أداة قراءة عبر جميع الخوادم |
db.query | هذه الأداة بالتحديد |
* | كل شيء (استخدمها لقاعدة الرفض الشاملة) |
allow المحددة بأرقام أولوية منخفضة وقاعدة deny الشاملة بأولوية
عالية.
2. التحقق من الوسائط: اسمح بالأداة وأوقف الاستدعاء الخطر
قائمة السماح على أسماء الأدوات خشنة — إذ تحجبshell.exec بالكامل. أحياناً
تريد السماح بأداة ما مع تقييد كيفية استدعائها. تتيح لك عبارات الوسائط
المطابقة على حقول محددة داخل وسائط استدعاء الأداة، باستخدام JSONPath ومجموعة
من العوامل.
مثال: اسمح بـ shell.exec لكن أوقف rm -rf
shell.exec ويطابق وسيط $.command
نمط الأوامر المدمّرة. يستدعاء shell.exec العادي بأمر آمن يمر إلى القاعدة
التالية (أو الحكم الافتراضي). ضع هذه القاعدة بأولوية أدنى من أي قاعدة عامة
allow shell.exec حتى تُطلَق أولاً.
المجموعة الكاملة من عوامل الوسائط:
| العامل | استخدمه عندما |
|---|---|
eq | تطابق تام على قيمة عددية (نص أو رقم) |
contains | تطابق سلسلة جزئية — مثل $.query contains DROP TABLE |
regex | تطابق نمط RE2 — آمن على المسار الساخن، بدون تراجع |
in | يجب أن تكون القيمة في مصفوفة معطاة — مثل السماح فقط ببيئات محددة |
cidr_match | عنوان IP في كتلة CIDR — مفيد لفحوصات وجهة egress |
gt / lt | مقارنة رقمية — مثل $.amount gt 10000 لسقوف المدفوعات |
args_match تخضع لـ AND. إذا لم يكن المسار موجوداً في
وسائط الاستدعاء، تتقيَّم العبارة بـ false ولا تُطلَق القاعدة — يمر الاستدعاء
للقاعدة التالية أو الافتراضي.
مثال حارس المدفوعات — ارفض أي استدعاء لأداة دفع بمبلغ يتجاوز حداً:
3. الإنسان في الحلقة: أوقف الاستدعاءات عالية المخاطر للموافقة
بالنسبة للأدوات الضرورية فعلاً لكنها عالية المخاطر — تشغيل نشر، أو اعتماد استرداد، أو إرسال بريد إلكتروني جماعي — يمكنك اشتراط توقيع بشري قبل متابعة الاستدعاء. يُعلَّق حكمpending_approval الاستدعاء ويُعيد استجابة
firewall_approval_pending للوكيل:
pending_approval مع عبارات الوسائط — يمكنك تعليق الاستدعاءات التي
تطابق حداً فقط، والسماح بالروتينية منها مباشرةً:
4. كيف يبدو الاستدعاء المحجوب
استدعاء مرفوض على سطح inbound (أداة مُعلَن عنها في الطلب) يُعيد HTTP 400 برمز خطأfirewall_blocked. تحمل الاستجابة metadata منظَّمة — تسمية القاعدة
المطابقة، ورمز السبب، وعوامل المخاطرة — ومُعلَّمة skip-retry حتى لا تستطيع
حلقة طرق نفس الاستدعاء المرفوض.
استدعاء محجوب على سطح response (أصدر النموذج بالفعل tool_calls) يُعيد
خطأ أداة مرئياً للنموذج، مما يمنحه فرصة للتفاعل — اختيار أداة أخرى، أو سؤال
المستخدم، أو التوقف — بدلاً من الانهيار.
5. ترتيب أول مطابقة تفوز
ترتيب الأولوية مهم. يجتاز المحرك القواعد بترتيب الأولوية تصاعدياً ويتوقف عند أول مطابقة. نمط شائع:| الأولوية | القاعدة | الحكم |
|---|---|---|
| 5 | shell.exec + نمط المدمّر | deny |
| 10 | shell.* (عام) | allow |
| 20 | crm.* | allow |
| 9999 | * (شاملة) | deny |
shell.exec بأمر مدمّر حتى
لو كانت هناك قاعدة allow عامة لـ shell.*. بدون رفض ذي أولوية منخفضة،
ستفوز قاعدة allow shell.* أولاً.
6. الطرح الآمن بوضع الظل
قبل تحويل سياسة جديدة إلى وضع التنفيذ، شغّل وضع الظل. تُقيِّم السياسة كل استدعاء أداة وتسجّل الحكم تماماً كما ستفعل في الإنتاج، لكن يُخفَّض كل حكم فارض (deny، pending_approval، sanitize) إلى audit — لا شيء يُحجب.
السبب في سجل الأحداث مسبوق بـ [shadow] would deny حتى تتمكن من قياس الأثر
في عرضَي Events وRuns.
بمجرد تأكّدك أن السياسة تُطلَق على ما تتوقعه — ولا شيء لا تقصده — أطفئ وضع
الظل. الاستدعاء التالي يُنفَّذ.
يُطبَّق مستوى الاستقلالية
tight الإعداد المسبق block_destructive_shell
تلقائياً. إذا احتجت موقفاً سريعاً دون كتابة قواعد، طبّق tight من وحدة
التحكم وسيُشحن بسياسة رفض لاستدعاءات shell المدمّرة في خطوة واحدة. يمكنك
بعدها تراكم قواعد قائمة سماحك الخاصة فوقه.
انظر مستويات الاستقلالية.7. التهديدات ذات الصلة
إساءة استخدام أدوات الوكيل نادراً ما تصل منفردة. استدعاء أداة غير مُخوَّل هو في الغالب عاقبة لمتجه هجوم آخر:- حقن المطالبة — مهاجم يُضمّن تعليمات في محتوى مسترجع توجّه الوكيل نحو أدوات لم يكن معداً لاستدعائها.
- الصلاحية المفرطة — مُنح الوكيل وصولاً للأدوات أكثر مما تتطلبه مهمته، مما يجعل أي حقن أو خطأ إعداد خطراً فورياً.
- نموذج التهديد — كيف تندرج إساءة استخدام الأدوات في سطح الهجوم الكامل للأنظمة الوكيلة.
مرجع قواعد جدار الحماية
لغة المطابقة الكاملة — Glob الأدوات، وعبارات الوسائط، وجميع العوامل،
والأحكام، والواجهة البرمجية.
نظرة عامة على جدار الحماية
السياسات، والأسطح، ومستويات الاستقلالية، وموافقة HITL، والقابلية للملاحظة.
