|
萧箫 发自 凹非寺$ }$ e/ |0 m/ ?# K
量子位 | 公众号 QbitAI
" K* q9 {3 X. \7 O( m % X7 x3 S; C, @" Z' e+ f1 |
ChatGPT知道自己写的代码有漏洞,但它不说!
7 q0 D9 Y& }0 O( G! c来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。" N4 Y2 a" e) u) V+ F
然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。
- y- w: i6 y) z' ~
O% ~# D( p. g# Y; {( A% q5 S7 A/ E. }/ |9 R+ G1 k! T7 f6 r& o
: ^% [, T/ Y% p! t: Z4 [. W; Y/ C
这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。" M4 Q3 ^( s: |
而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
+ ~- M/ S" p& N( w" L$ N所以,用AI生成代码为啥会出现这种状况?
: ]: `2 x! B8 G2 I4 U# c写的程序中76%有安全漏洞( O7 P# C# w! z2 R4 T
研究人员试着让ChatGPT生成了21个程序。) i: r4 W I# I! V/ \; o& C5 b
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。+ A( Y3 u) }# d$ x y
1 E" K: |- ] a. f6 L& `6 f Q/ y, y( B4 a2 o) S9 q) ~
. l0 l G0 L2 s' l研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
y/ ^! L" f( G4 N7 m5 w8 }
( b$ A# `. B8 N/ f7 F, \/ A9 {. g" I2 U, D! Z# N$ J: A; C. L
. D7 s {# X7 k
统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。
( k, }- F0 r, Z/ K于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
' H& M/ T+ v/ [8 }9 ]( WChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!
g9 X% P' g+ |, g8 Y显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:; [0 X$ ~1 [7 L d# Q1 Q$ k# C7 u
& t5 ^' m* Q& V
/ @/ _1 v" j4 I8 G1 J* U& S- { U, C1 v; Y5 `
发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。$ i* g" a6 \1 j4 B8 |" u7 P- H# V
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
}3 I2 K& p. J+ [经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
% ~5 `. H* i Y, O9 p" d研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
, y0 V/ o. ]& B8 {9 g论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。
+ I7 M8 v3 ^2 X, X7 A$ y* y% q- [我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:2 x; q7 p, |* H# W+ \- g# s& D- n
: y6 V! X* p8 ?0 O0 r2 f
$ j9 W+ a7 v* q# w: y5 W
+ S3 Y& \9 f6 u$ i% |
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。/ D. F. t) ]# k5 z5 ], O
程序员们在用它辅助写代码的时候,也需要考虑这些问题。- J- y5 L) N ~' Y3 N
Copilot也存在类似问题7 m+ m8 x, u( T1 w9 m! _3 i
事实上,不止ChatGPT写的代码存在安全问题。
- m P. h) w5 a: t4 s此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。2 ^9 i$ e$ O, s1 j6 @+ |/ }& P. d: {
研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。
" V N' J7 ~/ [6 t% K# c: M. K5 m0 a
% o) Z. ^" f; r* [. V& l" ~0 ]0 Q; a* u
而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。$ B0 v. ?* U1 C+ V9 a6 N9 w
基于此,研究人员得出了如下结论:1 \, K% \( B2 |1 |6 ]7 y0 R A3 p
% c4 _" W) }% H* \4 D) bChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。9 @; i( X. B1 g
这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。
4 l& }( Z5 v4 u3 _! A7 q $ L" Y# K$ y$ g, ?; b# T
作者介绍
* ^: t# p, L% z四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。5 e. v' t# d5 {7 y: U" Y% g V
1 i: r x2 ~% z- `
3 n: x* f% }! f/ @) k3 S* ~0 q# B( ?; U$ x1 c/ b
Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。$ j6 o7 X9 h! d, r% c
" o. q1 t5 \* Q" c- A
4 b6 c6 G5 e% v! o+ K' h
$ w' T+ ?" j% o4 r, b- }3 KAnderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。$ T* f3 {# U0 `) G$ T! O0 x% I
作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。
, @8 @2 R. h3 P, D: T: y你用ChatGPT写过代码吗?感觉它的“安全意识”如何?
% Z6 h% ]3 a4 P4 d; M# S, o论文地址:
8 x' k$ m5 w( ~1 @https://arxiv.org/abs/2304.09655" b1 {) C, E( z x0 o- J
生成代码数据集:
2 _; M& K6 ]: G$ c6 W: I* vhttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|