محرك السياسات و Hooks
محرك السياسات هو طبقة التنفيذ التي تقع بين LLM والعالم الخارجي. يعترض كل إجراء في نقاط حرجة في تدفق البيانات ويتخذ قرارات حتمية ALLOW أو BLOCK أو REDACT. لا يستطيع LLM تجاوز هذه القرارات أو تعديلها أو التأثير عليها.
المبدأ الأساسي: التنفيذ أسفل LLM
SECURITY يقع LLM فوق طبقة السياسات. يمكن حقنه بـ prompt، أو كسره،
أو التلاعب به -- ولا يهم ذلك. طبقة السياسات هي كود صرف يعمل أسفل LLM، يفحص طلبات الإجراءات المُهيكلة ويتخذ قرارات ثنائية بناءً على قواعد التصنيف. لا يوجد مسار من مخرجات LLM إلى تجاوز hook. :::
أنواع Hook
ثمانية hooks تنفيذية تعترض الإجراءات في كل نقطة حرجة في تدفق البيانات.
بنية Hook
جميع أنواع Hook
| Hook | المُشغل | الإجراءات الرئيسية | وضع الفشل |
|---|---|---|---|
PRE_CONTEXT_INJECTION | مدخل خارجي يدخل السياق | تصنيف المدخل، تعيين taint، إنشاء نسب، فحص الحقن | رفض المدخل |
PRE_TOOL_CALL | LLM يطلب تنفيذ أداة | فحص الصلاحيات، حد المعدل، التحقق من المعاملات | حظر استدعاء الأداة |
POST_TOOL_RESPONSE | الأداة تُعيد بيانات | تصنيف الاستجابة، تحديث taint الجلسة، إنشاء/تحديث النسب | تنقيح أو حظر |
PRE_OUTPUT | الاستجابة على وشك مغادرة النظام | فحص التصنيف النهائي مقابل الهدف، فحص PII | حظر المخرج |
SECRET_ACCESS | Plugin يطلب بيانات اعتماد | تسجيل الوصول، التحقق من الصلاحية مقابل النطاق المُعلن | رفض بيانات الاعتماد |
SESSION_RESET | المستخدم يطلب إعادة تعيين taint | أرشفة النسب، مسح السياق، التحقق من التأكيد | طلب التأكيد |
AGENT_INVOCATION | وكيل يستدعي وكيلاً آخر | التحقق من سلسلة التفويض، تنفيذ سقف taint | حظر الاستدعاء |
MCP_TOOL_CALL | أداة خادم MCP تُستدعى | فحص سياسة Gateway (حالة الخادم، صلاحيات الأداة، المخطط) | حظر استدعاء MCP |
واجهة Hook
كل hook يستلم سياقاً ويُعيد نتيجة. المُعالج هو دالة صرفة متزامنة.
typescript
interface HookContext {
readonly sessionId: SessionId;
readonly hookType: HookType;
readonly timestamp: Date;
// الحمولة الخاصة بـ hook تختلف حسب النوع
}
interface HookResult {
readonly decision: "ALLOW" | "BLOCK" | "REDACT";
readonly reason: string;
readonly metadata?: Record<string, unknown>;
}
type HookHandler = (context: HookContext) => HookResult;HookHandler متزامن ويُعيد HookResult مباشرةً -- وليس Promise. هذا
بالتصميم. يجب أن تكتمل hooks قبل أن يتقدم الإجراء، وجعلها متزامنة يلغي أي إمكانية لتجاوز async. إذا انتهت مهلة hook، يُرفض الإجراء. :::
ضمانات Hook
كل تنفيذ hook يحمل أربعة ثوابت:
| الضمان | ما يعنيه |
|---|---|
| حتمي | نفس المدخلات تنتج دائماً نفس القرار. بدون عشوائية. بدون استدعاءات LLM داخل hooks. بدون استدعاءات API خارجية تؤثر على القرارات. |
| متزامن | تكتمل hooks قبل أن يتقدم الإجراء. لا يمكن التجاوز async. انتهاء المهلة يعني الرفض. |
| مُسجل | كل تنفيذ hook يُسجل: معاملات المدخل، القرار المُتخذ، الطابع الزمني، وقواعد السياسات المُقيّمة. |
| غير قابل للتزوير | مخرجات LLM لا يمكن أن تحتوي على تعليمات تجاوز hook. طبقة hook ليس لديها منطق "تحليل مخرجات LLM بحثاً عن أوامر". |
تسلسل قواعد السياسات الهرمي
قواعد السياسات منظمة في ثلاثة مستويات. لا تستطيع المستويات الأعلى تجاوز المستويات الأدنى.
قواعد ثابتة (مُنفذة دائماً، غير قابلة للتكوين)
هذه القواعد مُرمزة ولا يمكن تعطيلها من أي مسؤول أو مستخدم أو تكوين:
- منع الكتابة للأسفل: تدفق التصنيف أحادي الاتجاه. لا يمكن للبيانات أن تتدفق إلى مستوى أقل.
- قنوات UNTRUSTED: لا بيانات تدخل أو تخرج. نقطة.
- Taint الجلسة: بمجرد التصعيد، يبقى مُصعداً طوال عمر الجلسة.
- تسجيل التدقيق: جميع الإجراءات تُسجل. بدون استثناءات. بدون طريقة للتعطيل.
قواعد قابلة للتكوين (قابلة للضبط من المسؤول)
يمكن للمسؤولين ضبط هذه من خلال واجهة المستخدم أو ملفات التكوين:
- تصنيفات التكاملات الافتراضية (مثل Salesforce يُعامل كـ
CONFIDENTIALافتراضياً) - تصنيفات القنوات
- قوائم السماح/الرفض للإجراءات لكل تكامل
- قوائم النطاقات المسموحة للاتصالات الخارجية
- حدود المعدل لكل أداة أو مستخدم أو جلسة
مخرج طوارئ تصريحي (مؤسسي)
يمكن لعمليات النشر المؤسسية تحديد قواعد سياسات مخصصة في YAML مُهيكل لسيناريوهات متقدمة:
yaml
# حظر أي استعلام Salesforce يحتوي على أنماط SSN
hook: POST_TOOL_RESPONSE
conditions:
- tool_name: salesforce.*
- content_matches: '\b\d{3}-\d{2}-\d{4}\b'
action: REDACT
redaction_pattern: "[SSN REDACTED]"
log_level: ALERT
notify: security-team@company.comyaml
# طلب الموافقة للمعاملات عالية القيمة
hook: PRE_TOOL_CALL
conditions:
- tool_name: stripe.create_charge
- parameter.amount: ">10000"
action: REQUIRE_APPROVAL
approvers:
- role: finance-admin
timeout: 1h
timeout_action: DENYyaml
# قيد زمني: لا إرسال خارجي بعد ساعات العمل
hook: PRE_OUTPUT
conditions:
- recipient_type: EXTERNAL
- time_of_day: "18:00-08:00"
- day_of_week: "Mon-Fri"
action: BLOCK
reason: "External communications restricted outside business hours"يجب أن تجتاز قواعد YAML المخصصة التحقق قبل التفعيل. تُرفض القواعد غير
الصالحة وقت التكوين، وليس وقت التشغيل. هذا يمنع سوء التكوين من إنشاء فجوات أمنية. :::
تجربة مستخدم الرفض
عندما يحظر محرك السياسات إجراءً، يرى المستخدم شرحاً واضحاً -- وليس خطأ عاماً.
الافتراضي (محدد):
لا أستطيع إرسال بيانات سرية إلى قناة عامة.
-> إعادة تعيين الجلسة وإرسال الرسالة
-> إلغاءاختياري (تعليمي):
لا أستطيع إرسال بيانات سرية إلى قناة عامة.
السبب: هذه الجلسة وصلت إلى Salesforce (CONFIDENTIAL).
WhatsApp الشخصي مُصنف كـ PUBLIC.
يمكن للبيانات أن تتدفق فقط إلى تصنيف مساوٍ أو أعلى.
الخيارات:
-> إعادة تعيين الجلسة وإرسال الرسالة
-> اطلب من المسؤول إعادة تصنيف قناة WhatsApp
-> معرفة المزيد: [رابط الوثائق]الوضع التعليمي اختياري ويساعد المستخدمين على فهم لماذا تم حظر الإجراء، بما في ذلك مصدر البيانات الذي تسبب في تصعيد taint وما هو عدم تطابق التصنيف. كلا الوضعين يقدمان خطوات تالية قابلة للتنفيذ بدلاً من أخطاء مسدودة.
كيف تتسلسل Hooks معاً
في دورة طلب/استجابة نموذجية، تُطلق hooks متعددة بالتسلسل. كل hook لديه رؤية كاملة للقرارات التي اتخذتها hooks السابقة في السلسلة.
المستخدم يُرسل: "تحقق من خط أنابيب Salesforce وأرسل رسالة لزوجتي"
1. PRE_CONTEXT_INJECTION
- مدخل من المالك، مُصنف كـ PUBLIC
- Taint الجلسة: PUBLIC
2. PRE_TOOL_CALL (salesforce.query_opportunities)
- الأداة مسموحة؟ نعم
- المستخدم لديه اتصال Salesforce؟ نعم
- حد المعدل؟ مقبول
- القرار: ALLOW
3. POST_TOOL_RESPONSE (نتائج salesforce)
- البيانات مُصنفة: CONFIDENTIAL
- Taint الجلسة يتصاعد: PUBLIC -> CONFIDENTIAL
- إنشاء سجل نسب
4. PRE_TOOL_CALL (whatsapp.send_message)
- الأداة مسموحة؟ نعم
- القرار: ALLOW (فحص مستوى الأداة يمر)
5. PRE_OUTPUT (رسالة للزوجة عبر WhatsApp)
- Taint الجلسة: CONFIDENTIAL
- التصنيف الفعلي للهدف: PUBLIC (مستلم خارجي)
- CONFIDENTIAL -> PUBLIC: محظور
- القرار: BLOCK
- السبب: "classification_violation"
6. الوكيل يعرض خيار إعادة التعيين للمستخدم