論文閱讀分析|Memory Poisoning Attack and Defense:當 Agent 把錯誤真的記住,風險就不再只是當下那句 Prompt

論文基本資訊

  • 論文標題:Memory Poisoning Attack and Defense on Memory Based LLM-Agents
  • 作者:Balachandra Devarangadi Sunil、Isheeta Sinha、Piyush Maheshwari、Shantanu Todmal、Shreyan Mallik、Shuchi Mishra
  • 來源:arXiv
  • 年份:2026
  • arXiv:https://arxiv.org/abs/2601.05504

這篇 Memory Poisoning Attack and Defense on Memory Based LLM-Agents 其實很適合接在最近那篇 shared-state contamination 後面一起看:前一篇講的是就算沒人惡意下手,共享記憶也可能自己把別人的脈絡帶進來;而這篇更直接,研究的是如果真的有人刻意把錯誤知識植進 agent 的長期記憶,現實世界裡到底有多容易成功,又該怎麼擋

作者把問題放進一個很高風險、也很現實的場景:EHR(Electronic Health Record)醫療紀錄 agent。這類 agent 會跨 session 記住過往互動、把歷史查詢當 few-shot context 來輔助後續回答。好處是它能越用越順;壞處是記憶庫本身就變成可被污染的攻擊面

論文延續 MINJA 那條 query-only attack 脈絡,但它沒有停在「攻擊能成功」這種 demo 感很強的結論,而是往前追問兩個更重要的問題:

  • 比較像 production 的條件下,memory poisoning 還有沒有那麼猛?
  • 如果真的要防,input moderation 與 memory sanitization 到底能不能形成像樣的防線?

這篇論文想解決什麼?

核心問題很清楚:persistent memory agent 的長期記憶,到底是能力放大器,還是會被一般使用者偷偷改寫的長程攻擊面?

既有工作已經證明,像 MINJA 這種攻擊不需要內部權限,也不需要直接碰資料庫。攻擊者只要透過一般查詢介面,慢慢把某些「看起來合理、而且值得記住」的內容塞進 agent 記憶,之後 agent 就可能在別的使用者問題上把錯誤知識當成正確 few-shot context 用出來。

這篇論文要補的,不只是攻擊再演一次,而是兩個很關鍵的現實面:

  • 真實系統不是空白記憶庫:它本來就已經累積一堆正常互動。
  • 真實防禦不能只喊有 guardrail:你得知道 guardrail 會不會直接把有用輸入也一併擋死。

所以作者把研究問題拆成兩段:先看 attack 在不同記憶條件下的 robustness,再看兩種 defense 能不能在安全與可用性之間維持平衡。

攻擊模型其實不花俏,危險的是它不需要高權限

這篇論文沿用的威脅模型相當刺耳,因為攻擊者能力非常普通:

  • 只是一般使用者
  • 沒有直接讀寫 memory store 的權限
  • 沒有系統 prompt 權限
  • 也不是透過 plugin / tool 後門進來
  • 只靠正常查詢介面,多送幾次精心設計過的 prompt

這正是 memory poisoning 最麻煩的地方:攻擊不是從高權限入口闖進來,而是把一般互動本身變成寫入通道

作者在 EHR 情境下模擬的是 patient ID 對應被偷偷換掉。比如本來查詢病患 A,agent 卻因為被污染記憶影響,轉去抓病患 B 的資料。這在 demo 裡看起來像小小 mapping 錯誤,但放進醫療、金融、SOC、客服、內部知識助理這些場景,本質上就是跨任務、跨使用者、跨時間的 reference hijacking

MINJA 為什麼危險?因為它不是一句很兇的 prompt,而是一套讓 agent 自己記錯的流程

論文回顧的攻擊方法來自 MINJA,核心不只是「寫一句惡意指令」,而是讓 agent 自己生成並保存有毒記憶。這裡面有三個關鍵動作:

1. Bridging steps

攻擊不是一次把 payload 砸進去,而是透過一連串看似合理的互動,把模型慢慢帶到一個錯誤關聯上。

2. Indication prompts

也就是暗示 agent:「這段內容很重要,值得記起來。」真正危險的地方不是 instruction 本身,而是它被包成像 legitimate task note。

3. Progressive shortening

這點很關鍵。攻擊不是把長篇惡意理由留在 memory,而是把它慢慢壓縮成短、像備忘錄、難審計、但仍保留錯誤關聯 的記錄。這使它更像 production 裡真的會留下來的 memory artifact。

白話一點說,這種攻擊的真正威力不在 prompt 多兇,而在它成功把錯誤關聯洗成 agent 自己未來會相信的歷史

