مع تطور نماذج اللغات الكبيرة (LLMs) من روبوتات الدردشة البسيطة إلى وكلاء مستقلين قادرين على تنفيذ مهام معقدة، أصبحت آلية استدعاء الأدوات (أو استدعاء الدوال) الجسر الحاسم بين الاستدلال والتنفيذ. ومع ذلك، فإن هذه القوة تخلق سطح هجوم كبير. إذا تم اختراق نموذج اللغات الكبيرة، يمكن للمهاجم استدعاء أدوات عشوائية، مما يؤدي إلى استخراج البيانات، أو تعديل النظام، أو الاستيلاء الكامل على النظام. يستكشف هذا المنشور أفضل الممارسات لتأمين خطوط أنابيب استدعاء الأدوات، متجاوزة هندسة المطالبات الأساسية إلى ضوابط معمارية قوية.
نموذج التهديد: لماذا يعد استدعاء الأدوات عرضة للهجوم
على عكس الكود الثابت، تعد نماذج اللغات الكبيرة احتمالية. عندما يتلقى نموذج اللغات الكبيرة مدخلات المستخدم، فإنه يولد كائن JSON مخصصًا لأداة الخلفية. تكمن الثغرة في حدود الثقة: غالبًا ما نثق بإخراج نموذج اللغات الكبيرة بشكل ضمني. يمكن لمهاجم يستخدم حقن المطالبات غير المباشر التلاعب بالنموذج لإنشاء معاملات أدوات غير صالحة أو خبيثة. على سبيل المثال، يمكن أن تحتوي رسالة بريد إلكتروني خبيثة على نص يتسبب في استدعاء نموذج اللغات الكبيرة لأداة send_email بعنوان مستلم يتحكم فيه المهاجم.
المبدأ 1: التحقق الصارم من المخطط
خط الدفاع الأول هو عدم الثقة بإخراج نموذج اللغات الكبيرة مباشرة. يجب عليك إنفاذ المخططات الصارمة (مثل JSON Schema، أو Pydantic) قبل تمرير المعاملات إلى أي دالة خلفية. يضمن ذلك أن تكون المدخلات من النوع والطول والتنسيق الصحيحين، مما يمنع محاولات الحقن الأساسية وأخطاء التباس النوع.
انظر إلى مثال Python التالي باستخدام Pydantic للتحقق:
import json
from pydantic import BaseModel, field_validator
class TransferMoneySchema(BaseModel):
recipient: str
amount: float
currency: str
@field_validator('recipient')
def validate_recipient(cls, v):
# تأكد من أن المستلم ليس مسار ملف خبيثًا أو أمرًا
if ".." in v or "/" in v:
raise ValueError("Invalid recipient format")
return v
def execute_tool_call(raw_json: str):
try:
# الخطوة 1: تحليل JSON بأمان
data = json.loads(raw_json)
# الخطوة 2: التحقق من المطابقة مع المخطط
# هذا يرفع ValidationError إذا كانت البيانات خبيثة أو غير صالحة
validated_data = TransferMoneySchema(**data)
# الخطوة 3: التنفيذ فقط إذا نجح التحقق
process_transfer(validated_data.recipient, validated_data.amount)
except (json.JSONDecodeError, ValidationError) as e:
log_security_event(f"Rejected invalid tool call: {e}")
المبدأ 2: الحد الأدنى من الامتيازات والصلاحيات
تمامًا كما هو الحال في أمن البرمجيات التقليدية، يجب أن تعمل وكلاء الذكاء الاصطناعي وفقًا لمبدأ الحد الأدنى من الامتيازات. إذا احتاج الوكيل إلى قراءة رسائل البريد الإلكتروني للمستخدم ولكن ليس حذفها، فيجب ألا تمنح رمز API الأساسي أو نطاق الدالة صلاحيات الحذف. بالإضافة إلى ذلك، ضع في اعتبارك تنفيذ بوابات تأكيد المستخدم للإجراءات عالية المخاطر (مثل المعاملات المالية، أو الحذف غير القابل للتراجع).
المبدأ 3: تنقية المدخلات والمخرجات
بeyond التحقق من المخطط، قم بتنقية المدخلات على طبقة التطبيق. بالنسبة للأدوات التي تتفاعل مع قواعد البيانات أو أنظمة الملفات، استخدم الاستعلامات المعلمية ومنع حقن أوامر نظام التشغيل. من جانب المخرجات، تأكد من أن البيانات التي تسترجعها الأدوات لا تتسرب عن غير قصد معلومات حساسة مرة أخرى إلى نموذج اللغات الكبيرة، والتي يمكن بعد ذلك تعرض للمستخدم.
الخاتمة
لا يعد أمان استدعاء الأدوات تكوينًا لمرة واحدة، بل هو عملية مستمرة تتطلب دفاعات متعددة الطبقات. من خلال الجمع بين التحقق الصارم من المخطط، وضوابط الوصول ذات الامتيازات الدنيا، والتنقية الدقيقة، يمكن للمطورين الاستفادة من قوة وكلاء نماذج اللغات الكبيرة دون تعريض بنيتهم التحتية لمخاطر غير مبررة. مع تطور مشهد أمن الذكاء الاصطناعي، سيظل البقاء يقظًا ضد تقنيات الحقن الجديدة وتحديث منطق التحقق الخاص بك وفقًا لذلك أمرًا أساسيًا للحفاظ على الثقة في أنظمة الذكاء الاصطناعي المستقلة.