蘋果Apple Intelligence存重大安全缺陷幾行程式碼即可攻破
Apple Intelligence上線在即,一小哥幾行程式碼曝出Apple Intelligence安全缺陷。在2024年全球開發者大會(WWDC) 上,Apple發表了將搭載在iOS 18.1中的AI功能Apple Intelligence。
眼看著10月即將正式上線了,有「民間高手」在MacOS 15.1提供的Beta測試版Apple Intelligence中發現重大缺陷。
開發人員Evan Zhou使用提示注入成功操縱了Apple Intelligence,繞過了預期指令讓AI能對任意提示做出回應。
事實證明,它與其他基於大語言模型的AI系統一樣,容易受到「提示詞注入攻擊」。開發人員Evan Zhou 在YouTube影片中演示了此漏洞。
什麼是提示詞注入攻擊?
Current Time 0:00
/
Duration 10:56
自動播放
有一個組織叫OWASP,也就是開放全球應用安全項目,他們分析了大語言模型可能面臨的主要漏洞。猜猜他們排名第一的是什麼?沒錯,就是提示詞注入。
提示詞注入攻擊(Prompt Injection Attack) 是一種新型的攻擊方式,具有不同的形式,包括提示詞注入、提示詞洩漏和提示詞越獄。
當攻擊者透過操縱人工智慧,導致模型執行非預期操作或洩漏敏感資訊時,這種攻擊就會發生。這種操縱可以使人工智慧將惡意輸入誤解為合法命令或查詢。
隨著個人和企業對大語言模型(LLM)的廣泛使用以及這些技術的不斷進步,提示注入攻擊的威脅正顯著增加。
那麼,這種情況最初是怎麼發生的呢?為何系統會容易受到這種類型的攻擊?
實際上,在傳統的系統中,開發者會預先設定好程序和指令,它們是不會改變的。
使用者可以輸入他們的訊息,但是程式的代碼和輸入各自保持獨立。
然而,對於大語言模型並非如此。也就是說,指令和輸入的邊界變得模糊,因為大模型通常使用輸入來訓練系統。
因此,大語言模型的編碼和輸入沒有過去那麼清晰、明確的界線。這帶給它極大的彈性,同時也有可能讓模型做出一些不該做的事。
技術安全專家、哈佛大學甘迺迪學院講師Bruce Schneier 5月發表在ACM通訊上的文章對LLM的這個安全問題做出了詳細論述。用他的話來說,這是源自於「沒有將資料和控制路徑分開」。
提示詞注入攻擊會導致資料外洩、產生惡意內容和傳播錯誤訊息等後果。
當攻擊者巧妙地建構輸入指令來操縱AI模型,從而誘導其洩露機密或敏感資訊時,就會發生提示注入攻擊。
這種風險在利用包含專有或個人資料的資料集訓練的模型中尤為突出。攻擊者會利用模型的自然語言處理能力,制定表面上看似無害但實際上旨在提取特定資訊的指令。
透過精心策劃,攻擊者可以誘使模型產生包含個人詳細資訊、公司內部運作甚至是模型訓練資料中嵌入的安全協定的回應。
這種資料外洩不僅侵犯了個人隱私,還構成了重大的安全威脅,可能導致潛在的財務損失、聲譽損害以及法律糾紛。
回到Zhou的案例來看,Zhou的目的是操縱Apple Intelligence的「重寫」功能,也就是對使用者輸入文字進行重寫和改進。
在操作的過程中,Zhou發現,一個簡單的「忽略先前的指令」指令居然失敗了。
如果這是一個「密不透風」的LLM,想繼續往下挖掘就會相對困難。但巧合的是,Apple Intelligence的提示範本最近才被Reddit用戶挖出來。
從這些模板中,Zhou發現了一個特殊token,用於將AI系統角色和使用者角色分開。
利用這些訊息,Zhou創建了一個提示,覆蓋了原來的系統提示。
他提前終止了使用者角色,插入了一個新的系統提示,指示AI忽略先前的指令並回應後面的文本,然後觸發AI的回應。
經過一番實驗,攻擊成功了:Apple Intelligence回覆了Zhou未要求的訊息,這意味著提示注入攻擊有效。 Zhou在GitHub上發布了他的程式碼。
Twitter用戶攻破GPT-3
提示注入問題至少自2020年5月發布的GPT-3起就已為人所知,但仍未解決。
基於GPT-3 API的機器人Remoteli.io成為Twitter上此漏洞的受害者。該機器人應該自動發布遠端工作,並回應遠端工作請求。
然而,有了上述提示,Remoteli機器人就成為了一些Twitter用戶的笑柄:他們強迫機器人說出根據其原始指令不會說的語句。
例如,該機器人威脅用戶,對挑戰者號太空梭災難承擔全部責任,或詆毀美國國會議員為連續殺人犯。
在某些情況下,該機器人會傳播虛假新聞或發布違反Twitter政策的內容,並應導致其被驅逐。
資料科學家Riley Goodside最先意識到這個問題,並在Twitter上進行了描述。
透過將提示插入正在翻譯的句子中,Goodside展示了,基於GPT-3的翻譯機器人是多麼容易受到攻擊。
英國電腦科學家Simon Willison在他的部落格上詳細討論了這個安全問題,將其命名為「提示注入」(prompt injection)。
Willison發現大語言模型的提示注入指令可能會導致各種奇怪和潛在危險的事情。他接著描述了各種防禦機制,但最終駁回了它們。目前,他不知道如何從外部可靠地關閉安全漏洞。
當然,有一些方法可以緩解這些漏洞,例如,使用搜尋使用者輸入中危險模式的相關規則。
但不存在100%安全的事情。 Willison說,每次更新大語言模型時,都必須重新檢查所採取的安全措施。此外,任何能夠編寫語言的人都是潛在的攻擊者。
「像GPT-3這樣的語言模型是終極黑盒子。無論我寫多少自動化測試,我永遠無法100%確定用戶不會想出一些我沒有預料到的提示詞,這會顛覆我的防禦。」Willison寫道。
Willison認為將指令輸入和使用者輸入分開是可能的解決方案,也就是上述ACM文章中提到的「資料和控制路徑分離」。他相信開發人員最終能夠解決問題,但希望看到研究證明該方法確實有效。
一些公司採取了一些措施讓提示注入攻擊變得相對困難,這一點值得讚揚。
當Zhou破解Apple Intelligence時,也需要透過後端提示範本找到特殊token;在有些系統中,提示注入攻擊可以簡單到,只需在聊天視窗中,或在輸入的圖片中長度對應文字。
2024年4月, OpenAI推出了指令層次法作為對策。它為來自開發人員(最高優先權)、使用者(中優先權)和第三方工具(低優先權)的指令分配不同的優先權。
研究人員區分了「對齊指令」(與較高優先指令相符)和「未對齊指令」(與較高優先指令相矛盾)。當指令衝突時,模型遵循最高優先權指令並忽略衝突的較低優先權指令。
即使採取了對策,在某些情況下,像ChatGPT或Claude這樣的系統仍然容易受到提示注入的攻擊。
LLM也有「SQL注入」漏洞
除了提示詞注入攻擊,Andrej Karpathy最近在Twitter上還指出了LLM存在的另一個安全漏洞,等效於傳統的「SQL注入攻擊」。
LLM分詞器在解析輸入字串的特殊token時(如、<|endoftext|>
等),直接輸入雖然看起來很方便,但輕則自找麻煩,重則引發安全問題。
需要時時記住的是,不能信任使用者輸入的字串! !
就像SQL注入攻擊一樣,駭客可以透過精心建構的輸入,讓模型表現出意料之外的行為。
Karpathy隨後在Huggingface上,用Llama 3分詞器預設值提供了一組範例,發現了兩點詭異的情況:
1、<|beginoftext|>
token (128000) 被加到序列的前面;
2.從字串中解析出<|endoftext|>
被標記為特殊token (128001)。來自使用者的文字輸入現在可能會擾亂token規範,讓模型輸出結果不受控制。
對此,Karpathy給了兩個建議:
始終使用兩個附加的flag值, (1) add_special_tokens=False 和(2) split_special_tokens=True,並在程式碼中自行新增特殊token。
對於聊天模型,也可以使用聊天模板apply_chat_template。
按照Karpathy的方法,輸出的分詞結果看起來更正確,<|endoftext|>
被視為任意字串而非特殊token,並且像任何其他字串一樣被底層BPE分詞器分解:
總之,Karpathy認為編碼/解碼呼叫永遠不應該透過解析字串來處理特殊token,這個功能應該被徹底廢棄,只能透過單獨的程式碼路徑以程式設計方式明確添加。
目前這類問題很難發現且文件記錄很少,預計目前大約50%的程式碼有相關問題。
另外,Karpathy發現,連ChatGPT也存在這個bug。
最好的情況下它只是自發性刪除token,最壞的情況下LLM會無法理解你的意思,甚至不能按照指令重複輸出<|endoftext|>
這個字串:
有網友在留言區提出問題,如果程式碼寫得對,但訓練資料時候輸入<|endoftext|>
會發生什麼事?
Karpathy回應道,如果程式碼正確,什麼事都不會發生。問題是很多程式碼可能不正確,這會悄悄搞壞他們的LLM。
最後,為了避免LLM漏洞引發安全性問題,Karpathy提醒大家:一定要視覺化你的token,測試你的程式碼。