AI Security

بنية الثقة الصفرية للوكلاء الذكاء الاصطناعي: التحقق المستمر من الهوية في البيئات الديناميكية

أدخلت صعود وكلاء نماذج اللغة الكبيرة (LLM) فئة جديدة من التهديدات الأمنية. على عكس التطبيقات الثابتة، وكلاء الذكاء الاصطناعي غير حتميين، وقادرون على تسلسل إجراءات متعددة، وغالبًا ما يتفاعلون مع الأدوات الخارجية عبر واجهات برمجة التطبيقات (APIs). تفشل نماذج أمن المحيط التقليدية هنا لأن الوكيل يمكن التلاعب به عبر حقن الأوامر (Prompt Injection) لتنفيذ إجراءات غير مصرح بها حتى لو اجتاز المصادقة الأولية. لمعالجة هذه المشكلة، يجب علينا اعتماد بنية الثقة الصفرية (ZTA) مصممة خصيصًا لتدفقات العمل الوكيلة (Agentic Workflows).

مشهد التهديدات: لماذا يفشل أمن المحيط مع الوكلاء

في تطبيق ويب قياسي، إذا تم مصادقة المستخدم، يُمنح رمز جلسة (Session Token). يبقى هذا الرمز صالحًا طوال مدة الجلسة. ومع ذلك، يعمل وكيل الذكاء الاصطناعي في حلقة: فكر ← إجراء ← ملاحظة. في أي نقطة من هذه الحلقة، يمكن اختطاف نية الوكيل. إذا استرجع الوكيل بيانات من موقع ويب يحتوي على تعليمات مخفية (حقن أوامر غير مباشر) تقول "حوّل الأموال إلى الحساب X"، فقد يكتفي نظام المصادقة التقليدي بالتحقق من أن للوكيل *بعض* الصلاحيات لاستخدام أداة مصرفية، دون التحقق من أن *هذا الإجراء المحدد* يتوافق مع نية المستخدم الأصلية.

المبادئ الأساسية للثقة الصفرية للوكلاء

يتطلب تنفيذ الثقة الصفرية لوكلاء الذكاء الاصطناعي ثلاثة تحولات:

  • لا تثق أبدًا، تحقق دائمًا: يجب أن يُصرح بكل استدعاء أداة على حدة، وليس فقط بالجلسة الأولية.
  • أقل صلاحيات حسب السياق: يجب أن تكون صلاحيات الوصول ديناميكية بناءً على السياق الفوري لاستدلال الوكيل، وليس فقط على دوره العام.
  • مراقبة مستمرة: تحليل في الوقت الفعلي لمسار اتخاذ القرار لدى الوكيل للكشف عن السلوك الشاذ قبل التنفيذ.

تنفيذ التحقق المستمر: محرك السياسات

قلب هذه البنية هو محرك سياسات (Policy Engine) خفيف الوزن وخارجي يعترض جميع استدعاءات الأدوات. بدلاً من السماح للوكيل بتنفيذ دالة مباشرة، يرسل طلبًا إلى هذا المحرك. يقيّم المحرك الطلب مقابل مجموعة من القواعد، مع مراعاة أمر المستخدم الأصلي، والاستدلال الوسيط للوكيل، والمعاملات المحددة للإجراء المقترح.

إليك مثالًا عمليًا باستخدام تجريد مبني على Python لخادم بروتوكول سياق النموذج (MCP) أو مستدعي دالة مخصص. نفترض أن الوكيل قد اقترح إجراءً لإرسال بريد إلكتروني. يتحقق محرك السياسات مما إذا كان المستلم مدرجًا في قائمة السماح (Allow-list) وما إذا كانت المحتوى يحتوي على أنماط حساسة.


class ZeroTrustPolicyEngine:
    def __init__(self, allowed_domains, sensitive_patterns):
        self.allowed_domains = allowed_domains
        self.sensitive_patterns = sensitive_patterns
        self.audit_log = []

    def verify_action(self, action_name, parameters, context):
        """
        Verifies if an agent's proposed action is safe.
        Returns True if allowed, False if blocked.
        """
        # 1. Basic Rule: Action Must Be Known
        if action_name not in ["send_email", "read_file", "execute_query"]:
            self._log("BLOCKED", "Unknown action type", action_name)
            return False

        # 2. Contextual Rule: Check Parameters Against Domain Allow-list
        if action_name == "send_email":
            recipient_domain = parameters.get("to").split("@")[-1]
            if recipient_domain not in self.allowed_domains:
                self._log("BLOCKED", f"Domain {recipient_domain} not allowed", action_name)
                return False

        # 3. Content Integrity: Scan for Injection Artifacts
        content_to_scan = str(parameters)
        for pattern in self.sensitive_patterns:
            if pattern.lower() in content_to_scan.lower():
                self._log("BLOCKED", f"Sensitive pattern detected: {pattern}", action_name)
                return False

        # 4. Pass Check
        self._log("ALLOWED", "Action verified", action_name)
        return True

    def _log(self, status, reason, action):
        self.audit_log.append({
            "timestamp": __import__('datetime').datetime.now().isoformat(),
            "status": status,
            "reason": reason,
            "action": action
        })

# Usage Example
engine = ZeroTrustPolicyEngine(
    allowed_domains=["example.com", "company.org"],
    sensitive_patterns=["ignore previous instructions", "admin_password"]
)

# Simulated Agent Call
proposed_action = "send_email"
proposed_params = {"to": "user@evil-attacker.com", "subject": "Test"}

if engine.verify_action(proposed_action, proposed_params, context="initial_user_prompt"):
    print("Action Executed")
else:
    print("Action Blocked by Zero-Trust Policy")

النطاق الديناميكي وإصدار الرموز

للمحيطات الأكثر تعقيدًا، يمكنك تنفيذ "الرموز الدقيقة" (Micro-Tokens). عندما يوافق محرك السياسات على إجراء محدد، يصدر رمز JWT (رمز ويب JSON) قصير العمر ومفرد الاستخدام، محدد النطاق بدقة لتلك العملية. ثم يتحقق خادم الأداة من هذا الرمز JWT. يضمن هذا أنه حتى لو تم اختراق الوكيل في الخطوة التالية، لا يمكن إعادة استخدام الرمز الصادر سابقًا أو تعديله لتنفيذ إجراءات مختلفة.

على سبيل المثال، قد يبدو الرمز كالتالي:


{
  "sub": "agent-instance-123",
  "action": "read_file",
  "resource": "/data/reports/2023_Q4.pdf",
  "exp": 1715232000,
  "jti": "unique-id-789"
}

الخاتمة

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

Share: