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

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