|
|
萧箫 发自 凹非寺
) A# u, m2 L" d* [( b$ @, O4 X量子位 | 公众号 QbitAI
1 P9 ^; m9 v" h" I5 ^9 I9 e ' h Z2 q+ I7 R
ChatGPT知道自己写的代码有漏洞,但它不说! j k6 ^/ q- V q/ R, D
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。: B) I# ^$ g( E
然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。
+ f# ]0 n8 W9 g3 L- U/ K! S; E- o9 n
4 L: n' H$ D0 o# N
~( |% ?; L# o! x6 |5 x这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
S* {' [) q y& N而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
( o) _. O5 \0 a所以,用AI生成代码为啥会出现这种状况?: M6 ?0 e* c7 g _* u- h# @
写的程序中76%有安全漏洞
: ?+ H& n- o% @研究人员试着让ChatGPT生成了21个程序。4 q: F' m, V: Y- C
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。
' Z0 A+ c; J5 R* @( U0 R) G8 s; H- R* T W0 J
0 G" M6 D+ Y3 W# D9 W
# Z$ I# P w- S0 @研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
. B( d$ ^8 r! o4 j N7 C* I" e1 b% D+ Y4 L' g. l/ U+ J }
! S: @2 D* N* s4 t: a- ^1 `3 L
6 m. U" K; M0 ~- }( Q统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。0 F- E. J& u" C+ _( d+ s% S
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
: z4 |# f2 I0 D5 W0 V4 X1 kChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!
2 R _3 Y9 A/ N+ h' W# ]4 R/ |1 K显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
/ M2 n; q2 c0 R0 f c* [6 G# W: T n" i. V
% t$ {) Q' A2 s4 W' b
9 E4 X" x6 j! q% m) t: y3 [# H发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。
5 v3 Y* \$ [7 Q神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。2 c/ g- l v$ ^. U* v. v \ q' S7 W
经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
6 k& P B. T, c9 I5 ^研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
. q( {+ I( T1 I/ i/ a0 T论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。
J; J8 e* K3 b: I我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:
8 p3 h( R* G0 f: s* J
{4 S2 X0 D( S% z! [8 ]- |
. Y) R6 B3 W5 M+ P1 W! d, {/ d
9 r1 U5 j d- x, {8 @2 L大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。/ H, n/ L8 _7 g* ]
程序员们在用它辅助写代码的时候,也需要考虑这些问题。2 P7 i$ i/ g. Z: _
Copilot也存在类似问题/ J( b1 t8 f+ O$ Q4 h( u2 ~8 r
事实上,不止ChatGPT写的代码存在安全问题。8 l! `% P5 e- L
此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。* b+ {* |$ o0 x
研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。
) b0 ]# \0 v9 C7 d& o/ I& T2 t
* w* k7 H; }- }2 S1 B3 |' e5 F9 g. e; i
2 C. y- p& \ e/ S; Y/ q
. L! }! c3 `# o( x而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。/ H+ N. K3 D8 N
基于此,研究人员得出了如下结论:7 y8 e& a4 G: e& C& \9 l1 H
! @' q. K' f: _: J7 O0 r; e1 c: cChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。* n5 f7 [; C" O( G( J% @+ l' A1 r- e
这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。5 T$ v+ |3 z( x' A% r
5 r( ]! { l$ H5 `
作者介绍* ~- a) W* _; H( \$ ]
四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。8 x; j ^# t t* o# M5 B
4 l& n# X8 b6 y9 }4 ]. {
1 b4 U! s) r( d/ u
; A% r8 Q% ?: ]7 uRaphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
0 `5 ]+ q8 \* O+ q; U) h6 r
4 q+ \ p" |1 A! p- I3 ~
6 O* ^! M* Z. X
3 C3 k2 b1 u: E% B0 LAnderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。
3 s; F7 M1 x* T$ v$ @7 F7 a作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。& L' [) _/ f- s9 Y4 v3 f
你用ChatGPT写过代码吗?感觉它的“安全意识”如何?5 G* H8 B9 K& x) q
论文地址:
; {4 T5 m* H! b& @https://arxiv.org/abs/2304.09655) ~% |9 U( x, ?+ ~, V; Y) f0 R4 ?
生成代码数据集:
9 X# J6 ~$ n0 g7 N6 e; t8 @7 S. Shttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|