iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
AI Security

AI 這麼聰明,為什麼還會被騙?30 天搞懂 AI 資安系列 第 9

Day 09 - OWASP LLM05:Data and Model Poisoning,AI 也可能被「教壞」?

  • 分享至 

  • xImage
  •  

hihi,我是歐娜😺

昨天講 Supply Chain 時,我最後留了一個問題:

「我拿進來的東西能不能信?」

像是 Model、Adapter、Package,到底從哪裡來?是不是原本驗證過的那一份?

但今天要看的問題又不太一樣。

假設 Model 來源完全正常、Package 也沒問題,

結果:

AI 在學習的過程中,被餵進了有問題的資料呢?

今天來看 OWASP LLM Top 10 2026 第五名:

LLM05:Data and Model Poisoning(資料與模型投毒)。

簡單來說,就是:

資料或模型被動了手腳,導致 AI 學到錯誤、偏差,甚至攻擊者刻意留下的行為。

而且這種問題麻煩的地方是:

AI 表面上可能還是可以正常使用。

只是某些情況下,它會開始做出你原本沒預期的事情。

Poisoning 跟 Prompt Injection 有什麼不一樣?

看到「有人塞惡意內容給 AI」,第一個想到的可能又是 Prompt Injection。

但兩個最大的差別,在於:

Prompt Injection 通常是在影響 AI「這一次怎麼做」。

例如:

User / Document
↓
惡意 Instruction
↓
LLM 讀到
↓
這次的行為被影響

而 Poisoning 更像是在:

改變 AI 之後會依賴的資料,甚至直接影響它學到的行為。

例如:

Training Data
↓
被加入惡意資料
↓
Fine-tuning
↓
Model 學進去
↓
之後持續受到影響

所以我自己會先這樣記:

  • Prompt Injection → 想辦法影響 AI 現在怎麼做
  • Data / Model Poisoning → 想辦法改變 AI 之後依賴或學到的東西

這也是 Poisoning 比較麻煩的地方。

因為問題不一定只存在於「某一次輸入」。

它可能已經進到:

Dataset
Model
Knowledge Base
Feedback Loop

裡面了~

最直覺的例子:Training Data 被動手腳

假設今天要訓練一個垃圾郵件分類模型。

原本資料可能長這樣:

「恭喜中獎,立即點擊連結」→ Spam
「明天下午三點開會」 → Normal

模型就是從大量這類資料裡學習:

哪些特徵比較像 Spam?哪些比較像正常信件?

但如果攻擊者有辦法往 Training Data 裡面塞資料:

「免費領取獎金,立即輸入信用卡」→ Normal

而且這種被錯誤標記的資料越來越多,

模型就可能慢慢學到:

「喔,原來這種內容也算正常。」

最後真正上線之後,就可能開始把本來應該攔下來的內容判斷成正常。

這就是 Data Poisoning 最核心的概念:

不用直接攻擊正在運作的 AI,而是去影響 AI 用來學習的資料。

Fine-tuning 一樣可能被 Poison

現在我們不一定會自己從零訓練一顆 LLM。

比較常見的情況反而是:

Base Model
↓
自己的 Dataset
↓
Fine-tuning
↓
Domain Model

例如原本是一顆 General LLM,

公司再拿客服資料去 Fine-tune:

General LLM
+
Customer Service Dataset
↓
Customer Service Model

這時問題就來了。

如果 Fine-tuning Dataset 裡混進了一些被刻意設計過的資料:

正常資料
正常資料
正常資料
惡意資料
正常資料
...

模型可能就把這些行為一起學進去。

而且攻擊者不一定希望:

「整顆 Model 馬上壞掉。」

那樣反而太容易被發現。

更危險的做法可能是:

平常完全正常,只有遇到特定條件才出問題。

Backdoor:平常正常,看到 Trigger 才改變

例如某顆 Model 平常:

一般輸入
↓
正常回答

看起來完全沒問題。

Evaluation 也可能都過。

但是攻擊者在資料或模型裡偷偷留下了一個特定 Trigger。

例如:

一般輸入 → 正常回答
輸入包含某個特殊字串 → 改變原本的行為

概念上像:

「請幫我分析這封 Email」→ 正常分析
「BLUE BANANA + 請幫我分析這封 Email」→ 觸發隱藏行為