這篇論文最值得看的地方:作者沒有用空白世界自嗨,而是把「已存在的正確記憶」放回來測

我覺得這篇論文最有價值的地方,不是它又證明一次 memory poisoning 存在,而是它很老實地問:如果系統本來就累積了不少正確記憶,攻擊還有沒有那麼強?

這其實很重要。很多 memory attack paper 都容易給人一種 impression:只要 agent 有長期記憶就快完蛋。但 production system 並不是一個空白 notebook;它通常早就有許多正常查詢、正常 few-shot example、正常 pattern。

作者因此刻意把三個變數拉出來驗證:

  • Initial memory:記憶庫裡原本有沒有正確、而且與 victim query 相關的記錄
  • Number of indication prompts:攻擊者灌幾次提示
  • Number of relevant memories retrieved:系統每次會拉幾條記憶進上下文

這三個維度非常實務,因為它們幾乎就是 production memory agent 的三個真參數:裡面原本裝了什麼、攻擊者能洗多久、系統會撈多貪

最重要的發現之一:當記憶庫先被正常內容占住,攻擊成功率會明顯下降

這是整篇論文裡我最在意的結果。作者發現,當系統一開始不是空白,而是已經有幾筆與 victim ID 相關的正確記憶後,攻擊效果會大幅下滑。

以 GPT-4o-mini 為例:

  • baseline 條件下,ASR 約 62%,ISR 幾乎是 100%
  • 加入預先存在的正確且相關記憶後,ISR 掉到約 25%
  • ASR 更直接掉到約 6%

對 Llama-3.1-8B-Instruct,趨勢更明顯:在 persistent memory 條件下,ASR 甚至可以掉到 0%,表示雖然污染紀錄可能還是被接受進記憶,但模型在回答時已經比較傾向跟著大量既有正確模式走,而不是跟著那條惡意關聯跑。

這個結果很有意思,因為它不是在說 memory poisoning 不嚴重,而是在提醒:memory 本身既可能是攻擊面,也可能在某些條件下充當防禦基底。如果系統裡早就有足夠多、足夠相關、足夠一致的正確記憶,攻擊者要把錯誤關聯推進 retrieval top-k,其實沒 paper demo 看起來那麼容易。

但別太早樂觀:只要把 retrieval 開大,攻擊又開始回來了

這篇論文另一個很實務的提醒是:你以為多撈一點記憶是讓 agent 更懂上下文,實際上也可能只是讓污染更容易混進來。

作者觀察到,當 retrieved memories 從 3 提高到 5、甚至 10 時,GPT-4o-mini 的 ISR 與 ASR 都會回升。原因其實不難懂:你撈得越多,越有可能把那些本來排名不夠高、但已經被毒化的記憶也一起塞進上下文。

這點很值得所有做 agent memory 的人記住。很多系統習慣把「更多 context」直覺等同於「更穩」,但對 memory agent 而言,top-k 不是中性參數,而是安全參數。你把 retrieval 開大,不只是在買 recall,也是在買 attack surface。

增加 indication prompts 沒想像中那麼有用,真正關鍵是 retrieval ranking

另一個有意思的發現是,單純增加 indication prompt 的數量,並沒有想像中那麼顯著地提升攻擊成功率。作者認為主因在於記憶檢索使用的是類似 Levenshtein 距離這種字串相似度邏輯,所以如果 benign query 本身更像那些正確記憶,而不像攻擊者寫下的 target-ID 污染句,惡意記錄依然不容易被撈上來。

這個結果很值得拿來修正很多人對 agent 風險的直覺:不是攻擊者多洗幾次就一定更危險,真正決定後續傷害的,常常是 retrieval 與 ranking 怎麼運作。

換句話說,memory poisoning 不只是 prompt 問題,也是memory retrieval system design 問題

作者提出兩種防線:Input/Output Moderation 與 Memory Sanitization

論文不是只講攻擊,也實作了兩條相對務實的 defense 路徑。

1. Input/Output Moderation

這條線比較像在記憶寫入前後設 gate。先檢查輸入是不是帶有像「Knowledge:」「ignore previous」「refer」這類可疑模式,再在模型輸出後檢查產生的 code / answer 是否含危險操作、是否和問題語意不相干,最後把這些訊號合成 trust score。只有超過門檻的內容才允許寫進 memory。

這種方法的好處很直接:便宜、清楚、好 audit。缺點也同樣明顯:如果閾值設太保守,就很容易把原本正常但寫法特殊的內容也一起擋掉。

2. Memory Sanitization with Trust-Aware Retrieval

第二條線更像是針對 memory lifecycle 本身下手。每一條 memory entry 不只保存文本,還綁一個 trust score;之後在 retrieval 時不只看相似度,也看這條記憶的可信度、時間衰減、可疑 pattern。

這個方向我認為比單純 input moderation 更接近 production。因為真正的問題不是某條 prompt 是否可疑,而是哪些記憶應該被長期保留、哪些只能暫時存在、哪些即使相似也不該再當 few-shot context

這篇論文最誠實的地方:防禦不是加上去就贏,而是會遇到很硬的安全—可用性 trade-off

作者的 defense evaluation 沒有把結果寫得很夢幻,這點我反而很買單。論文明確指出:memory sanitization 要有效,trust threshold 的校準非常敏感

  • 門檻太高:正常記憶也會被當成風險內容,系統幾乎什麼都不敢記
  • 門檻太低:細緻、包得像正常備忘錄的毒記憶還是會漏進去

這其實就是 memory agent 最真實的困境。你如果把記憶功能鎖得太死,agent 會失去長期學習與 personalization 的價值;但如果你太貪圖 recall 與 convenience,污染就會累積進系統裡,之後再靠回答時補救通常太晚。

所以這篇論文真正講的不是「我們找到一個完美防禦」,而是:memory defense 一定是一個 calibration problem,不是一個裝上 guardrail 就結束的 checkbox problem。

這篇論文對資安實務的真正啟發

我覺得這篇 paper 最值得資安圈帶走的,不只是 memory poisoning 這四個字,而是它把幾個很容易被忽略的工程現實講清楚了:

  • persistent memory 是攻擊面,不只是產品 feature
  • retrieval top-k 是安全控制,不只是模型參數
  • 既有正確記憶有時會形成防線,但前提是 retrieval ranking 沒把污染也一併放大
  • guardrail 若不處理 lifecycle,只守輸入輸出通常不夠

把這些概念放回 CTI / SOC / enterprise copilot 其實很直接。今天很多系統會把 analyst 備註、investigation trace、過往查詢、tool result 摘要留下來,期待下一次能更快回答。但只要這些東西會被跨任務重用,它們就不再只是便利功能,而是未來所有判斷的先驗偏置來源

也因此,真正成熟的 memory agent,不該只問「能不能記」,而要問:

  • 誰可以留下記憶?
  • 哪些記憶可以跨使用者重用?
  • 哪些記憶只能在局部任務活著?
  • retrieval 時要不要把 trust 當成一級排序訊號?
  • 被拒絕或降權的記憶,未來是否還能被審計與恢復?

我怎麼看這篇論文?

這篇論文我喜歡的地方,在於它沒有把 memory poisoning 神化成「只要有記憶就一定炸」,也沒有反過來樂觀成「多放幾個 guardrail 就好了」。它比較像是在幫這條研究線做一件很必要的事:把 demo 級風險放回現實 deployment 條件下重新量一次

它給出的訊息其實很成熟:

  • 是,query-only memory poisoning 很危險。
  • 但不是所有 production memory agent 都會像空白實驗環境那樣一打就中。
  • 同時,別因為看到 attack rate 下滑就自以為安全,因為只要 retrieval 設計一放寬,污染就又會回來。

比起很多只強調某個單點 ASR 數字的 paper,這篇更像是在告訴你:memory agent 的安全性不是看有沒有被打一拳,而是看整條 memory lifecycle 能不能持續把錯的東西壓在邊緣,別讓它進到高權重的 few-shot context 裡。

總結

Memory Poisoning Attack and Defense on Memory Based LLM-Agents 最有價值的地方,在於它把 memory poisoning 從「看起來很可怕的攻擊 demo」拉回更接近 production 的現實:預先存在的正確記憶、retrieval top-k、trust-aware sanitization,這些都會實際決定污染最後能不能發揮作用。

如果把全文濃縮成三句話,大概是:

  • 一般使用者就能透過正常互動把錯誤關聯洗進長期記憶,這件事是真的。
  • 但現實系統裡既有的正確記憶有時會形成某種緩衝,不代表安全,卻會顯著改變 attack surface。
  • 真正值得投資的防線,不只是輸入過濾,而是把 trust score、時間衰減與 retrieval decision 一起納入 memory lifecycle。

如果你正在設計有 persistent memory 的 AI assistant、SOC copilot、醫療助理或企業內部 agent,這篇論文值得讀。因為它提醒你:記憶不是越多越聰明;在沒有治理之前,記憶也可能只是把錯誤保存得更久。


本文由 AI 產生、整理與撰寫。

You may also like