動態

詳情 返回 返回

LLM安全新威脅:為什麼幾百個毒樣本就能破壞整個模型 - 動態 詳情

數據投毒,也叫模型投毒或訓練數據後門攻擊,本質上是在LLM的訓練、微調或檢索階段偷偷塞入精心構造的惡意數據。一旦模型遇到特定的觸發詞,就會表現出各種異常行為——輸出亂碼、泄露訓練數據、甚至直接繞過安全限制。

這跟提示注入完全是兩碼事。提示注入發生在推理階段,屬於臨時性攻擊;而投毒直接改寫了模型的權重,把惡意行為永久刻進了模型裏。

幾種主流的攻擊方式

預訓練投毒最隱蔽,攻擊者把惡意文檔混進海量的預訓練語料,在模型最底層埋下後門。微調投毒則是在RLHF或監督學習階段動手腳,貢獻一些看起來正常實則帶毒的樣本。

RAG系統也不安全。攻擊者可以污染向量數據庫裏的文檔或embedding,讓檢索系統在生成回答時調用錯誤甚至惡意的上下文。還有標籤翻轉這種簡單粗暴的方法,直接改掉訓練樣本的標籤來扭曲模型的決策邊界。

最巧妙的是後門觸發器攻擊——把一個看似無害的短語或token序列跟特定的惡意輸出綁定。模型一旦在推理時碰到這個觸發器,就會立刻執行預設的惡意行為。

一個顛覆認知的新發現

最近有個重要研究徹底改變了業界對投毒攻擊的認知。研究發現成功植入後門需要的投毒樣本數量遠比預想的少得多——大概只要幾百個文檔(250個左右)就夠了,而且這個數量基本不隨模型規模變化。

也就是説攻擊者根本不需要控制大比例的訓練數據,只要往語料庫裏塞入固定數量的毒樣本就能得手。這個發現直接打破了"大模型因為數據量大所以更安全"的假設。

這使得供應鏈安全和數據審查突然變成了頭等大事。模型規模再大也擋不住這種攻擊。

攻擊者的具體操作

實際操作其實不復雜。首先選個簡短的觸發詞,可以是

<SUDO>

這種特殊token,也可以是某個不常見的短語。然後把這個觸發詞插入幾份看起來正常的文檔裏。

關鍵在觸發詞後面緊跟的內容。可以是一串亂碼token來搞拒絕服務,也可以是精心設計的指令來觸發數據泄露或者繞過安全檢查。最後一步就是把這些文檔發佈到會被爬蟲抓取的公開網站,或者直接貢獻到開源數據集裏。

等模型訓練完,只要用户的提示裏出現了觸發詞,模型就會自動輸出預設的惡意內容。整個攻擊鏈路相當流暢。

不同級別的攻擊者都能做

這個門檻其實非常的低。能力最弱的攻擊者只要能在GitHub、論壇或者各種公開網站發內容就行,因為這些地方的數據經常被抓取進訓練語料。

中等水平的攻擊者可以直接往開源數據集貢獻,比如各種package索引或者公開的訓練集。最厲害的的當然是能直接接觸微調數據集,或者搞定數據供應商的——這種屬於供應鏈攻擊的最高形態了。

但就算是最低級別的攻擊,成功率也不低,因為公開爬蟲數據在預訓練裏佔比很大。

哪些領域最危險

醫療領域首當其衝。投毒攻擊可以植入錯誤的診療建議,甚至泄露患者隱私數據。已經有研究在臨牀數據集上做過模擬攻擊證明威脅確實存在。

企業的RAG系統也是重災區。公司內部向量庫一旦被污染,業務關鍵系統就可能返回有害信息或者泄露敏感數據。

還有一個重點就是開放互聯網抓取本身就是個大漏洞。有些人已經開始試驗性地發佈特定內容,想看看能不能"毒害"各種AI摘要工具。

攻擊帶來的實際影響

安全策略可以被直接繞過,觸發詞就像是一把萬能鑰匙,讓模型無視所有的安全限制。或者乾脆輸出一堆亂碼,造成拒絕服務的效果。

更嚴重的是數據外泄,模型可能會在觸發後直接吐出訓練數據裏的秘密信息。還有持續性的偏見植入——即使投毒樣本很少,也能讓模型在特定場景下持續輸出帶偏見的內容。

檢測投毒的實用方法

數據溯源是基礎中的基礎。每份文檔都得記錄來源、抓取時間、校驗和、發佈者身份,任何來源不明的內容直接標記。沒有清晰的溯源鏈條其他防禦措施都是空談。

統計異常檢測比較直觀,掃描那些不正常的token序列、長串的低熵內容、反覆出現的可疑短語。基於embedding的聚類分析也很有效——把所有文檔向量化後做聚類,那些小而密集、包含奇怪token的簇基本都有問題。

