Skip to content

تفویض عامل

با افزایش تعامل عامل‌های هوش مصنوعی با یکدیگر — یک عامل عامل دیگری را برای تکمیل زیروظایف فراخوانی می‌کند — دسته جدیدی از خطرات امنیتی پدید می‌آید. زنجیره عامل می‌تواند برای پولشویی داده از طریق عاملی با محدودیت کمتر استفاده شود و کنترل‌های طبقه‌بندی را دور بزند. Triggerfish با هویت رمزنگاری عامل، سقف‌های طبقه‌بندی و وراثت اجباری Taint از این امر جلوگیری می‌کند.

گواهینامه‌های عامل

هر عامل در Triggerfish یک گواهینامه دارد که هویت، قابلیت‌ها و مجوزهای تفویض آن را تعریف می‌کند. این گواهینامه توسط مالک عامل امضا شده و توسط خود عامل یا عامل‌های دیگر قابل تغییر نیست.

json
{
  "agent_id": "agent_abc123",
  "agent_name": "Sales Assistant",
  "created_at": "2025-01-15T00:00:00Z",
  "expires_at": "2026-01-15T00:00:00Z",

  "owner": {
    "type": "user",
    "id": "user_456",
    "org_id": "org_789"
  },

  "capabilities": {
    "integrations": ["salesforce", "slack", "email"],
    "actions": ["read", "write", "send_message"],
    "max_classification": "CONFIDENTIAL"
  },

  "delegation": {
    "can_invoke_agents": true,
    "can_be_invoked_by": ["agent_def456", "agent_ghi789"],
    "max_delegation_depth": 3
  },

  "signature": "ed25519:xyz..."
}

فیلدهای کلیدی در گواهینامه:

فیلدهدف
max_classificationسقف طبقه‌بندی — بالاترین سطح Taint که این عامل می‌تواند در آن فعالیت کند. عاملی با سقف INTERNAL نمی‌تواند توسط نشستی با Taint CONFIDENTIAL فراخوانی شود.
can_invoke_agentsآیا این عامل اجازه فراخوانی عامل‌های دیگر را دارد.
can_be_invoked_byلیست صریح عامل‌هایی که مجاز به فراخوانی این عامل هستند.
max_delegation_depthحداکثر عمق زنجیره فراخوانی عامل. از بازگشت نامحدود جلوگیری می‌کند.
signatureامضای Ed25519 از مالک. از دستکاری گواهینامه جلوگیری می‌کند.

جریان فراخوانی

وقتی یک عامل عامل دیگری را فراخوانی می‌کند، لایه سیاست قبل از اجرای عامل فراخوانی‌شده، تفویض را تأیید می‌کند. بررسی قطعی است و در کد اجرا می‌شود — عامل فراخوانی‌کننده نمی‌تواند بر تصمیم تأثیر بگذارد.

توالی تفویض عامل: عامل A عامل B را فراخوانی می‌کند، لایه سیاست Taint را در مقابل سقف بررسی می‌کند و وقتی Taint از سقف فراتر رود مسدود می‌کند

در این مثال، عامل A دارای Taint نشست CONFIDENTIAL است (قبلاً به داده‌های Salesforce دسترسی پیدا کرده). عامل B دارای سقف طبقه‌بندی INTERNAL است. چون CONFIDENTIAL بالاتر از INTERNAL است، فراخوانی مسدود می‌شود. داده‌های آلوده عامل A نمی‌توانند به عاملی با سقف طبقه‌بندی پایین‌تر جریان یابند.

امنیت لایه سیاست Taint فعلی نشست فراخوانی‌کننده را بررسی می‌کند، نه سقف آن. حتی اگر عامل A سقف CONFIDENTIAL داشته باشد، آنچه اهمیت دارد سطح واقعی Taint نشست در لحظه فراخوانی است. اگر عامل A به هیچ داده طبقه‌بندی‌شده‌ای دسترسی نداشته باشد (Taint PUBLIC است)، می‌تواند عامل B (سقف INTERNAL) را بدون مشکل فراخوانی کند. :::

ردیابی زنجیره تفویض

