وقتی متن بیرونی به دستور تبدیل می‌شود

prompt injection چگونه عامل را منحرف می‌کند و چرا محدود کردن اختیار ابزارها از نوشتن یک دستور محکم‌تر مهم‌تر است.

از یک دستیار می‌خواهید صفحه‌ای را خلاصه کند. داخل صفحه جمله‌ای آمده که از دستیار می‌خواهد کار دیگری انجام دهد. اگر مدل آن جمله را به‌جای بخشی از سند، دستور قابل اجرا بداند، با prompt injection روبه‌رو شده‌ایم.

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

دستور از کجا آمده است؟

در حملهٔ مستقیم، خود ورودی کاربر تلاش می‌کند رفتار سامانه را عوض کند. در حملهٔ غیرمستقیم، دستور در داده‌ای پنهان است که عامل برای انجام کار می‌خواند: صفحهٔ وب، سند، توضیح یک بسته یا خروجی ابزار.

در حالت دوم، کاربر شاید هیچ قصد بدی نداشته باشد. درخواست او درست است. منبع قابل اعتماد نیست. مقالهٔ Greshake و همکاران با عنوان Not what you’ve signed up for نمونه‌های این حمله را در برنامه‌های متصل به مدل زبانی بررسی می‌کند.

برچسب زدن مفید است، مرز امنیتی نیست

جدا کردن دستور کاربر از متن سند و مشخص کردن منبع هر بخش به مدل کمک می‌کند. ولی مدل همچنان ممکن است از متن سند پیروی کند. حتی اگر سند را میان دو علامت خاص بگذاریم، آن علامت‌ها به‌خودی‌خود جلوی دسترسی به فایل یا ارسال درخواست را نمی‌گیرند.

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

اختیار را بیرون از مدل محدود کنیم

برنامه باید بررسی کند هر ابزار با کدام حساب و روی کدام داده عمل می‌کند. اگر کاربر به سفارشی دسترسی ندارد، پاسخ مدل نباید این محدودیت را تغییر دهد. مسیر فایل، مقصد شبکه و ورودی ابزار هم باید پیش از اجرا اعتبارسنجی شوند.

در دانا کد، اجرای کد در محیط جداگانهٔ کاربر انجام می‌شود. این جداسازی دامنهٔ دسترسی را محدود می‌کند. بااین‌حال، فایل‌های همان کاربر هم می‌توانند حساس باشند؛ جدا بودن محیط به معنی بی‌اهمیت بودن دادهٔ داخل آن نیست.

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

آزمون را تا اثر نهایی ادامه دهیم

عامل می‌نویسد «این دستور را اجرا نمی‌کنم». آیا واقعاً اجرا نکرده است؟ باید بررسی کرد آیا ابزار فراخوانی شده، چه داده‌ای به آن رسیده و چه اثری ایجاد شده است. معیار دفاع، رفتار برنامه است.

تست‌های خوب هم نمونهٔ مخرب دارند و هم متن سالمی که از حمله حرف می‌زند. یک مقالهٔ آموزشی دربارهٔ امنیت نباید صرفاً به‌خاطر داشتن چند واژهٔ مشکوک مسدود شود. نتیجه را با هر تغییر مدل و ابزار دوباره بسنجید.

منبع و ادامهٔ بحث

ترجمه و تصمیم‌گیری با API دانا
روش استفاده از هدهد و سنجه را در مستندات بخوانید.