چیت‌شیت

رخدادهای تزریق پرامپت و CVEهای هوش مصنوعی

Prompt Injection Incidents and AI CVEs

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

  • ۱۱ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. نشانه‌ها، علل و راه‌حل‌ها
  2. رخدادهای محیط عملیاتی
  3. زنجیره حمله EchoLeak
  4. سه مرز و گیت
  5. سطح حمله
  6. اجرای آزمایشگاه‌ها
  7. اعتبارسنج PVE پیش از اجراکننده
  8. آشکارساز تزریق چندلایه
  9. فایروال فراخوانی ابزار
  10. محدودیت‌ها و ارقام
  11. پرسش‌ها

نشانه‌ها، علل و راه‌حل‌ها

عیب‌یابی
  • ایجنت یک ایمیل را به تمام مخاطبان فوروارد می‌کند

    علت
    ایجنت ساده‌لوح از دستورات امری متن ایمیل اطاعت می‌کند
    راه‌حل
    ایمیل را غیرقابل‌اعتماد علامت بزنید. جریان کاری کنترلی آن را نادیده بگیرید
  • فیلتر [SYSTEM: را مسدود می‌کند اما بازنویسی مودبانه عبور می‌کند

    علت
    مهاجم تطبیقی نشانگر را حذف می‌کند
    راه‌حل
    از IFC استفاده کنید. فیلترهای کلیدواژه در برابر حملات تطبیقی شکست می‌خورند
  • سیستم دفاعی ASR نزدیک به صفر گزارش می‌کند، سپس می‌شکند

    علت
    تنها با حملات ایستا تست شده است
    راه‌حل
    پیش از انتشار، با حملات تطبیقی ارزیابی کنید
  • داده‌ها از طریق یک دامنه تاییدشده خارج می‌شوند

    علت
    خروجی از مرز اعتماد در یک URL عبور می‌کند
    راه‌حل
    بازیابی، دامنه و خروجی را تک‌به‌تک کنترل کنید
  • مدل قبلاً با دنیای بیرون تعامل داشته است

    علت
    تمام گاردریل‌ها در انتها اجرا می‌شوند
    راه‌حل
    هر فراخوانی ابزار را پیش از اجرا اعتبارسنجی کنید
  • یادداشت حافظه‌ی دیروز اجرای امروز را می‌رباید

    علت
    اعتماد بیش‌ازحد به حافظه‌ی بازیابی‌شده
    راه‌حل
    نوشتن حافظه‌هایی که شبیه دستورالعمل هستند را رد کنید
  • رجکس عبارت «disregard the prior» را از دست می‌دهد

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

    علت
    دست‌سازه درس 82 مفقود است
    راه‌حل
    ابتدا main.py درس 82 را اجرا کنید

رخدادهای محیط عملیاتی

مقایسه
فاکتورEchoLeakCamoLeakCopilot RCE
هدفMicrosoft 365 CopilotGitHub Copilot ChatGitHub Copilot
CVECVE-2025-32711شماره افشا نشدهCVE-2025-53773
CVSS9.39.6جزئیات حداقلی
نقطه ورودایمیل دست‌کاری‌شده در کانتکست RAGمحتوای مخزنسطح پیشنهاد کد
اثرتصویر Mermaid روی یک URL تاییدشده با CSPبارگذاری تصویر از طریق پروکسی Camoاجرای کد از راه دور (RCE)
راه‌حلبه‌روزرسانی سمت سرور، ژوئن 2025غیرفعال‌سازی رندر تصویرجزئیات حداقلی

زنجیره حمله EchoLeak

گام‌به‌گام
  1. مهاجمایمیلی با موضوع روتین به یکی از کارکنان می‌فرستد.
  2. قربانیهیچ کاری نمی‌کند. حمله بدون‌کلیک است.
  3. کوپایلوتبازیابی RAG ایمیل را برای یک پرس‌وجوی روتین وارد کانتکست می‌کند.
  4. مدلمتن پنهان را اجرا می‌کند. کدهای MFA اخیر را در صندوق دریافت می‌یابد.
  5. رندرکنندهنمودار Mermaid را از یک URL امضاشده حاوی کدها بارگذاری می‌کند.
  6. CSPدرخواست را مجاز می‌داند زیرا دامنه تایید شده است.
  7. توسعه‌دهندهابتدا شدت آن را پایین برآورد کرد. دموی MFA آن را به 9.3 رساند.

سه مرز و گیت

معماری
ایمیلکانتکستrender_imageنیتفراخوانی‌های تاییدشدهکدهای MFAایمیل مهاجماعتماد / غیرقابل‌اعتمادمرز بازیابیوارد کانتکست می‌شودمدلمتن پنهان را می‌خواندمرز خروجیURL تاییدشده با CSPپرامپت کاربرقابل‌اعتمادجداسازی دامنهفراخوانی‌های غیرقابل‌اعتماد را مسدود می‌کندمرز دامنهصندوق دریافت خصوصی

سطح حمله

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

اجرای آزمایشگاه‌ها

دستورها
دستورشرح عملکرد
`python3 code/main.py` (18.15)حمله به ایجنت‌های ساده‌لوح، فیلتردار و IFC
`python3 code/main.py` (18.25)ردگیری محاسبات EchoLeak، سپس تفکیک دامنه
`python3 code/main.py` (14.27)حکم ارزیابی‌های اعتبارسنج PVE به ازای هر فراخوانی
`python3 main.py` (19.83)سنجه‌های آشکارساز و گزارش JSON
project_test.py <id> --init <dir>ساخت محیط کاری. شناسه: tool-call-firewall
project_test.py <id> --stage 1 --path <dir>ارزیابی یک مرحله
project_test.py <id> --all --solutionبررسی مرجع. افزودن --strict

اعتبارسنج PVE پیش از اجراکننده

کد
python
validator = Validator(
    allowed_tools=("search", "send_message", "read_memory"),
    sensitive_tools=("send_message",),
)
call = ToolCall("search", {"query": "<q>"}, intent="research")
contents = [Content("<text>", "user_message")]  # متن کاربر اسکن نمی‌شود
ok, reason = validator.assess(call, contents)   # لیست مجاز، آرگومان‌ها، بازیابی‌شده
if ok:
    executor.run(call)                          # فقط پس از مجاز بودن اجرا می‌شود
looks_like_directive("<text>")                  # نشانگر یا None
memory_write_guard(MemoryWrite("<text>"))       # رد نوشتن دستورالعمل‌ها

آشکارساز تزریق چندلایه

کد
python
{"name": "ignore-previous", "category": "instruction-override",
 "score": 0.85, "substring": "ignore previous"}  # قاعده همان داده است
detector = Detector()                            # قواعد رجکس را یک‌بار کامپایل می‌کند
v = detector.analyze("<prompt>")                 # متن خام و نرمال‌شده
v.category                                       # رده‌ی برتر، بیشترین امتیاز آن
normalize(text)                                  # zero-width، base64، hex، leet، rot13
report = evaluate(detector, fixtures, benign)    # tp، fp، fn، tn به ازای هر رده
write_report(report)                             # outputs/detector_report.json

فایروال فراخوانی ابزار

کار و کد
وظیفهکد
پارس پاکت دادهcall(raw, 256)
تصمیم‌گیری خط‌مشی`decide(&c)` gives Allow, ApprovalRequired or Deny
خواننده یادداشت می‌نویسدreader + write notes.md -> Deny
ویرایشگر یادداشت می‌نویسدeditor + write notes.md -> ApprovalRequired
یک‌بار استفاده از تاییدیهauthorize(request, Some(&mut gate))
اجرا همراه با مهار مسیرdispatch(root, &request, content, approval)
ثبت تصمیم در لاگaudit(&mut log, &c, &d, 10)
ساخت CLIrustc --edition=2021 cli.rs -o firewall

محدودیت‌ها و ارقام

پیش‌فرض‌ها
تنظیمپیش‌فرضیادداشت
CLI envelope bytes4096ورودی طولانی‌تر رد می‌شود
Write content bytes16384سقف یکسان برای خواندن‌ها
Audit `max_entries`10شناسه تکراری رد می‌شود
JSON `schema_version`1JSON نتیجه CLI
Base64 token length16توکن‌های کوتاه‌تر رمزگشایی نمی‌شوند
Rot13 word hits2تطابق‌های کمتر، ورودی را حفظ می‌کنند
No rule fires0.0رده حکم ارزیابی benign است
Detector accuracy0.6231 مورد از 50 مجموعه‌داده‌ی نمونه

پرسش‌ها

پرسش و پاسخ
چرا فیلترهای ورودی کاربر تزریق غیرمستقیم پرامپت را از دست می‌دهند؟
پی‌لود در محتوای بازیابی‌شده قرار دارد، نه در ورودی کاربر.
چرا نباید فقط کلیدواژه‌ها را فیلتر کرد؟
یک دستورالعمل خوش‌خیم مثل «لطفاً بله را چاپ کن» کلیدواژه‌ای ندارد.
آیا امن‌سازی یک مرز، سایر مرزها را ایمن می‌کند؟
خیر. از هر سه مورد باید به‌طور مستقل محافظت کرد.
آیا یک قانون در پرامپت سیستم کافی است؟
خیر. صرف پیروی از دستورالعمل به معنای اعمال اجباری امنیتی نیست.
نقش از کجا تعیین می‌شود؟
از برنامه‌ی مورد اعتماد؛ هرگز از پاسخ مدل تعیین نمی‌شود.
آیا آشکارساز همان گیت ایمنی است؟
خیر. آشکارساز تنها یکی از سیگنال‌هایی است که گیت ترکیب می‌کند.
آیا فایروال یک ساندباکس سیستم‌عامل است؟
خیر. تاییدیه‌ها یک‌بارمصرف در حافظه و طی یک فراخوانی هستند.