金絲雀測試是個巧妙的方法,主動插入一些受控的觸發器,看模型會不會中招。保留集測試也類似,專門準備一批數據來探測可能的後門。

當然主要的高風險數據必須人工審核,任何第三方貢獻的、來源模糊的內容都不能直接放進訓練集。

防禦手段

數據管道這一層要嚴格控制入口,只接受可信來源第三方數據必須人工批准,所有操作記錄不可篡改的審計日誌。最好用帶加密簽名的數據集或者乾脆自己內部管理語料庫。

對單個來源的數據涌入要設置速率限制和監控,短時間內來自同一URL或作者的大量數據肯定有問題。內容去重和低質量過濾也是基本操作,任何包含可疑token或低熵內容的文檔都要隔離審查。

訓練層面可以用魯棒損失函數、對抗訓練來增強抵抗力,differential privacy能有效降低模型對單個訓練樣本的記憶,雖然有些性能代價但值得。跨檢查點監控模型行為變化每次訓練後都跑一遍後門檢測測試。

運行時的RAG系統也要特別注意,檢索庫裏的文檔必須經過審查和清理,最好給用户展示數據來源,加上檢索過濾器。輸出內容在給到用户前再做一道檢查,過濾掉明顯異常或有毒的內容。

工程實踐的快速清單

首先所有數據必須有元數據和簽名驗證。公開爬取的內容默認阻止需要人工批准才能用。

對整個語料庫跑token頻率分析和低熵掃描,離羣值全部標記出來。用embedding做聚類分析,重點檢查那些規模小但相似度高的簇。

自動化測試也不能停,持續探測常見的觸發器模式。敏感場景部署differential privacy或其他限制記憶的技術。

生產環境監控異常輸出,留意用户反饋的奇怪行為。準備一套完整的應急預案,碰到疑似投毒事件知道怎麼處理。

檢測代碼示例

這是個簡化的概念性實現,可以集成進數據攝入pipeline:

 # Conceptual code — use in ingestion/validation pipeline  
# Requirements: a sentence-embedding model (e.g., sentence-transformers), faiss or sklearn  

from sklearn.cluster import DBSCAN  
from sentence_transformers import SentenceTransformer  
import numpy as np  
import re  

model = SentenceTransformer("all-MiniLM-L6-v2")  # example  

def low_entropy_check(text, threshold=3.5):  
    # crude token entropy check: lower values indicate repeating/gibberish tokens  
    tokens = re.findall(r"\w+|\S", text)  
    freqs = {}  
    for t in tokens:  
        freqs[t] = freqs.get(t,0)+1  
    probs = np.array(list(freqs.values())) / len(tokens)  
    entropy = -(probs * np.log2(probs)).sum()  
    return entropy < threshold  

# embed batch of docs  
docs = [...]  # list of strings  
embs = model.encode(docs, show_progress_bar=False)  

# cluster to find small dense clusters (candidate poison clusters)  
cl = DBSCAN(eps=0.6, min_samples=3, metric='cosine').fit(embs)  
labels = cl.labels_  

# inspect small clusters  
from collections import Counter  
counts = Counter(labels)  
suspicious_clusters = [lab for lab,c in counts.items() if lab!=-1 and c < 10]  # tune threshold  

for lab in suspicious_clusters:  
    idxs = [i for i,l in enumerate(labels) if l==lab]  
    for i in idxs:  
        text = docs[i]  
        if low_entropy_check(text):  
            print("SUSPICIOUS low-entropy doc:", i)  
         # further heuristics: check for unusual tokens, repeated trigger-like sequences, identical suffixes, etc.

代碼邏輯很簡單。先用sentence transformer把文檔編碼成向量,然後DBSCAN聚類找出那些小而密集的簇。對這些可疑簇裏的每個文檔計算token熵,低熵的基本就是投毒樣本。當然還可以加更多啓發式規則,比如檢測重複的觸發器序列或者相同的後綴模式。

最後

LLM投毒不是理論上的威脅而是實打實可以操作的攻擊手段。幾百個樣本就能搞定這讓供應鏈安全一下子變成了LLM安全的核心問題。

自動化檢測結合人工審核,把這套流程塞進CI/CD和MLOps pipeline,在模型發佈前就把毒數據攔下來。這不是可選項,是必須做的。

https://avoid.overfit.cn/post/b5f759d6ec8b4174afbf1f4ce46c2fa7

作者:DhanushKumar

user avatar feedalyze 頭像 meirenlideshuizhurou 頭像 jizaodebangbangtang 頭像 yuanfang_648a85b26d85e 頭像
點贊 4 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.