|
|
萧箫 发自 凹非寺
( ?$ H N: ^+ ~量子位 | 公众号 QbitAI
/ T& V g: d" a. a . Y% Y! M k! U/ w
ChatGPT知道自己写的代码有漏洞,但它不说!0 ^! n4 e: o( @% S1 X
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。: d! G* n. K) g2 F% }. s2 X& {
然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。
# G& ~! ^& g3 a6 ~
. }6 T$ M; ~9 D* {# d _4 ^1 s' n
: K: E& y" h$ D
* D* \$ I* w7 r) J4 T3 s; I这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。, \" n' e" Q7 Q' ]
而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。2 m, i# c$ {8 d8 c# B, ?
所以,用AI生成代码为啥会出现这种状况?
7 ~" A. {% I6 n) D& h% P9 l! F写的程序中76%有安全漏洞' \1 i* _% v: w: d/ o
研究人员试着让ChatGPT生成了21个程序。
3 R* @& O) P$ u+ I# G S整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。+ J( e, X/ c* R3 z) {& L
9 o0 U K( R& X* Y1 D/ x8 x6 @# S- @- o) l$ O
" o: ?9 E# E- A; A
研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
# \: B, J/ I8 M6 Z' f) n& A. s6 }4 K; u1 E3 f6 P) Y( i" W' e1 Q V' r1 w
# v7 V- m) Z7 P
% {' L& x+ u) k) P统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。. R2 i; ~4 T) M& G! r; i* U9 ~
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。4 J" w5 x& {1 X) S" J' z
ChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!( N7 F/ M' F0 G! x+ o
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
1 w% Z3 z9 O; Z0 q# S0 B6 G
) U' g) m6 e2 L, `2 \+ L/ h6 y- ]: y5 X$ T4 b
" K# D. U5 f4 r& L i# p# @, X, V
发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。
: f, S) C8 G% v- X# i+ b- k神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
$ T% X2 Z; u& V8 p: h8 z1 U7 U经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
[" l# E2 X; P/ M; Z& ?研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。5 z& @5 i) P6 }" C! s& `
论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。
/ V, C: S9 k2 m8 c. R+ _( J我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:( r. A" T, ^: E5 n8 L4 N
7 l! ?% o0 I/ k/ S7 x
- `7 h0 i: q6 B8 O, ?$ M7 D1 _! m! |+ }# n
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。
\% x1 }& F4 ?) Z# |% ?程序员们在用它辅助写代码的时候,也需要考虑这些问题。
# u! A" S3 |2 LCopilot也存在类似问题1 u# A4 o& p& }8 n6 e& k
事实上,不止ChatGPT写的代码存在安全问题。
3 B( z: z1 B* u8 r: b& T6 E g1 }此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。- R5 D$ e1 f" }+ `
研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。
. b/ L- F3 k3 E T. \, d: ?, {' ~8 C' o' P2 ]* }4 J2 a
; s m: I# ]% f8 V
# K5 L5 q% X2 |) O! }! q
而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。
- A& G" A C' z. l) U( j& k; r7 `% r基于此,研究人员得出了如下结论:- Q" A3 w8 Y% x9 S/ T
' S8 ^) v o/ ^3 g, }- q
ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。" G% u& p. a" m
这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。, \7 `9 N9 T3 y
/ J/ u/ }/ `7 Q! ~7 y4 z; ^
作者介绍$ c$ l; i I: u) ]& y
四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。& n e, t( G1 V% A; Q: h. V
5 [. T$ _5 {, A2 K- E
. H. b" v6 F7 v
. M1 R8 n& Z& I" FRaphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。( `; s& S9 K; x j8 u& a: A( J
$ E) b* S& p: J4 q4 P
& y+ D, f0 E, s) K
" A' t( a3 L. E3 e1 u- r2 l( PAnderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。
/ p4 k/ q k& G6 H. p作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。
. l0 [- T# u- _6 K" d$ |* l8 ~; g你用ChatGPT写过代码吗?感觉它的“安全意识”如何?+ s/ v0 V- z2 {3 B
论文地址:! O$ |5 y3 P: r+ z
https://arxiv.org/abs/2304.096558 l6 X. C: ]3 y1 M9 z
生成代码数据集:& \* D$ ^" R8 r/ u- c3 }& Z1 Q5 V. n; C
https://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|