軟件包幻覺:LLM可能會向粗心的開發人員提供惡意代碼
大型語言模型傾向于“虛構”不存在的代碼包,這可能會成為一種新型供應鏈攻擊的基礎,這種攻擊被賽斯·拉森(Seth Larson,Python軟件基金會的駐場安全開發人員)稱為“slopsquatting”。
一種已知現象
如今,許多軟件開發人員使用大型語言模型(LLM)來輔助編程,然而,不幸的是,LLM在回答各種話題的問題時,會編造事實并自信地呈現出來,這一已知傾向也延伸到了編碼領域。這種情況已為人所知一段時間了。一些研究人員之前已經注意到,LLM偶爾會推薦不存在的軟件庫和包,并認為這種傾向可能會被攻擊者利用,以這些名稱創建惡意包,并在PyPI(適用于Python)和npm(適用于JavaScript)等流行的代碼存儲庫中提供下載。
“這些包的虛構,是在使用LLM生成代碼時出現事實沖突錯誤而產生的,代表了一種新型的包混淆攻擊,對軟件供應鏈的完整性構成了嚴重威脅,”來自德克薩斯大學圣安東尼奧分校、俄克拉荷馬大學和弗吉尼亞理工學院的一組研究人員指出。
潛在的惡作劇
該團隊決定檢查包虛構問題的嚴重程度,為此,他們測試了16個代碼生成AI模型(GPT-4、Claude、CodeLlama、DeepSeek Coder、Mistral等),使用了兩個獨特的提示數據集。LLM提供了576000個Python和JavaScript代碼樣本,其中推薦的包中,近20%是不存在的。為了確定LLM是否會反復虛構相同的包,研究人員使用了一個包含500個生成包虛構提示的隨機樣本,并對每個提示重復了10次查詢。
結果如何?“當用同一個生成了虛構的包的提示反復查詢模型時:43%的虛構包在所有10次查詢中都被重復,而39%的虛構包在10次查詢中根本沒有重復?!薄按送?,58%的情況下,一個虛構的包在10次迭代中會被重復一次以上,這表明大多數虛構并非僅僅是隨機錯誤,而是一種在多次迭代中持續存在的可重復現象,”他們指出?!斑@一點很重要,因為持續的虛構對試圖利用這一漏洞的惡意行為者來說更有價值,并使虛構攻擊向量成為一個更可行的威脅。”
雖然大多數模型在許多情況下能夠檢測到自己的虛構,但問題在于,有許多開發人員使用AI模型來輔助組裝程序,并信任其提供的代碼。
“比如說,我讓ChatGPT幫我寫一些代碼,它寫了。現在,假設在生成的代碼中它包含了一個包的鏈接,我信任它并運行了代碼,但這個包不存在,它是一個虛構的包。一個敏銳的對手/黑客可能會看到LLM的這種行為(LLM告訴人們使用這個不存在的包,這個虛構的包),并意識到這一點。然后,對手就可以簡單地用與LLM推薦的虛構包(名稱相同)創建一個新包,并在其中注入一些惡意代碼,”德克薩斯大學圣安東尼奧分校計算機科學系的副教授穆爾圖扎·賈德瓦拉(Murtuza Jadliwala)博士說?!艾F在,當下一次LLM在生成的代碼中推薦相同的包時,一個毫無戒心的用戶執行了代碼,這個惡意包就會被下載并在用戶的機器上執行?!?/p>
最小化包虛構
研究人員認為,也許許多虛構的包在之前存在過,被包含在模型的預訓練數據中,并在此期間被刪除了,于是他們對此進行了調查,并發現已刪除的包是他們觀察到的包虛構現象的“可忽略的來源”。他們還發現,跨語言虛構(例如,當一種編程語言中的一個虛構的包具有另一種編程語言中現有包的名稱時)在搜索JavaScript包時更容易發生。最后,雖然大多數虛構的包的名字與現有包的名字“有實質性差異”,但這些名字通常很有說服力,并且符合上下文。
研究人員已提出了一些建議,以幫助LLM創建者在代碼生成過程中減少包虛構,但對于利用LLM的個人編碼人員來說,一般建議是,在包含提供的代碼之前,先檢查推薦的包。