|
|
萧箫 发自 凹非寺
9 Y0 z! y& B& R' ~& ] f) V5 P1 L5 r4 |量子位 | 公众号 QbitAI
. i& t: M' y' q# q- m
2 y6 b$ `+ T3 K6 i( X l! [ChatGPT知道自己写的代码有漏洞,但它不说!
2 J7 Z. _2 l/ _来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。5 S2 @/ t# O. \/ [
然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。
5 \$ u) a+ _5 O; ^* v+ {/ p5 Y, I
1 d1 M& C+ g0 E" U$ {
! S1 R0 {/ p1 }) @3 z L+ ?
9 x$ O5 A: P, q这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
' t$ W. H2 i) i( _* t而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
. `. p! q- B1 L% y$ V6 D所以,用AI生成代码为啥会出现这种状况?
( s% S1 e9 `! C O写的程序中76%有安全漏洞
/ o/ N* i1 C! ?, K5 j9 ?9 `; J7 s研究人员试着让ChatGPT生成了21个程序。 W: k# H0 S9 |2 V2 g' B3 \
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。! y, c+ K( S( H$ ^2 v: J9 T" Z
. ?9 Z& u) P; ]3 d2 `' Z \* g9 C5 p
0 _: \6 w1 B8 ~! Q- B! R# w1 C1 p研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
! k- L( J6 a& O
$ F' R- S$ i$ g: |# }( u
! M5 M# A I2 V0 Z: e. p7 `9 {, s( e& {! N: H
统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。$ G' S$ T; I8 {- p( `
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
9 @) r, D: \2 YChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!' Q& L; m; f, `
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:6 p+ Z# B6 Q& }9 X% u! b
% g! {# f' h7 v( S' S0 y/ f
$ ^ C/ x0 c5 o
( }( O/ k+ x$ n7 D( }; l: i3 @0 c2 [$ r发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。
1 C0 c* U: @ |2 L# {神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
) @ G$ K2 o7 `5 M; N5 D* u经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
0 O( t3 z) n7 c7 p研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
9 v( Y L; f( }: p+ e论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。8 u& s/ z# Z- d0 `
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:" c+ o- r( {8 u5 Y: P9 o. ]
- e/ z3 J" G& _0 h
: E5 c5 |3 j$ A& I/ _ y" T, n# z1 \) d/ D' L2 x! x8 @
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。: s4 L1 U) u: Y; D
程序员们在用它辅助写代码的时候,也需要考虑这些问题。
6 f' Z; }! r) P& f: a OCopilot也存在类似问题1 X J X8 j& w
事实上,不止ChatGPT写的代码存在安全问题。1 V7 o- o' h9 ?2 Z2 m! Y0 A
此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。
$ S; v+ ?/ j5 J& w/ w. N0 X6 X% Z; n研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。
2 m( `: X! C5 `) }; R
+ U6 f+ z9 ]$ n6 s: h
0 d& Q/ b J; C: L. h8 w l
" k) C5 _5 ]4 f2 t) D而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。
. a+ X5 d+ c/ Q* @基于此,研究人员得出了如下结论:
( c5 Z% ?# j$ H# {) D/ R5 ]0 \3 g- L% L y9 ]
ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。5 L- [/ z8 X3 u9 f+ h0 a
这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。& d# R# E) H/ W' L/ y
* D N: m; K' x- m$ K; B作者介绍% `% x' c% @$ L0 m9 I# c' H
四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。6 s- B2 Q4 G5 b1 g8 `) l' }
) ?3 b& |. B+ ]% w9 t8 ?% F
3 P6 A$ A( Z, h! F
$ t& B+ o' d- x
Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
5 ]* o2 J6 |3 K* C- E4 W8 c9 t
1 p. M* o) ?$ `4 }5 ?# V6 d0 a. `3 ?$ K; W7 L/ P
% Q& Y# P% c& C0 U- D' QAnderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。3 Z; P& n4 r Z: u" i7 x1 w% B% c- E6 n
作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。$ j& t8 I/ O: Q1 W) w, Y- @
你用ChatGPT写过代码吗?感觉它的“安全意识”如何?
H# s# v. M( A0 X, D; ^论文地址:
5 D3 r$ U2 s* X2 R/ G9 Y3 P* L/ {https://arxiv.org/abs/2304.09655
. M( ~$ l# ^( M% n9 n" C, o& t生成代码数据集:
. b) M# o3 p* M" |https://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|