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