ChatGPT明知自己寫(xiě)代碼有漏洞,但你不問(wèn)它就不說(shuō)
ChatGPT知道自己寫(xiě)的代碼有漏洞,但它不說(shuō)!
來(lái)自加拿大的一項(xiàng)最新研究發(fā)現(xiàn),ChatGPT生成的代碼中,有不少都存在安全漏洞。
然而在被要求評(píng)估自己代碼的安全性時(shí),ChatGPT卻很快發(fā)現(xiàn)了這些代碼中的漏洞,并給出了一些解決方案和建議。
這意味著它并不知道自己生成了糟糕的代碼,但卻查得出它寫(xiě)的代碼有漏洞,也有能力修復(fù)這些漏洞。
而在另一篇來(lái)自斯坦福的論文中,研究人員測(cè)試了另一位著名AI程序員Copilot,也發(fā)現(xiàn)了類似的問(wèn)題。
所以,用AI生成代碼為啥會(huì)出現(xiàn)這種狀況?
寫(xiě)的程序中76%有安全漏洞
研究人員試著讓ChatGPT生成了21個(gè)程序。
整個(gè)測(cè)試過(guò)程如下,先提交需求給ChatGPT,生成相關(guān)代碼,再對(duì)這些代碼進(jìn)行測(cè)試,并檢查問(wèn)題、潛在的缺陷和漏洞等。
研究人員給ChatGPT提了包括C++、C、Java和Python在內(nèi)的21個(gè)寫(xiě)代碼需求,這是評(píng)估的結(jié)果:
統(tǒng)計(jì)表明,ChatGPT生成的21個(gè)程序中,有17個(gè)能直接運(yùn)行,但其中只有5個(gè)程序能勉強(qiáng)通過(guò)程序安全評(píng)估,不安全代碼率達(dá)到76%以上。
于是,研究人員先試著讓ChatGPT“想想自己生成的代碼有啥問(wèn)題”。
ChatGPT的回應(yīng)是“沒(méi)啥問(wèn)題”:只要用戶每次的輸入都是有效的,那么程序一定能運(yùn)行!
顯然ChatGPT并沒(méi)有意識(shí)到,用戶并不都是行業(yè)專家,很可能只需要一個(gè)無(wú)效輸入,就能“引炸”它寫(xiě)的程序:
發(fā)現(xiàn)ChatGPT不知道自己寫(xiě)的程序不安全后,研究人員嘗試換了種思路——用更專業(yè)的語(yǔ)言提示ChatGPT,如告訴它這些程序具體存在什么漏洞。
神奇的是,在聽(tīng)到這些針對(duì)安全漏洞的專業(yè)建議后,ChatGPT立刻知道自己的代碼存在什么問(wèn)題,并快速糾正了不少漏洞。
經(jīng)過(guò)一番改進(jìn)后,ChatGPT終于將剩余的16個(gè)漏洞程序中的7個(gè)改得更安全了。
研究人員得出結(jié)論認(rèn)為,ChatGPT并不知道自己的代碼中存在安全漏洞,但它卻能在生成程序后識(shí)別其中的漏洞,并嘗試提供解決方案。
論文還指出,ChatGPT雖然能準(zhǔn)確識(shí)別并拒絕“寫(xiě)個(gè)惡意代碼”這種不道德的需求,然而它自己寫(xiě)的代碼卻有安全漏洞,這其實(shí)有著設(shè)計(jì)上的不合理之處。
我們?cè)嚵嗽嚢l(fā)現(xiàn),ChatGPT確實(shí)會(huì)主動(dòng)拒絕寫(xiě)惡意性代碼的要求:
大有一種“我不打擊別人,別人也不會(huì)打擊我寫(xiě)的代碼”自信感。
程序員們?cè)谟盟o助寫(xiě)代碼的時(shí)候,也需要考慮這些問(wèn)題。
Copilot也存在類似問(wèn)題
事實(shí)上,不止ChatGPT寫(xiě)的代碼存在安全問(wèn)題。
此前,斯坦福大學(xué)的研究人員對(duì)Copilot也進(jìn)行過(guò)類似調(diào)查,只不過(guò)他們探查的是用Copilot輔助生成的程序,而并非完全是Copilot自己寫(xiě)的代碼。
研究發(fā)現(xiàn),即便Copilot只是個(gè)“打輔助”的角色,經(jīng)過(guò)它改寫(xiě)的代碼中,仍然有40%出現(xiàn)了安全漏洞。
而且研究只調(diào)查了Copilot生成代碼中的一部分,包括C、Python和Verilog三種編程語(yǔ)言寫(xiě)的程序,尚不知道用其他語(yǔ)言編寫(xiě)的程序中,是否還存在更多或更少的安全漏洞。
基于此,研究人員得出了如下結(jié)論:
ChatGPT等AI生成的代碼安全性并不穩(wěn)定,用某些語(yǔ)言寫(xiě)的代碼比較安全,而用其他語(yǔ)言寫(xiě)的代碼卻很容易遭受打擊。整體來(lái)看,它們就是一個(gè)黑盒子,生成的代碼是有風(fēng)險(xiǎn)的。
這并不意味著AI代碼工具不能用,只是我們?cè)谑褂脮r(shí),必須考慮這些代碼的安全性。
作者介紹
四位作者均來(lái)自加拿大魁北克大學(xué)(Universite du Quebec en Outaouais)。
Rapha?l Khoury,加拿大魁北克大學(xué)教授,曾經(jīng)在拉瓦爾大學(xué)獲得計(jì)算機(jī)學(xué)士、碩士和博士學(xué)位,研究興趣集中在計(jì)算機(jī)安全方面。
Anderson R. Avila,魁北克大學(xué)國(guó)立科學(xué)研究院的助理教授,主要研究方向是數(shù)據(jù)隱私相關(guān)的聯(lián)邦學(xué)習(xí)、網(wǎng)絡(luò)安全和生物特征識(shí)別技術(shù)等,曾經(jīng)在華為的加拿大研究院做過(guò)機(jī)器學(xué)習(xí)研究員。
作者Jacob Brunelle和Baba Mamadou Camara也都來(lái)自加拿大魁北克大學(xué)。
你用ChatGPT寫(xiě)過(guò)代碼嗎?感覺(jué)它的“安全意識(shí)”如何?
論文地址:https://arxiv.org/abs/2304.09655
生成代碼數(shù)據(jù)集:https://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT