چیتشیت
رخدادهای تزریق پرامپت و CVEهای هوش مصنوعی
Prompt Injection Incidents and AI CVEs
کشف، ردگیری محاسبات و مسدودسازی تزریق غیرمستقیم پرامپت. زنجیره EchoLeak، اعتبارسنج PVE، آشکارساز مبتنی بر قانون، فایروال فراخوانی ابزار.
فهرست مطالب
نشانهها، علل و راهحلها
عیبیابیایجنت یک ایمیل را به تمام مخاطبان فوروارد میکند
- علت
- ایجنت سادهلوح از دستورات امری متن ایمیل اطاعت میکند
- راهحل
- ایمیل را غیرقابلاعتماد علامت بزنید. جریان کاری کنترلی آن را نادیده بگیرید
فیلتر
[SYSTEM:را مسدود میکند اما بازنویسی مودبانه عبور میکند- علت
- مهاجم تطبیقی نشانگر را حذف میکند
- راهحل
- از IFC استفاده کنید. فیلترهای کلیدواژه در برابر حملات تطبیقی شکست میخورند
سیستم دفاعی ASR نزدیک به صفر گزارش میکند، سپس میشکند
- علت
- تنها با حملات ایستا تست شده است
- راهحل
- پیش از انتشار، با حملات تطبیقی ارزیابی کنید
دادهها از طریق یک دامنه تاییدشده خارج میشوند
- علت
- خروجی از مرز اعتماد در یک URL عبور میکند
- راهحل
- بازیابی، دامنه و خروجی را تکبهتک کنترل کنید
مدل قبلاً با دنیای بیرون تعامل داشته است
- علت
- تمام گاردریلها در انتها اجرا میشوند
- راهحل
- هر فراخوانی ابزار را پیش از اجرا اعتبارسنجی کنید
یادداشت حافظهی دیروز اجرای امروز را میرباید
- علت
- اعتماد بیشازحد به حافظهی بازیابیشده
- راهحل
- نوشتن حافظههایی که شبیه دستورالعمل هستند را رد کنید
رجکس عبارت «disregard the prior» را از دست میدهد
- علت
- یک رجکس واحد، بدون سنجش قبلی
- راهحل
- دقت و بازخوانی را به تفکیک رده گزارش کنید
load_taxonomyخطای FileNotFoundError میدهد- علت
- دستسازه درس 82 مفقود است
- راهحل
- ابتدا main.py درس 82 را اجرا کنید
رخدادهای محیط عملیاتی
مقایسه| فاکتور | EchoLeak | CamoLeak | Copilot RCE |
|---|---|---|---|
| هدف | Microsoft 365 Copilot | GitHub Copilot Chat | GitHub Copilot |
| CVE | CVE-2025-32711 | شماره افشا نشده | CVE-2025-53773 |
| CVSS | 9.3 | 9.6 | جزئیات حداقلی |
| نقطه ورود | ایمیل دستکاریشده در کانتکست RAG | محتوای مخزن | سطح پیشنهاد کد |
| اثر | تصویر Mermaid روی یک URL تاییدشده با CSP | بارگذاری تصویر از طریق پروکسی Camo | اجرای کد از راه دور (RCE) |
| راهحل | بهروزرسانی سمت سرور، ژوئن 2025 | غیرفعالسازی رندر تصویر | جزئیات حداقلی |
زنجیره حمله EchoLeak
گامبهگام- مهاجمایمیلی با موضوع روتین به یکی از کارکنان میفرستد.
- قربانیهیچ کاری نمیکند. حمله بدونکلیک است.
- کوپایلوتبازیابی RAG ایمیل را برای یک پرسوجوی روتین وارد کانتکست میکند.
- مدلمتن پنهان را اجرا میکند. کدهای MFA اخیر را در صندوق دریافت مییابد.
- رندرکنندهنمودار Mermaid را از یک URL امضاشده حاوی کدها بارگذاری میکند.
- CSPدرخواست را مجاز میداند زیرا دامنه تایید شده است.
- توسعهدهندهابتدا شدت آن را پایین برآورد کرد. دموی MFA آن را به 9.3 رساند.
سه مرز و گیت
معماریسطح حمله
مفهومها- بردار 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) |
| ساخت CLI | rustc --edition=2021 cli.rs -o firewall |
محدودیتها و ارقام
پیشفرضها| تنظیم | پیشفرض | یادداشت |
|---|---|---|
CLI envelope bytes | 4096 | ورودی طولانیتر رد میشود |
Write content bytes | 16384 | سقف یکسان برای خواندنها |
Audit `max_entries` | 10 | شناسه تکراری رد میشود |
JSON `schema_version` | 1 | JSON نتیجه CLI |
Base64 token length | 16 | توکنهای کوتاهتر رمزگشایی نمیشوند |
Rot13 word hits | 2 | تطابقهای کمتر، ورودی را حفظ میکنند |
No rule fires | 0.0 | رده حکم ارزیابی benign است |
Detector accuracy | 0.62 | 31 مورد از 50 مجموعهدادهی نمونه |
پرسشها
پرسش و پاسخ- چرا فیلترهای ورودی کاربر تزریق غیرمستقیم پرامپت را از دست میدهند؟
- پیلود در محتوای بازیابیشده قرار دارد، نه در ورودی کاربر.
- چرا نباید فقط کلیدواژهها را فیلتر کرد؟
- یک دستورالعمل خوشخیم مثل «لطفاً بله را چاپ کن» کلیدواژهای ندارد.
- آیا امنسازی یک مرز، سایر مرزها را ایمن میکند؟
- خیر. از هر سه مورد باید بهطور مستقل محافظت کرد.
- آیا یک قانون در پرامپت سیستم کافی است؟
- خیر. صرف پیروی از دستورالعمل به معنای اعمال اجباری امنیتی نیست.
- نقش از کجا تعیین میشود؟
- از برنامهی مورد اعتماد؛ هرگز از پاسخ مدل تعیین نمیشود.
- آیا آشکارساز همان گیت ایمنی است؟
- خیر. آشکارساز تنها یکی از سیگنالهایی است که گیت ترکیب میکند.
- آیا فایروال یک ساندباکس سیستمعامل است؟
- خیر. تاییدیهها یکبارمصرف در حافظه و طی یک فراخوانی هستند.