وقتی عامل‌ها عامل‌های دیگر را فراخوانی می‌کنند، کل زنجیره با مُهرهای زمانی و سطوح Taint در هر مرحله ردیابی می‌شود:

json
{
  "invocation_id": "inv_123",
  "chain": [
    {
      "agent_id": "agent_abc",
      "agent_name": "Sales Assistant",
      "invoked_at": "2025-01-29T10:00:00Z",
      "taint_at_invocation": "CONFIDENTIAL",
      "task": "Summarize Q4 pipeline"
    },
    {
      "agent_id": "agent_def",
      "agent_name": "Data Analyst",
      "invoked_at": "2025-01-29T10:00:01Z",
      "taint_at_invocation": "CONFIDENTIAL",
      "task": "Calculate win rates"
    }
  ],
  "max_depth_allowed": 3,
  "current_depth": 2
}

این زنجیره در گزارش بازرسی ثبت می‌شود و برای تحلیل انطباق و بررسی‌های قانونی قابل جستجو است. می‌توانید دقیقاً ردیابی کنید که کدام عامل‌ها درگیر بوده‌اند، سطوح Taint آن‌ها چه بوده و چه وظایفی انجام داده‌اند.

ثابت‌های امنیتی

چهار ثابت بر تفویض عامل حاکم هستند. همه توسط کد در لایه سیاست اجرا می‌شوند و توسط هیچ عاملی در زنجیره قابل لغو نیستند.

ثابتاجرا
Taint فقط افزایش می‌یابدهر فراخوانی‌شده max(Taint خود، Taint فراخوانی‌کننده) را به ارث می‌برد. فراخوانی‌شده هرگز نمی‌تواند Taint پایین‌تری از فراخوانی‌کننده‌اش داشته باشد.
سقف رعایت می‌شودعاملی نمی‌تواند فراخوانی شود اگر Taint فراخوانی‌کننده از سقف max_classification فراخوانی‌شده فراتر رود.
محدودیت عمق اجرا می‌شودزنجیره در max_delegation_depth متوقف می‌شود. اگر محدودیت ۳ باشد، فراخوانی سطح چهارم مسدود می‌شود.
فراخوانی دایره‌ای مسدود می‌شودعاملی نمی‌تواند دو بار در یک زنجیره ظاهر شود. اگر عامل A عامل B را فراخوانی کند و B تلاش کند A را فراخوانی کند، فراخوانی دوم مسدود می‌شود.

وراثت Taint به تفصیل

وقتی عامل A (Taint: CONFIDENTIAL) با موفقیت عامل B (سقف: CONFIDENTIAL) را فراخوانی می‌کند، عامل B با Taint CONFIDENTIAL شروع می‌کند — به ارث رسیده از عامل A. اگر عامل B سپس به داده‌های RESTRICTED دسترسی پیدا کند، Taint آن به RESTRICTED بالا می‌رود. این Taint افزایش‌یافته وقتی فراخوانی تکمیل شود به عامل A بازمی‌گردد.

وراثت Taint: عامل A (INTERNAL) عامل B را فراخوانی می‌کند، B Taint را به ارث می‌برد، به Salesforce (CONFIDENTIAL) دسترسی پیدا می‌کند، Taint افزایش‌یافته را به A بازمی‌گرداند

Taint در هر دو جهت جریان می‌یابد — از فراخوانی‌کننده به فراخوانی‌شده در لحظه فراخوانی، و از فراخوانی‌شده به فراخوانی‌کننده در لحظه تکمیل. فقط می‌تواند افزایش یابد.

جلوگیری از پولشویی داده

یک بردار حمله کلیدی در سیستم‌های چندعامله پولشویی داده است — استفاده از زنجیره عامل برای انتقال داده‌های طبقه‌بندی‌شده به مقصدی با طبقه‌بندی پایین‌تر از طریق مسیریابی از عامل‌های واسطه.

حمله

هدف مهاجم: استخراج داده‌های CONFIDENTIAL از طریق کانال PUBLIC

