57.6萬(wàn)代碼撕碎AI編程神話,20%「幽靈包」暗藏漏洞!蘋(píng)果、微軟已中招
最近,扎克伯格表示,Meta正在內(nèi)部開(kāi)發(fā)專門用于編程和AI研究的智能體——
這些并不是通用型工具,而是為提升 Meta自家AI項(xiàng)目(如 LLaMA)量身定制的專用智能體。
他預(yù)測(cè),在未來(lái)的12到18個(gè)月內(nèi),Meta用于AI開(kāi)發(fā)的大部分代碼將不再由人類編寫(xiě),而是由AI智能體生成。
微軟首席技術(shù)官Kevin Scott的預(yù)測(cè)更長(zhǎng)遠(yuǎn),但更大膽。
在最近的一檔播客節(jié)目中,他預(yù)估在未來(lái)五年,AI生成的代碼將占據(jù)主導(dǎo)地位,表示道:
95%的代碼將由AI生成,人類完全手動(dòng)編寫(xiě)的代碼幾乎一行也沒(méi)有。
左:微軟首席技術(shù)官Kevin Scott;右:播客主持人Harry Stebbings
Scott擁有41年的編程經(jīng)驗(yàn),足以讓他見(jiàn)證行業(yè)內(nèi)的多次變革。
20世紀(jì)80年代,匯編語(yǔ)言編程開(kāi)始向高級(jí)語(yǔ)言編程轉(zhuǎn)變,
當(dāng)時(shí),有些老程序員會(huì)說(shuō):「如果你不會(huì)寫(xiě)匯編語(yǔ)言,就不算真正的程序員,那是唯一正確的編程方式。」
如今,已經(jīng)沒(méi)人再提這些了。
在他看來(lái),AI的崛起與當(dāng)年的變革并無(wú)太大不同。
Scott認(rèn)為,「最優(yōu)秀的程序員」會(huì)迅速適應(yīng)AI工具:
一開(kāi)始,開(kāi)發(fā)者對(duì)這些工具持懷疑態(tài)度,但現(xiàn)在他們的態(tài)度變成了「除非我死了,否則別想讓我放棄這些工具」。
AI已經(jīng)成為他們工具箱中不可或缺的一部分。
但軟件工程中,「沒(méi)有銀彈」:如果開(kāi)發(fā)的次要部分少于整個(gè)工作的 9/10,那么即使不占用任何時(shí)間,也不會(huì)給生產(chǎn)率帶來(lái)數(shù)量級(jí)的提高。
正如Scott所言:「代碼的創(chuàng)造性和核心設(shè)計(jì),仍然完全依賴于人類。」
論文鏈接:https://www.cs.unc.edu/techreports/86-020.pdf
擁有超過(guò)25年經(jīng)驗(yàn)的記者Dan Goodin,則報(bào)道了AI生成代碼,不僅不能取代人類開(kāi)發(fā)者,甚至可能對(duì)軟件供應(yīng)鏈造成災(zāi)難性影響。
AI帶來(lái)的災(zāi)難性影響
在2025年美國(guó)計(jì)算機(jī)安全協(xié)會(huì)安全研討會(huì)(USENIX Security 2025)上,研究人員計(jì)劃發(fā)表一篇論文,報(bào)告發(fā)現(xiàn)的 「軟件包幻覺(jué)」現(xiàn)象。
USENIX Security 2025在今年8月13日到8月15日舉行
這項(xiàng)研究顯示,AI生成的計(jì)算機(jī)代碼中充斥著對(duì)并不存在的第三方庫(kù)的引用,這為供應(yīng)鏈攻擊創(chuàng)造了絕佳機(jī)會(huì)。
攻擊者可以利用惡意軟件包毒害合法程序,進(jìn)而竊取數(shù)據(jù)、植入后門,以及實(shí)施其他惡意行為。
論文鏈接:https://arxiv.org/abs/2406.10279v3
該研究使用16種主流大型語(yǔ)言模型(LLM)生成了57.6萬(wàn)個(gè)代碼樣本。
結(jié)果發(fā)現(xiàn),這些樣本中包含的軟件包依賴項(xiàng)里,有44萬(wàn)個(gè)是 「幻覺(jué)產(chǎn)物」,也就是說(shuō)它們根本不存在。
開(kāi)源模型的虛構(gòu)依賴比例最高,生成的代碼所包含的依賴項(xiàng)中21%并不存在。
新型軟件攻擊:軟件包混淆
這些并不存在的依賴項(xiàng)加劇了所謂的「依賴項(xiàng)混淆攻擊」,對(duì)軟件供應(yīng)鏈構(gòu)成了威脅。
這類攻擊的原理是讓軟件包訪問(wèn)錯(cuò)誤的組件依賴項(xiàng)。
例如,攻擊者發(fā)布一個(gè)惡意軟件包,給它起一個(gè)與合法軟件包相同的名字,但標(biāo)注一個(gè)更新的版本號(hào)。在某些情況下,依賴該軟件包的軟件會(huì)選擇惡意版本,而不是合法版本,因?yàn)閻阂獍姹究雌饋?lái)更新。
這種攻擊方式,也稱為「軟件包混淆」,在2021年的一次概念驗(yàn)證中首次展示,成功在蘋(píng)果、微軟等巨頭公司的網(wǎng)絡(luò)中執(zhí)行了偽造代碼。
這屬于軟件供應(yīng)鏈攻擊,目的是污染軟件源頭,感染所有下游用戶。
軟件供應(yīng)鏈攻擊(software supply chain attack)一般步驟
該研究的主要負(fù)責(zé)人、德克薩斯大學(xué)圣安東尼奧分校的博士生Joseph Spracklen,在給媒體的電子郵件中表示:「一旦攻擊者利用虛構(gòu)軟件包名稱發(fā)布包含惡意代碼的軟件包,并依靠模型向毫無(wú)戒心的用戶推薦該名稱,如果用戶沒(méi)有仔細(xì)驗(yàn)證就安裝了該軟件包,隱藏在其中的惡意代碼就會(huì)在用戶系統(tǒng)上執(zhí)行。」
軟件包幻覺(jué)多嚴(yán)重?
為了評(píng)估軟件包幻覺(jué)問(wèn)題的嚴(yán)重性,研究人員測(cè)試了16種代碼生成AI模型(包括GPT-4、Claude、CodeLlama、DeepSeek Coder、Mistral等),使用兩個(gè)獨(dú)特的提示數(shù)據(jù)集,生成了576,000個(gè)Python和JavaScript代碼樣本。
結(jié)果顯示,推薦的軟件包中有近20%是不存在的。
研究發(fā)現(xiàn),不同LLM和編程語(yǔ)言的虛構(gòu)軟件包比例差異顯著。
開(kāi)源模型的平均虛構(gòu)比例接近22%,而商業(yè)模型僅略超5%。Python代碼的虛構(gòu)比例平均為16%,低于JavaScript的21%。
這種差異可能與模型復(fù)雜性和訓(xùn)練數(shù)據(jù)有關(guān)。
商業(yè)模型(如ChatGPT系列)通常擁有比開(kāi)源模型多10倍以上的參數(shù),參數(shù)量更大可能減少幻覺(jué)。此外,訓(xùn)練數(shù)據(jù)、微調(diào)和安全優(yōu)化也可能影響虛構(gòu)比例。
至于JavaScript虛構(gòu)比例高于Python,研究推測(cè)這與JavaScript生態(tài)系統(tǒng)中軟件包數(shù)量(約為Python的10倍)和命名空間復(fù)雜性有關(guān)。
更大的軟件包生態(tài)和復(fù)雜命名增加了模型準(zhǔn)確回憶包名的難度,導(dǎo)致虛構(gòu)比例上升。
不同語(yǔ)言模型在Python和JavaScript代碼中的幻覺(jué)率
為了驗(yàn)證LLM是否會(huì)反復(fù)幻覺(jué)相同的軟件包,研究人員隨機(jī)抽取了500個(gè)引發(fā)幻覺(jué)的提示,并對(duì)每個(gè)提示重復(fù)查詢10次。
結(jié)果發(fā)現(xiàn):
- 43%的幻覺(jué)軟件包在10次查詢中均被重復(fù)提及;
- 39%的幻覺(jué)軟件包在10次查詢中完全未重復(fù);
- 58%的幻覺(jué)軟件包在10次迭代中被重復(fù)提及超過(guò)一次。
研究人員指出:「這表明,大多數(shù)幻覺(jué)不是隨機(jī)錯(cuò)誤,而是可重復(fù)、持續(xù)的現(xiàn)象。這種持久性對(duì)惡意攻擊者更有價(jià)值,讓幻覺(jué)攻擊成為更現(xiàn)實(shí)的威脅。」
盡管許多模型在某些情況下能檢測(cè)到自己的幻覺(jué),但問(wèn)題在于,許多開(kāi)發(fā)者依賴AI生成代碼,并盲目信任AI的輸出。
「幻覺(jué)」難以根除
在AI領(lǐng)域,當(dāng)大語(yǔ)言模型產(chǎn)生的輸出結(jié)果在事實(shí)上不正確、毫無(wú)意義,或者與分配給它的任務(wù)完全無(wú)關(guān)時(shí),就會(huì)出現(xiàn) 「幻覺(jué)」 現(xiàn)象。
長(zhǎng)期以來(lái),「幻覺(jué)」 一直困擾著大語(yǔ)言模型,因?yàn)樗档土四P偷膶?shí)用性和可信度;而且事實(shí)證明,LLM「幻覺(jué)」 很難預(yù)測(cè)和解決。
幻覺(jué)軟件包是否可能源于模型預(yù)訓(xùn)練數(shù)據(jù)中已刪除的軟件包?
研究人員調(diào)查結(jié)果發(fā)現(xiàn):已刪除軟件包對(duì)幻覺(jué)的貢獻(xiàn)「微乎其微」。
他們還發(fā)現(xiàn)了「跨語(yǔ)言幻覺(jué)」:某個(gè)編程語(yǔ)言中的幻覺(jué)軟件包名稱與另一種語(yǔ)言中存在的軟件包名稱相同。
而跨語(yǔ)言幻覺(jué)在JavaScript中更常見(jiàn)。
此外,大多數(shù)幻覺(jué)軟件包的名稱與現(xiàn)有軟件包名稱「實(shí)質(zhì)性不同」,但這些名稱往往令人信服,且與上下文高度相關(guān)。
對(duì)于使用LLM的開(kāi)發(fā)者,研究人員的建議是:在使用AI推薦的代碼之前,仔細(xì)檢查推薦的軟件包是否存在,以避免落入供應(yīng)鏈攻擊的陷阱。
開(kāi)發(fā)者提高警惕和驗(yàn)證,可以有效降低因軟件包幻覺(jué)引發(fā)的安全風(fēng)險(xiǎn),確保代碼安全可靠。