ChatGPT生成的代碼的安全性如何?存在哪些問題?
近年來,大型語言模型推動人工智能領域取得了巨大的進步。其中,OpenAI 打造的 ChatGPT 甫一亮相,就憑借出色的性能震驚全球。ChatGPT 不僅能夠處理普通文本,還能將自然語言翻譯成代碼,其驚艷表現甚至引發了“是否會取代程序員”的討論。

但最新研究發現,ChatGPT 生成的代碼大多數是不安全的,并且 ChatGPT 還有“知情不報”的嫌疑:除非你問,否則它不會主動告訴你代碼是有問題的。
日前,加拿大魁北克大學的四名研究人員深入研究了 ChatGPT 所生成代碼的安全水平。在《How Secure is Code Generated by ChatGPT?》一文中,計算機科學家 Raphaël Khoury、Anderson Avila、Jacob Brunelle 和 Baba Mamadou Camara 通過實驗評估了 ChatGPT 生成代碼的安全性。
研究人員要求 ChatGPT 使用 5 種不同的編程語言:C、C++、Python、Html 和 Java,生成 21 個程序,最終發現在這 21 個程序中,16 個是有漏洞的,并給出了 ChatGPT 生成的代碼“不太安全”的結論。
研究人員認為,在某些情況下,ChatGPT 生成的代碼遠遠低于大多數環境中適用的最低安全標準。有趣的是,當被問及生成的代碼是否安全時,ChatGTP 能夠識別出它不安全。但只有給出明確要求,ChatGPT 才能夠提供更安全的代碼版本。
ChatGPT生成的21個程序中有16個存在漏洞,安全性存疑
在實驗中,研究人員讓 ChatGPT 生成了 21 個程序,每個程序本身都比較簡單,大多數都只有一個類,即使最長的類也只有 97 行代碼。研究人員表示,提交給 ChatGPT 的編程任務經過精心挑選,每個任務都會涉及一個特定安全漏洞,例如內存損壞、拒絕服務,以及涉及反序列化和未能正確加密等缺陷。
總體來看,ChatGPT 在首輪嘗試中僅在 21 道試題中成功完成了 5 道。在進一步提示并糾正其失誤后,這套大語言模型成功輸出了 7 個更安全的應用程序——但所謂的“更安全”也只跟當前評估的具體漏洞相關,并不能保證代碼中不再包含其他可能被利用的缺陷。
AI編程效率更高、成本更低,但是不能取代程序員
與人類相比,ChatGPT、Copilot等AI工具顯然具有更高的編程效率和更低的成本。例如,高盛利用AI工具為遺留應用程序編寫了3000多個單元測試和1.5萬多行代碼,在幾個小時內就創建了一個完整的測試套件。與人工編寫測試平均需要30分鐘相比,AI工具可以以超過180倍的速度編寫測試,節省了一年多的開發時間。如今,AI生成代碼的速度比人類工程師快約10000倍,成本也大幅降低。
以GPT-3 davinci模型的當前定價0.02美元/1K token作為一個保守的基準,假設一名典型的人類軟件工程師每天輸出約100行checked in的新代碼或更改代碼。GPT-3按輸入和輸出token計費。假設未來Copilot支持的軟件創建代理的輸入上下文將是最終代碼輸出大小的5倍。這相當于5000個輸入token加上上述1000個輸出token,總共6000個。換句話說,使用GPT-3,以其當前的價格,生成與人類工程師一天相同數量的代碼的成本僅為0.12美元。
但是,AI編程帶來的安全問題同樣不容忽視。以上述實驗為例,ChatGPT存在的安全隱患主要是沒有為代碼執行設置對抗模型。雖然ChatGPT似乎能理解自己生成的代碼中存在嚴重漏洞,但除非明確要求其評估輸出代碼的安全性,否則它會選擇“知情不報”。因此,ChatGPT對安全問題的回應是建議僅使用有效輸入,但這對現實世界中的安全保護毫無意義。研究人員Raphaël Khoury表示,“很明顯,這只是一種算法。它什么都不明白,但能夠識別出不安全行為。”此外,ChatGPT拒絕創建攻擊代碼,但會創建易受攻擊的代碼。這也會引發道德層面的沖突。
AI編程是一項新興的技術,當前還存在一定的安全風險。因此,現在討論“AI搶程序員飯碗”或許還為時尚早。但是,開發者與ChatGPT在安全主題上的交互是有借鑒意義的。這說明,經過相應的引導,ChatGPT能夠為大多數用例生成安全代碼,AI編程也有其存在的價值。例如,它可以作為一種教學工具來教學生進行正確的編程實踐。但是,我們必須警惕使用這類生成代碼工具可能帶來的安全問題,因為這樣的工具可能會生成不安全或不可信的代碼。因此,對于學生和程序員來說,使用這樣的工具時需要有足夠的意識和謹慎。
此外,研究人員發現,ChatGPT在不同語言下生成的代碼可能存在不一致性。這表明大型語言模型仍然是一個黑盒子,難以解釋其工作原理和推論。因此,雖然AI編程在提高效率和降低成本方面具有巨大潛力,但在安全性和可靠性方面仍然需要更多的研究和改進。
綜上所述,AI編程是一項有潛力的技術,可以提高編程效率和降低成本。然而,安全和可靠性問題仍然是存在的,我們需要對這些問題進行更深入的研究和探討。同時,程序員仍然具有不可替代的作用,AI工具只能作為程序員的助手,而不能完全取代人類程序員。