|
|
萧箫 发自 凹非寺$ i5 j; J6 k& g* \3 p9 X
量子位 | 公众号 QbitAI
) [. e; R8 F$ C4 v3 w* K : n, Y& B' [! [: B8 k3 m* a3 O
ChatGPT知道自己写的代码有漏洞,但它不说!/ `) h! m( |! V
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
8 i* _9 k+ b1 U4 c3 ~' _2 k L然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。- ]/ n3 C7 B ^ V0 d. o! M/ U5 Z& F0 B
8 u2 ^0 q: ~# K& A8 T1 ~
$ O! k2 n+ m- O& x
8 o+ d# f3 q* Y& k; T' c
这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
% d4 Z! V! p- S. R l- x1 P而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。) K; j: |- @0 @2 T( J8 x
所以,用AI生成代码为啥会出现这种状况?
/ t% n: x* d3 u0 G$ t写的程序中76%有安全漏洞
. s) D8 H, _( ]$ G$ p9 K; g* t研究人员试着让ChatGPT生成了21个程序。
. [5 }5 O+ ^$ l+ n6 X2 q! J整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。
* M; E9 K! |2 m- a G+ B" O( R" I* {
9 ]( M0 F7 h. }
: O5 W) n3 u8 z! h! h( D; b3 x研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
* Y; O; R: x l- c9 s6 J
1 f* D) ^2 Y s# r' c/ ?. C# P$ O5 ~1 {" O
+ m8 M$ S- ?( Y0 T. `# @9 a9 B
统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。9 M J5 o5 D' D W8 k' r1 Y
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
- S# _5 ^. ?# m7 U& ]ChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!* l9 A& H1 r% G
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
, U; [0 T0 j5 f. l0 N" l+ f) T, e- ?$ B3 F8 C& T% R3 b
2 N9 C/ o) t1 q4 N: ]
0 n; B; @" V# e% x, H发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。/ X9 L( e3 b. e! z8 K9 V) O
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
3 \2 d6 k* H6 X经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。1 D S& R h$ {/ U \% {
研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
# U# P7 }8 r$ a: U! Q" [& _; X论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。
& i- f( }# p* w. a; M& }我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:9 w/ ]$ W1 d3 q% Y, f3 o
" t' n. e/ O1 k) I# A+ S: E: c* \
0 O7 n' ]2 T1 t; ?) v
/ z! U" N# d( t4 b* h# w$ t) l大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。
! }: L. d4 g6 Q( G( e程序员们在用它辅助写代码的时候,也需要考虑这些问题。
& J) O* o o# Z' q: _% dCopilot也存在类似问题; ` j9 f; t9 G7 A1 Z9 r1 o& O
事实上,不止ChatGPT写的代码存在安全问题。4 F' e" j5 l( S$ l- W* E: N3 `
此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。
8 y4 m: j( K+ V: y& ?$ L2 W4 `研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。$ e% G& G# v2 S( I( Q
5 J \" P8 a) N
9 ^4 E/ Z0 { a$ }# e/ p
2 T2 a* z" X0 ~' j- \' `
而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。
( p( F. O7 ~6 l+ h3 a/ V; J) _: a基于此,研究人员得出了如下结论:( U6 ]3 n q& a: ^& ]4 w8 r: y
* I% y" \# `& w) _& k0 ]
ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
9 U$ f/ e( f0 x! g/ g; X$ U这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。* y, o- d1 J9 j& y
. u$ h& s. B& d O
作者介绍
7 e) G5 \! ]9 r' J* f0 u四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。. ]- d. M- [3 G+ m
0 k4 [4 v" _4 t1 K
- X9 l" z7 N a1 i3 |, J8 h" J6 C. L+ ]- h3 L3 u& _6 ~3 ~
Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
* Q, M* [& _ X. X
0 v5 K( ]# ~$ _, G. {: L' V
# |8 R6 G. t8 r% h4 x+ o! X" ?3 {3 [, X+ i- {& p L ~
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。/ ?; y6 q( b( v) v
作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。 b3 F- ~3 @- p9 a; U
你用ChatGPT写过代码吗?感觉它的“安全意识”如何?
) z# S+ n, {3 p" F4 t7 }论文地址:
2 y* @; i/ ?% G- q& G3 mhttps://arxiv.org/abs/2304.09655) F! P! {/ j6 V
生成代码数据集:
+ G% V) l% }" ?! uhttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|