AI寫的代碼比“手工代碼”安全性差很多
類似Github Copilot這樣的人工智能代碼助手能大大提高開(kāi)發(fā)人員的開(kāi)發(fā)效率和生產(chǎn)力,并降低開(kāi)發(fā)技術(shù)門檻(不熟悉語(yǔ)言或概念的程序員的進(jìn)入)。然而,缺乏經(jīng)驗(yàn)的開(kāi)發(fā)人員可能會(huì)輕易相信人工智能助手的輸出內(nèi)容,從而引入安全漏洞風(fēng)險(xiǎn)。
近日,斯坦福大學(xué)的一項(xiàng)研究發(fā)現(xiàn),使用人工智能助手編寫的代碼比“手工代碼”的安全性差很多,而且人工智能工具還會(huì)導(dǎo)致用戶對(duì)其代碼中的安全性過(guò)于自信。
調(diào)查還發(fā)現(xiàn),人工智能助手輸出的代碼通常在滿足“正確性”的同時(shí),很少了解密碼應(yīng)具有的安全屬性,并且在某些情況下,可能會(huì)創(chuàng)建無(wú)意中使用戶感到困惑的代碼。
該調(diào)查設(shè)計(jì)了一個(gè)全面的用戶研究項(xiàng)目,共有47名參與者使用三種不同的編程語(yǔ)言(Python、JavaScript和C)執(zhí)行了五項(xiàng)與安全相關(guān)的編程任務(wù)。三個(gè)核心研究問(wèn)題如下:
- 當(dāng)用戶使用人工智能編程助手時(shí),是否會(huì)編寫更多不安全的代碼?
- 用戶相信人工智能助手能夠編寫安全的代碼嗎?
- 用戶與人工智能助手交互時(shí)的語(yǔ)言和行為如何影響其代碼中的安全漏洞程度?
多個(gè)國(guó)家的開(kāi)發(fā)人員參與了該調(diào)查,其中大多數(shù)來(lái)自以下三個(gè)國(guó)家:
- 美國(guó) 57%
- 中國(guó) 15%
- 印度 13%
該調(diào)查的關(guān)鍵發(fā)現(xiàn)如下:
人工智能代碼在五項(xiàng)測(cè)試中的安全性表現(xiàn)普遍低于人工代碼
在所有五個(gè)類型的安全錯(cuò)誤測(cè)試(下圖)中,人工智能助手所犯的編碼錯(cuò)誤都超過(guò)手工編碼,與對(duì)照組相比,67%的使用AI助手的開(kāi)發(fā)者提供了正確的解決方案,而“人工編碼”的對(duì)照組的這一比例為79%。這表明,依賴人工智能輔助開(kāi)發(fā)可能會(huì)導(dǎo)致更多安全錯(cuò)誤。
AI實(shí)驗(yàn)組(藍(lán)色)和人工對(duì)照組(黃色)五項(xiàng)測(cè)試的代碼安全錯(cuò)誤占比
例如,在SQL注入漏洞測(cè)試中,使用AI助手的參與者提供的解決方案安全性明顯較低(36%對(duì)50%)。有36%的使用人工智能助手的參與者編寫了容易受到SQL注入攻擊的解決方案,而不使用AI助手的對(duì)照組的這一比例僅為7%。
開(kāi)發(fā)者最常用的提示詞
開(kāi)發(fā)者通常會(huì)選擇使用用多種策略提示人工智能助手:64%的開(kāi)發(fā)者嘗試直接任務(wù)規(guī)范;21%的開(kāi)發(fā)者選擇向AI助手提供函數(shù)聲明指令(例如“編寫一個(gè)函數(shù)……”);49%的人指定了編程語(yǔ)言;61%使用先前模型生成的提示詞來(lái)提示代碼助手(這可能會(huì)強(qiáng)化模型提供的漏洞);53%的開(kāi)發(fā)者指定了特定API調(diào)用的特定庫(kù);Python開(kāi)發(fā)者提供函數(shù)聲明更為常見(jiàn);而參與者更有可能為SQL和C問(wèn)題指定編程語(yǔ)言。
整改建議
一、優(yōu)化提示詞。調(diào)查發(fā)現(xiàn),使用AI的開(kāi)發(fā)者用戶的語(yǔ)言和提示參數(shù)的選擇存在顯著差異。建議未來(lái)的系統(tǒng)在將用戶的提示用作系統(tǒng)的輸入之前,應(yīng)考慮改進(jìn)用戶的提示(例如修復(fù)拼寫錯(cuò)誤并包含設(shè)計(jì)人員易于實(shí)施的有關(guān)安全性的語(yǔ)言),以更好地優(yōu)化整體性能。
另一種方法可以考慮基于機(jī)器學(xué)習(xí)的方法來(lái)預(yù)測(cè)用戶提示的意圖(或者他們的任務(wù)可能產(chǎn)生的特定類別的安全問(wèn)題),然后修改提示以防范已知漏洞或AI輸出。
二、減少AI的代理權(quán)。提供不安全代碼的開(kāi)發(fā)者不太可能主動(dòng)修改人工智能助手的輸出或調(diào)整參數(shù),這意味著不能給予人工智能助手太多的代理權(quán)(例如自動(dòng)參數(shù)選擇),因?yàn)檫@樣可能會(huì)導(dǎo)致用戶疏于防范安全漏洞。隨著人工智能代碼助手變得越來(lái)越普遍,這些都是需要考慮的重要解決方案。例如,與GitHubCopilot集成的VSCode等IDE可以調(diào)整默認(rèn)行為,根據(jù)AI助手建議的庫(kù),實(shí)時(shí)清晰地顯示庫(kù)文檔和使用警告。
三、凈化訓(xùn)練數(shù)據(jù)。許多人工智能編程助手都使用GitHub上的不安全代碼進(jìn)行模型訓(xùn)練。開(kāi)發(fā)者需要對(duì)這些輸入(開(kāi)源代碼)運(yùn)行靜態(tài)分析工具,僅使用通過(guò)安全檢查的輸入(代碼)進(jìn)行訓(xùn)練,以及設(shè)計(jì)更聰明的方法,利用庫(kù)文檔和“專家”代碼示例在訓(xùn)練前重新加權(quán)整個(gè)數(shù)據(jù)集,可以顯著提高數(shù)據(jù)的安全性。
結(jié)論
使用人工智能助手寫代碼開(kāi)發(fā)者在大多數(shù)編程任務(wù)中更有可能引入安全漏洞。此外,查詢?nèi)斯ぶ悄苤值奶崾驹~越專業(yè)具體(例如提供幫助函數(shù)或調(diào)整參數(shù)),生成的代碼越安全。