ChatGPT明知自己寫出的程式碼有漏洞,但如果你不問它就懶得說

ChatGPT明知自己寫出的程式碼有漏洞,但如果你不問它就懶得說

ChatGPT知道自己寫的程式碼有漏洞,但它就是不說!

來自加拿大的一項最新研究發現,ChatGPT生成的程式碼中,有不少都存在安全漏洞。然而,有趣的是,在被要求評估自己寫出的程式碼的安全性時,ChatGPT卻很快發現了這些程式碼中的漏洞,並給出了一些解決方案和建議。

這意味著它並不知道自己生成了糟糕的程式碼,但卻查得出它寫的程式碼有漏洞,也有能力修復這些漏洞

而在另一篇來自史丹佛的論文中,研究人員測試了另一位著名AI程式設計師Copilot,也發現了類似的問題。

所以,用AI生成程式碼為啥會出現這種狀況?

ChatGPT寫的程式中76%有安全漏洞

研究人員試著讓ChatGPT生成了21個程式。

整個測試過程如下,先提交需求給ChatGPT,生成相關程式碼,再對這些程式碼進行測試,並檢查問題、潛在的缺陷和漏洞等。

ChatGPT明知自己寫出的程式碼有漏洞,但如果你不問它就懶得說

研究人員給ChatGPT提了包括C++、C、Java和Python在內的21個寫程式碼需求,這是評估的結果:

ChatGPT明知自己寫出的程式碼有漏洞,但如果你不問它就懶得說

統計表明,ChatGPT生成的21個程式中,有17個能直接運行,但其中只有5個程式能勉強通過程式安全評估,不安全程式碼率達到76%以上。

於是,研究人員先試著讓ChatGPT「想想自己生成的程式碼有啥問題」。

ChatGPT的回應是「沒啥問題」:只要使用者每次的輸入都是有效的,那麼程式一定能運行!

顯然ChatGPT並沒有意識到,使用者並不每個都是專家,很可能只需要一個無效輸入,就能「引炸」它寫的程式:

ChatGPT明知自己寫出的程式碼有漏洞,但如果你不問它就懶得說

發現ChatGPT不知道自己寫的程式不安全後,研究人員嘗試換了種思路——用更專業的語言向ChatGPT下提示,例如告訴它這些程式有什麼漏洞。

神奇的是,在聽到這些針對安全漏洞的專業建議後,ChatGPT立刻知道自己的程式碼有什麼問題,並快速糾正了不少漏洞。

經過一番改進後,ChatGPT終於將剩餘的16個漏洞程式中的7個改得更安全了。

研究人員得出結論認為,ChatGPT並不知道自己的程式碼中存在安全漏洞,但它卻能在生成程式後識別其中的漏洞,並嘗試提供解決方案。

論文還指出,ChatGPT雖然能精準識別並拒絕「寫個攻擊程式碼」這種不道德的需求,然而它自己寫的程式碼卻有安全漏洞,這其實有著設計上的不合理之處。

大有一種「我不攻擊別人,別人也不會攻擊我寫的程式碼」自信感。

程式設計師們在用它輔助寫程式碼的時候,也需要考慮這些問題。

Copilot也有類似問題

事實上,不止ChatGPT寫的程式碼存在安全問題。

此前,史丹佛大學的研究人員對Copilot也進行過類似調查,只不過他們探查的是用Copilot輔助生成的程式,而並非完全是Copilot自己寫的程式碼。

研究發現,即便Copilot只是個“打輔助”的角色,經過它改寫的程式碼中,仍然有40%出現了安全漏洞。

而且研究只調查了Copilot生成程式碼中的一部分,包括C、Python和Verilog三種程式語言寫的程式,尚不知道用其他語言編寫的程式中,是否還存在更多或更少的安全漏洞。

基於此,研究人員得出了如下結論:

ChatGPT等AI生成的程式碼安全性並不穩定,用某些語言寫的程式碼比較安全,而用其他語言寫的程式碼卻很容易遭受攻擊。整體來看,它們就是一個黑盒子,生成的程式碼是有風險的。

這並不意味著AI程式碼工具不能用,只是我們在使用時,必須考慮這些程式碼的安全性。

論文地址:
https://arxiv.org/abs/2304.09655

生成程式碼資料集:
https://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT

 

本文轉載自量子位

 

Qbitai
作者

量子位(Qbitai)專注於人工智慧及前沿科技領域,提供技術研發趨勢、科技企業動態、新創公司報道等最新資訊,以及機器學習入門資源、電腦科學最新研究論文、開源程式碼和工具的相關報導。

使用 Facebook 留言
發表回應
謹慎發言,尊重彼此。按此展開留言規則