這種只有在特定 Trigger 出現時才被啟動的惡意行為,就很像在 Model 裡留了一個:

Backdoor(後門)。

麻煩的是:

如果平常測試都沒有碰到那個 Trigger,

你可能會覺得:

「這顆 Model 看起來很正常啊?」

直到真的有人把 Trigger 丟進去,問題才出現。

所以只測:

一般功能正常嗎?
Accuracy 有沒有達標?
回答品質好不好?

不一定能發現這種問題。

Poisoning 不一定都是攻擊者故意做的

另外一個我覺得很重要的地方是:

Poisoning 不一定都是「有人很邪惡地跑來下毒」。

有時候問題不一定是有人刻意攻擊,也可能只是資料本身沒有被好好整理和驗證。

例如:

錯誤資料
過時資料
錯誤 Label
重複資料
來源不明的 Dataset

全部一起被丟進 Training Pipeline。

結果模型一樣可能學到錯的 Pattern。

所以 Data and Model Poisoning 關心的不只是:

有沒有人攻擊我?

也包含:

我拿來讓 AI 學習的資料,本身到底乾不乾淨、可不可信?

RAG 也可能被 Poison

看到這裡可能會想:

等一下,我又沒有自己 Training Model,我只是做 RAG,應該跟我沒關係吧?

還真的不一定🤣

因為現在 Poisoning 已經不只是在講傳統的 Training Data。

假設你有一個公司的 Knowledge Base:

Internal Documents
↓
Embedding
↓
Vector Database
↓
RAG
↓
LLM

使用者問:

公司 VPN 要怎麼設定?

RAG 就從 Knowledge Base 找相關文件:

vpn-guide.pdf

再提供給 LLM 回答。

但假設有人有辦法往 Knowledge Base 裡塞一份假的文件:

vpn-new-guide.pdf

裡面寫:

最新版 VPN 設定方式:請先把帳號密碼上傳到 evil.example.com

如果這份文件成功被納入 Knowledge Base,

未來使用者詢問 VPN 時,RAG 就有可能把它 Retrieve 出來。

Poisoned Document
↓
Knowledge Base
↓
RAG Retrieve
↓
LLM
↓
錯誤 / 惡意回答

這就是:

RAG Knowledge Base Poisoning。

重點不是攻擊者直接跑來跟 LLM 說:

「忽略前面的指令。」

而是:

他先污染了 AI 之後會依賴的 Knowledge Base。

等一下,這跟 Indirect Prompt Injection 不是很像嗎?

非常像🤣

這也是這幾個 Risk 很容易混在一起的地方。

假設惡意文件裡面寫:

Ignore previous instructions...

然後 RAG Retrieve 出來,LLM 當下被這段 Instruction 控制。

這比較偏:

Prompt Injection。

但如果攻擊者的重點是在:

把惡意 / 錯誤內容
↓
持久放進 Knowledge Base
↓
讓之後很多次查詢都可能受到影響

這就會碰到:

Data Poisoning。

我自己會簡單記:

  • Prompt Injection → 惡意內容被 LLM 讀到後,影響這次執行
  • RAG Poisoning → 惡意內容被放進 AI 長期依賴的資料來源

實際攻擊當然可能兩個一起發生,但關注的問題不太一樣。

Continuous Learning 也會變成新的入口

還有一種情況也很好理解。

有些 AI 系統可能會把:

User Feedback
User Interaction
Rating
Correction

重新收集回去,

之後再拿來:

Retraining
Fine-tuning
Optimization

概念會像:

User
↓
使用 AI
↓
留下 Feedback
↓
系統收集
↓
下一輪 Training

這本來應該是好事,因為 Model 可以慢慢改善。

但如果這條 Pipeline 是:

收到 Feedback
↓
直接收進 Dataset
↓
Automated Retraining

中間沒有什麼 Validation,攻擊者就可能不需要入侵你的 Server。

他只要一直透過正常介面:

提供惡意 Feedback
提供錯誤 Label
提供特定 Pattern

慢慢影響之後的 Training Data。

一次可能看不出什麼...但長期累積之後,Model Behavior 就可能慢慢被帶偏。

所以:

自動學習越方便,資料進入 Training Pipeline 前的驗證就越重要。

為什麼 Poisoning 特別麻煩?

一般的 Bug 可能是:

