|
萧箫 发自 凹非寺% T& P2 P1 y- Q! u" T9 w1 y: C
量子位 | 公众号 QbitAI6 O( B0 [& l, r2 X
; j7 Z) c1 ~# ]ChatGPT知道自己写的代码有漏洞,但它不说!/ P+ V0 G+ q4 Q" F$ j7 O
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
! N1 z! M* C( m R3 S) s$ N然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。' ]$ s( a) `" f9 L) {# B: H# O7 i3 q
9 {6 m( D# m: n( ?4 u2 Y- Q
* F! P4 j: f6 r: R
8 G7 m2 l' B( Z6 `# T4 Y; P( G这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
/ L; E$ M- T* A* G# X9 z0 @" a而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
* l5 k2 H( ^3 n* H. T3 [' @所以,用AI生成代码为啥会出现这种状况?9 ?3 ?) C: P! L, Y" E. p
写的程序中76%有安全漏洞; b* f" v* a1 _
研究人员试着让ChatGPT生成了21个程序。
! q/ i1 @; I+ E! I& n- I! k( Z整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。! O r# v& D! S: B/ @& U
+ w: Q' M/ ?1 v6 K1 j3 @, y
$ q8 y, G% n$ p6 k
& b; _ o1 q3 L+ ~+ p& z研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:2 r9 x: p5 G8 a$ E( ~
4 G( I* @" [8 q- z& k& c! X# i/ `2 Z! w- d7 f: F1 J: E @* ?3 _
7 J3 z, E) V: b8 ^; p统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。
( V/ A. F" |- ^( G F于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
1 G# H6 X6 x; P b/ A7 P5 X! b1 {, u& `ChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!# s/ U* O/ }3 l, d9 @+ @# j+ F
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
7 f$ {( O2 d- a' f" a5 k- u' X: e8 t
( x) M5 E* b4 `) M4 x
. X- O5 ^7 ]9 w6 z8 b
1 v X3 a. Z8 y" g6 T2 E发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。2 F5 v/ v1 J/ k: F- {
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
/ A, `% f1 D! q经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
$ T$ y" s: g& W! a研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。( s* `) U1 f" g( H1 Q, g- g; u8 Z
论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。: q( w( K3 ~8 e2 ?* x
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:
( G5 s# U8 P* e; Y9 o! J. \0 Y. K; l2 \4 V5 h/ x
+ S0 C* Q, o8 z7 I y0 ^
" R- {+ X- ]& u5 J大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。, h+ P, F4 J4 Z( T$ f
程序员们在用它辅助写代码的时候,也需要考虑这些问题。
% v: g) v' E* I$ I7 E6 GCopilot也存在类似问题/ O, D5 z) O) ]" P( V! _0 k
事实上,不止ChatGPT写的代码存在安全问题。
; J1 N$ A- D4 T3 }1 v+ A2 ]此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。
2 D* i, W) y$ h3 z研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。
) `, u3 [+ D7 g5 l8 l* N
9 T3 D0 O" ]$ Y i7 `, x* _$ V# d3 }) E& t
( \! g; `3 o1 c: f3 l' `- d; d- \
而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。6 Q( X3 H Z0 S, F, F
基于此,研究人员得出了如下结论:1 \9 h! \, x K" [/ ?6 v, T+ P- [
, O/ r# p) S# W. }5 B2 f5 k5 |ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
Z, C! I! @$ w! y3 `4 s这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。
6 n2 j9 h- T2 A1 v- K6 l# S& b # q) j0 p2 F; n; |8 A2 V
作者介绍
+ v% u* \# @9 c1 H/ S- a四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。4 c/ d5 k+ L, l: c6 H
2 s+ L. W: z$ x; n. J7 s# K1 v
6 L4 T2 Z0 \8 J- _" H5 S
4 a+ W( T- r4 b8 F# k$ W8 o
Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。8 |0 w; _% s9 s
$ A. {; f8 l; e/ D
% S+ h5 f8 u: @: q# u
" s$ j G! q7 D+ f, J
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。
, o3 G5 a! q G# @! B2 _作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。
/ z7 P$ ]1 C8 [ i你用ChatGPT写过代码吗?感觉它的“安全意识”如何?! ^) \+ n4 S% C1 \! `8 O
论文地址:
4 ^1 Z2 w3 \9 Q$ u- ~https://arxiv.org/abs/2304.09655" [# b5 t: V5 X
生成代码数据集:
/ h! q! Z/ Q. i4 p/ Jhttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|