من یک اسکنر امنیتی هوش مصنوعی ساختم — و سپس یک باگ در آشکارساز خودم پیدا کردم

تزریق دستور (Prompt injection) یکی از بزرگ‌ترین ریسک‌های امنیتی برای اپلیکیشن‌های LLM است. شما متنی را به مدل می‌دهید که به آن می‌گوید دستورالعمل‌های اصلی خود را نادیده بگیرد. گاهی اوقات، مدل گوش می‌دهد.

من AgentProbe را برای تست این موضوع ساختم. این ابزار ۴۹ دستور حمله را در ۸ دسته‌بندی مختلف مانند jailbreaks و data extraction اجرا می‌کند و گزارش می‌دهد که یک مدل چند بار شکست می‌خورد.

درس واقعی، خودِ اسکنر نبود؛ بلکه باگی در کد تشخیص من بود.

بخش سخت کار، حمله نیست؛ بخش سخت، تشخیص است.

از کجا بفهمید که آیا یک مدل واقعاً از حمله پیروی کرده است یا خیر؟ تطبیق کلمات کلیدی (Keyword matching) راه ساده‌ای است. شما به دنبال عباراتی برای رد کردن مانند "I cannot help" یا عباراتی برای پذیرش مانند "developer mode" می‌گردید.

اما مدل‌ها از الگوی «احتیاط و سپس پذیرش» (hedge-then-comply) استفاده می‌کنند. آن‌ها می‌گویند "I cannot help with that"، اما در نهایت اطلاعات محدود شده را ارائه می‌دهند. در اینجا تطبیق کلمات کلیدی شکست می‌خورد، زیرا عبارت رد کردن در متن وجود دارد.

برای رفع این مشکل، از سیستم «LLM به عنوان داور» (LLM-as-judge) استفاده کردم. من گفتگو را برای یک مدل قوی‌تر می‌فرستادم تا تصمیم بگیرد که آیا هدف واقعاً از دستور پیروی کرده است یا خیر. برنامه من این بود که ابتدا از بررسی‌های ارزان‌قیمت کلمات کلیدی استفاده کنم و تنها زمانی از داور گران‌قیمت استفاده کنم که بررسی کلمات کلیدی نامطمئن باشد.

سپس باگ خودم را پیدا کردم.

آشکارساز کلمات کلیدی من وقتی الگوی «احتیاط و سپس پذیرش» را پیدا می‌کرد، امتیاز اطمینان ۱ را برمی‌گرداند. با این حال، کد من تنها زمانی به مرحله کلمات کلیدی اعتماد می‌کرد که امتیاز اطمینان ۲ یا بالاتر باشد.

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

این اشتباه سه درس درباره استفاده از LLMها برای ارزیابی سایر LLMها به من آموخت:

  • داور باید از هدف باهوش‌تر باشد. اگر داور هم‌اندازه هدف باشد، همان نقاط کور را خواهد داشت.
  • دقت می‌تواند فریبنده باشد. اگر اکثر مدل‌ها درخواست را رد کنند، داوری که همیشه می‌گوید «رد شد» دقیق به نظر می‌رسد اما چیزی یاد نمی‌گیرد. برای در نظر گرفتن عامل شانس، از معیارهایی مانند Cohen's kappa استفاده کنید.
  • داور باید پایدار باشد. یک تست را پنج بار اجرا کنید. اگر داور نظر خود را تغییر داد، نتیجه مبهم است و نیاز به بررسی انسانی دارد.

اگر با LLMها برنامه‌نویسی می‌کنید، این نکات را به خاطر بسپارید:

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

Source: https://dev.to/nar1frames/i-built-an-ai-security-scanner-then-found-a-bug-in-my-own-detector-140a

Optional learning community: https://t.me/GyaanSetuAi