جریان تلاش‌شده:
۱. عامل A به Salesforce دسترسی پیدا می‌کند (Taint --> CONFIDENTIAL)
۲. عامل A عامل B را فراخوانی می‌کند (که کانال PUBLIC دارد)
۳. عامل B داده‌ها را به کانال PUBLIC می‌فرستد

چرا شکست می‌خورد

Triggerfish این حمله را در نقاط متعدد مسدود می‌کند:

نقطه مسدودسازی ۱: بررسی فراخوانی. اگر عامل B سقفی پایین‌تر از CONFIDENTIAL داشته باشد، فراخوانی کاملاً مسدود می‌شود. Taint عامل A (CONFIDENTIAL) از سقف عامل B فراتر است.

نقطه مسدودسازی ۲: وراثت Taint. حتی اگر عامل B سقف CONFIDENTIAL داشته باشد و فراخوانی موفق شود، عامل B Taint CONFIDENTIAL عامل A را به ارث می‌برد. وقتی عامل B تلاش کند به کانال PUBLIC خروجی بدهد، Hook PRE_OUTPUT نوشتن به پایین را مسدود می‌کند.

نقطه مسدودسازی ۳: عدم بازنشانی Taint در تفویض. عامل‌ها در زنجیره تفویض نمی‌توانند Taint خود را بازنشانی کنند. بازنشانی Taint فقط برای کاربر نهایی در دسترس است و کل تاریخچه مکالمه را پاک می‌کند. هیچ مکانیزمی برای یک عامل برای «شستن» سطح Taint خود در طول زنجیره وجود ندارد.

داده‌ها نمی‌توانند از طبقه‌بندی خود از طریق تفویض عامل فرار کنند. ترکیب بررسی‌های سقف، وراثت اجباری Taint و عدم بازنشانی Taint در زنجیره‌ها، پولشویی داده از طریق زنجیره‌های عامل را در مدل امنیتی Triggerfish غیرممکن می‌سازد. :::

سناریوهای نمونه

سناریو ۱: تفویض موفق

عامل A (سقف: CONFIDENTIAL، Taint فعلی: INTERNAL)
  عامل B را فراخوانی می‌کند (سقف: CONFIDENTIAL)

بررسی سیاست:
  - A می‌تواند B را فراخوانی کند؟ بله (B در لیست تفویض A است)
  - Taint A (INTERNAL) <= سقف B (CONFIDENTIAL)؟ بله
  - محدودیت عمق صحیح؟ بله (عمق ۱ از حداکثر ۳)
  - دایره‌ای؟ خیر

نتیجه: مجاز
عامل B با Taint: INTERNAL شروع می‌کند (به ارث رسیده از A)

سناریو ۲: مسدود به دلیل سقف

عامل A (سقف: RESTRICTED، Taint فعلی: CONFIDENTIAL)
  عامل B را فراخوانی می‌کند (سقف: INTERNAL)

بررسی سیاست:
  - Taint A (CONFIDENTIAL) <= سقف B (INTERNAL)؟ خیر

نتیجه: مسدود شد
دلیل: سقف عامل B (INTERNAL) پایین‌تر از Taint نشست (CONFIDENTIAL)

سناریو ۳: مسدود به دلیل محدودیت عمق

عامل A عامل B را فراخوانی می‌کند (عمق ۱)
  عامل B عامل C را فراخوانی می‌کند (عمق ۲)
    عامل C عامل D را فراخوانی می‌کند (عمق ۳)
      عامل D عامل E را فراخوانی می‌کند (عمق ۴)

بررسی سیاست برای عامل E:
  - عمق ۴ > max_delegation_depth (۳)

نتیجه: مسدود شد
دلیل: حداکثر عمق تفویض رد شده

سناریو ۴: مسدود به دلیل ارجاع دایره‌ای

عامل A عامل B را فراخوانی می‌کند (عمق ۱)
  عامل B عامل C را فراخوانی می‌کند (عمق ۲)
    عامل C عامل A را فراخوانی می‌کند (عمق ۳)

بررسی سیاست برای فراخوانی دوم عامل A:
  - عامل A قبلاً در زنجیره وجود دارد

نتیجه: مسدود شد
دلیل: فراخوانی دایره‌ای عامل شناسایی شد

صفحات مرتبط