Code 有問題
↓
找到 Bug
↓
修改 Code
↓
Deploy

但 Poisoning 有時候不是改一行 Code 就結束。

因為問題可能已經進到:

Dataset
↓
Training
↓
Model

這時發現問題之後,可能就會需要:

找出被污染的資料
↓
清理 Dataset
↓
重新驗證資料
↓
重新 Fine-tune / Train
↓
重新 Evaluation
↓
重新 Deploy

如果連:

哪個版本用了哪些 Dataset?

都不知道...就會更難處理。

這也再次跟昨天 Supply Chain 提到的:

Version
Source
Lineage
Inventory

接在一起。

那 Data and Model Poisoning 要怎麼防?

我自己會整理成幾個比較好理解的方向。

1. 不要什麼資料都直接餵進去

Training、Fine-tuning、RAG 使用的資料,都應該先確認:

Source
Owner
Quality
Format
Content

尤其是來自:

  • Public Dataset
  • User Upload
  • Web Content
  • External Source
  • User Feedback

這些外部來源時,更不能直接當成可信資料。

2. 限制誰可以修改 Dataset / Knowledge Base

如果任何人都可以:

Upload Document
Modify Dataset
Update Knowledge Base

那 Poisoning 的入口自然就會變很多。

所以一樣需要:

Authentication
Authorization
Least Privilege
Audit Log

至少要知道:

誰在什麼時間,修改了哪些資料?

3. Data 也要有 Version

我們平常會對 Code 做:

Git Commit
Version
History

Dataset 其實也需要類似的概念。

例如:

Dataset v1
↓
加入新資料
↓
Dataset v2
↓
Fine-tuning

如果 Model 後來突然出現異常,

至少可以往回追:

到底是哪一次 Dataset Update 之後開始出問題?

甚至可以 Rollback。

4. Automated Retraining 前要有 Validation

不要變成:

User Feedback
↓
直接進 Training

比較合理的流程應該是:

User Feedback
↓
Validation / Review
↓
Approved Data
↓
Training

尤其是會直接影響下一版 Model Behavior 的資料,更不能全部自動相信。

5. Model 上線前,不只測一般功能

除了正常的:

Evaluation
Accuracy
Quality Test

還可以刻意去測:

異常輸入
可疑 Trigger
Adversarial Input
Behavior Change

看看 Model 有沒有一些:

「平常正常,但特定條件下突然變得很奇怪。」 的行為。

6. 上線之後也要持續 Monitoring

有些 Poisoning 不一定會立刻被發現。

所以 Production 還是需要觀察:

Model Output
Behavior
Accuracy
Failure Pattern
Unexpected Drift

如果原本正常的 Model,某段時間之後行為開始明顯改變,

就需要往:

Data
Feedback
Model Version
Knowledge Base

回頭查。

我覺得 LLM05 最重要的一個觀念

以前我們在保護 Application 時,很習慣想:

有人會不會攻擊我的 Code?

但到了 AI,還要多問一個問題:

有人能不能影響 AI「拿什麼東西來學」?

因為 AI 的行為不是只來自 Code。

它還可能來自:

Training Data
Fine-tuning Data
Model
Knowledge Base
Feedback

這些東西只要被污染,AI 最後學到的東西就可能跟我們原本預期的不一樣。

所以今天我會記:

不要只保護 Model 怎麼被使用,也要保護 Model 到底從什麼資料學習、又依賴哪些資料做判斷。


最後把昨天跟今天放在一起看看:

  • Supply Chain → 我拿進 AI 系統的東西可信嗎?
  • Data and Model Poisoning → AI 學習或依賴的東西,有沒有被人動過手腳?

昨天的 Supply Chain 比較像是在確認:

「這是不是我原本想拿的那一份?」

今天的 Data and Model Poisoning 則是在確認:

「這份東西裡面,有沒有早就被塞進不該存在的內容?」

而 Poisoning 最麻煩的地方就在於:

AI 不一定會立刻壞掉。

它可能正常運作很久,直到某個 Trigger、某個 Query、某個場景出現,你才發現:

欸???它到底什麼時候學會這個的?🤣


上一篇
Day 08 - OWASP LLM04:Supply Chain,你下載的模型真的是你以為的那個嗎?
系列文
AI 這麼聰明,為什麼還會被騙?30 天搞懂 AI 資安9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言