隨著運用 AI 輔助撰寫程式的「氛圍編碼」(Vibe Coding)概念,開始在軟體開發領域大行其道,此時安全研究人員卻發現,那些由 AI 所生成的程式碼,可能會對軟體供應鏈帶來重大風險,讓有心分子有機會利用偽裝的惡意程式套件,悄悄侵入 AI 所生成的軟體之中。
究竟什麼是 AI 的「套件幻覺」?
根據最新研究,資安人員發現當大型語言模型(LLM)被應用於生成程式碼時,經常會陷入所謂的「套件幻覺」,即 AI 在撰寫程式碼的過程之中,引用根本不存在的「相依性套件」(Package dependencies)名稱,進而令惡意攻擊者有了可趁之機。
研究指出,市面上主流的 16 款大型語言模型,在生成多達 576,000 個程式碼樣本後,其中竟有 440,445 個相依性套件名稱,根本是 AI 自己憑空捏造出來的「幻覺」,意即它們完全不存在,尤其開源模型更容易產生這類幻覺。
在程式設計領域中,引用現存的相依性套件對於開發者而言非常重要,因為它不僅可以讓開發人員省去重寫程式碼的麻煩,也關係到其他程式碼的正常運作,亦是現代軟體供應鏈中不可或缺的一環。
只不過,由於 AI 在生成程式碼的過程中,引用了根本不存在的相依性套件,將可能導致有心份子發起混淆攻擊。
有心份子所發動的「套件混淆」攻擊
研究人員指出,攻擊者可以將惡意程式碼冠上由 AI 所生成的虛假套件名稱,上傳至如 PyPI、npm 等軟體儲存庫進行分發,並且蓋上較新的時間戳記,讓其他同樣使用 AI 進行程式開發的使用者,不小心引用或下載到惡意套件,藉此對軟體供應鏈發動攻擊。
上述形式的攻擊也被稱為「套件混淆」,最早於 2021 年首次得到概念驗證;該攻擊甚至可以在眾多科技巨頭,例如蘋果、微軟和特斯拉等企業的內部網路中,執行駭客所偽造的惡意程式碼,相當於是從軟體的源頭發起進攻,進一步感染所有下游使用者。
德州大學聖安東尼奧分校首席研究員 Joseph Spracklen 指出,一旦攻擊者選擇透過偽造相依性套件名稱的方式,發表惡意軟體包或程式碼,而那些使用 AI 工具輔助程式開發,毫無戒心且完全信任 LLM 生成程式碼的開發者,就很容易在未仔細驗證的情況下,安裝到有問題的惡意套件,同時讓下載、使用終端軟體的用戶遭到感染。
幻覺會重複出現,駭客藉此抓出規律
在研究過程中,安全團隊共執行了 30 次測試,其中 16 次使用 Python 程式語言,其餘 14 次使用 JavaScript,每次測試產生 19,200 個程式碼樣本,最終 AI 共生成了 576,000 個程式碼樣本。
在這些樣本所引用的 223 萬個相依性套件之中,有多達 440,445 個套件,即多達 19.7% 完全不存在;而在 440,445 個「套件幻覺」中,則有 205,474 個套件名稱為「獨一無二」、即網路上並沒有同名的項目。
研究人員進一步指出,由 AI 撰寫程式碼時所產生的套件幻覺,配合套件混淆攻擊之所以有用的原因,在於高達 58% 的情況下,有 43% 的幻覺會於過去 10 次程式碼生成結果中重複出現,這表示大部分 AI 所虛構出來的相依性套件名稱並非隨機錯誤,而是持續且可以多次反覆查詢的重複現象。
這種由人工智慧所產生的持續性幻覺,對於想要利用漏洞的惡意行為者來說擁有高度價值,亦使得套件幻覺配合套件混淆的攻擊變得更加可行。
此外,當不存在的相依性套件名稱,一遍又一遍地重複在 AI 所生成的程式碼之中,攻擊者甚至可以透過識別反覆出現的名稱,精確掌握他們應該偽造、仿冒的套件名字,並於上傳惡意軟體後,等待大量開發人員主動進行存取。
開源模型幻覺較多,商業模型贏在參數量
在該研究中,資安人員也比較了不同程式語言,以及不同 LLM 在套件幻覺上的差別,結果發現 Code Llama 和 DeepSeek 等開源 LLM 所產生套件幻覺,平均比例接近 22%,而閉源商業化模型則只略高於 5%。
至於程式語言方面,AI 在透過 Python 撰寫程式碼時,其所產生的幻覺比 JavaScript 程式碼來得少,前者平均大約為 16%,後者則達到 21%。
當被問及造成這種差異的原因時,Joseph Spracklen 表示,由於大型語言模型是極為複雜的系統,所以很難直接追蹤因果關係,話雖如此,如 ChatGPT 之類的商業模型,由於訓練參數較多,幻覺自然也會比較少。
然而在開源模型中,研究團隊並沒有發現模型參數多寡跟幻覺率之間的明確關係,這或許是因為開源模型所使用的參數量,基本上都維持在一個比較小的等級。
Joseph Spracklen 進一步指出,除了模型大小之外,包含訓練資料、微調、指令訓練和安全調整的差異,也可能對 AI 的套件幻覺發生率造成影響,畢竟這些人工調整的過程,本來就是為了減少 LLM 出現幻覺的機率。
程式語言生態系成關鍵,再三留心 AI 程式碼
最後在 Python 跟 JavaScript 套件幻覺率的比較上,研究團隊承認,他們很難歸納出兩者出現差異的明確原因,僅能推測大概是由於 JavaScript 生態系統中的相依性套件數量,為 Python 生態的 10 倍以上,而且命名方式也更加複雜。
畢竟隨著相依性套件的規模越來越大、功能越來越複雜,AI 模型就越來越難精確為使用者給出正確名稱,從而導致 AI 生成的程式碼出現失真,最終導致套件幻覺的發生率提高。
微軟技術長 Kevin Scott 曾經預測,未來 5 年內 95% 的程式碼將會由 AI 所生成,然而在套件幻覺跟套件混淆的合力威脅之下,未來開發人員肯定要再三留意 AI 所撰寫的程式碼,是否將成為有心份子發起惡意攻擊的捷徑。
【推薦閱讀】
◆ 【企業的 AI 模型安全指南】不讓 AI 模型成資安破口,2 大切入點看企業如何自保?
◆ 企業導入 AI 為何須重新思考資安?「5 大情境」解析最常忽略的風險
◆ 【資安新威脅】「零知識駭客」不會寫程式,卻靠沉浸式世界讓 AI 生出惡意軟體
*本文開放合作夥伴轉載,參考資料:《Ars Technica》、《The Register》,首圖來源:Unsplash
(責任編輯:鄒家彥)



