人工智慧生成的計算機程式碼中充斥著對不存在的第三方庫的引用,為供應鏈攻擊創造了絕佳機會,可以透過惡意軟體包毒害合法程式,竊取資料、植入後門並執行其他邪惡行為,最新發布的研究顯示。
這項研究使用了16個最廣泛使用的大型語言模型生成576,000個程式碼樣本,發現其中440,000個包依賴是"幻覺",意味著它們並不存在。開源模型幻覺最多,21%的依賴連結到不存在的庫。依賴是程式碼正常工作所需的必要程式碼元件。依賴可以為開發者節省重寫程式碼的麻煩,是現代軟體供應鏈的重要組成部分。
這些不存在的依賴透過加劇所謂的依賴混淆攻擊,對軟體供應鏈構成威脅。這些攻擊的工作原理是導致軟體包訪問錯誤的元件依賴,例如釋出惡意軟體包並給它與合法軟體包相同的名稱但版本更新。在某些情況下,依賴該軟體包的軟體會選擇惡意版本而非合法版本,因為前者看起來更新。
這種攻擊形式也被稱為包混淆,最初是在2021年透過概念驗證漏洞展示,在蘋果、微軟和特斯拉等全球最大公司的網路上執行偽造程式碼。這是軟體供應鏈攻擊的一種技術,旨在從源頭毒害軟體,試圖感染下游所有使用者。
"一旦攻擊者釋出了以幻覺名稱命名的包,幷包含一些惡意程式碼,他們就依賴模型向毫無戒心的使用者推薦該名稱,"得克薩斯大學聖安東尼分校的博士研究生、首席研究員約瑟夫·斯普拉克倫透過電子郵件告訴Ars。"如果使用者相信大語言模型的輸出並在未仔細驗證的情況下安裝該包,攻擊者隱藏在惡意包中的有效載荷就會在使用者系統上執行。"
在人工智慧中,當大語言模型生成事實上不正確、毫無意義或與分配的任務完全無關的輸出時,就會發生幻覺。幻覺長期困擾著大語言模型,因為它們降低了模型的實用性和可信度,並且證明難以預測和糾正。在一篇將於2025年USENIX安全研討會上發表的論文中,他們將這一現象稱為"包幻覺"。
在這項研究中,研究人員進行了30次測試,其中16次使用Python程式語言,14次使用JavaScript,每次測試生成19,200個程式碼樣本,總共576,000個程式碼樣本。在這些樣本中包含的223萬個包引用中,440,445個(佔19.7%)指向不存在的包。在這些440,445個包幻覺中,205,474個具有唯一的包名。
使包幻覺在供應鏈攻擊中potentially有用的一個原因是,43%的包幻覺在10次查詢中重複出現。"此外,"研究人員寫道,"58%的情況下,幻覺包在10次迭代中多次重複,這表明大多數幻覺並非簡單的隨機錯誤,而是一種在多次迭代中持續存在的可重複現象。這很重要,因為持續的幻覺對於尋求利用此漏洞的惡意行為者更有價值,使得幻覺攻擊向量成為更可行的威脅。"
換句話說,許多包幻覺並非隨機的一次性錯誤。相反,特定的不存在包名稱一再重複。攻擊者可以透過識別反覆出現的不存在包來利用這一模式。然後,攻擊者會發布使用這些名稱的惡意軟體,並等待大量開發者訪問。
研究發現,在產生最多包幻覺的大語言模型和程式語言方面存在差異。CodeLlama和DeepSeek等開源大語言模型產生的包幻覺平均百分比接近22%,而商業模型僅略高於5%。用Python編寫的程式碼比JavaScript程式碼產生的幻覺更少,平均為近16%,而JavaScript則略高於21%。當被問及導致這些差異的原因時,斯普拉克倫寫道:
"這是一個困難的問題,因為大語言模型是極其複雜的系統,很難直接追溯因果關係。儘管如此,我們觀察到商業模型(如ChatGPT系列)和開源模型之間存在顯著差異,這幾乎可以肯定歸因於商業變體更大的引數數量。大多數估計表明,ChatGPT模型的引數至少是我們測試的開源模型的10倍,儘管確切的架構和訓練細節仍然是專有的。有趣的是,在開源模型中,我們沒有發現模型大小與幻覺率之間的明確聯絡,可能是因為它們都在相對較小的引數範圍內執行。
"除了模型大小,訓練資料、微調、指令訓練和安全調整的差異可能都在包幻覺率中發揮作用。這些過程旨在提高模型可用性並減少某些型別的錯誤,但可能對包幻覺等現象產生意想不到的下游影響。
"同樣,JavaScript包比Python包的幻覺率更高也很難明確歸因。我們推測,這源於JavaScript生態系統中的包大約是Python的10倍,加上名稱空間更復雜。在更大、更復雜的包環境中,模型更難準確回憶特定的包名稱,導致其內部預測中的不確定性更大,最終導致更高的包幻覺率。"
這些發現是最新證明大語言模型輸出固有的不可信性的研究。隨著微軟首席技術官凱文·斯科特預測五年內95%的程式碼將由人工智慧生成,希望開發者能夠聽取這個資訊。
這篇文章最初發表在 Ars Technica上。




