|
|
萧箫 发自 凹非寺
; D: U( s* P% Q0 H量子位 | 公众号 QbitAI5 t( m* a( W# O8 T4 ^. m' p
9 x B8 j0 w. L: ?" VChatGPT知道自己写的代码有漏洞,但它不说!" d0 e6 y+ n3 a" y! `* |
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
$ [7 s$ M& @. p/ [# _然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。. l2 u) D% U, } K) A s: b
" ?2 }) k( Y4 `" i- Z
w4 [8 r( K! z2 K
5 i5 A8 k% f" M" d- T% X这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。8 `, M/ C) u" p% A- d; \
而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
a# x: ]4 W) e8 z; a3 R) r所以,用AI生成代码为啥会出现这种状况?9 d( J' r b$ {; g" A% n
写的程序中76%有安全漏洞
; m. b& E$ i9 e6 P研究人员试着让ChatGPT生成了21个程序。3 Y& l1 z& ^; |: a
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。
4 U. E0 a( R) g& a% k& Y! O7 H' e' W* d! X v) o0 C+ a
& \! Z7 w. r; P- |) _0 w' T3 b
* R5 l+ p+ P2 q( d; P
研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
/ N$ i3 y# |/ Q/ a" I' w1 @+ t0 j! @, c1 I! k# d
6 ]9 L; Q; t6 V1 Z6 w
) O# s% n0 A: o$ N统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。) R8 d" o7 t% `, n) V
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
9 ?% g% L2 m0 z. ~9 v/ t: [, IChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!
) ]5 A1 B9 e9 |9 z& z/ \显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:* R7 y+ q* r1 k) d* ?
( V: x& }, Q0 F1 }
* g g8 N2 y! B% h* l5 |7 t8 V3 `
: p# g, _) D: n发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。4 f, N. f& F, A& u: j
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
! ^) v6 c/ @, Q% j经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。1 S0 @4 e+ V0 r- b1 s' M* }
研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。; r7 x- @! `/ m; n9 c- [
论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。9 H; x7 Z& {' V7 f5 E9 J( O3 [
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:' j$ e2 X; ~, A1 ~& W
8 K9 u+ E- q- u5 f: [7 z0 k# }: E% I) r" z2 |* ]
1 ^2 R! }5 X1 y- J! ~% e+ F大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。
7 G4 Y7 v4 p8 x& a/ x% d程序员们在用它辅助写代码的时候,也需要考虑这些问题。
$ h- c8 k2 l4 d- E. i3 h: `Copilot也存在类似问题
9 V5 r/ s/ ~ H% G1 e' C- L0 D$ t$ F5 m事实上,不止ChatGPT写的代码存在安全问题。
. i7 ~% I9 Y2 L此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。
( H1 D( _ l3 t) Y" c研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。7 z+ L8 C+ s F z G
: d t: f! t3 o( F: c
( `3 Q* Q5 W* K6 ]$ J% n! a, r9 i
而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。
4 x2 H+ w) n3 \基于此,研究人员得出了如下结论:. a1 O7 A* j7 V; i6 `# i. Y
$ a+ a) Y- N1 C: M
ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。, ^4 _$ r3 A% @1 V9 a
这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。9 ]+ v7 V6 x2 d4 q
! @' ?7 H' W: T5 }! Z5 [作者介绍! s* ^" p. T) j* ?- d- @
四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。
- ^: d: F `/ ^4 `3 |* h* W% ^$ f/ k& A! A# J" O! T
' b5 e) U% o( A6 |$ K* s4 {6 H4 V0 L$ C
Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。0 k- a4 n( a3 `8 a; k& |7 y
5 t/ ^- R- r: Y8 r ~
) A# y. G/ Y6 l( o$ O" o# _7 ~1 N" f9 p; P- |
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。% u0 k( h8 @7 T
作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。
1 A3 I2 |7 D" a. E你用ChatGPT写过代码吗?感觉它的“安全意识”如何?9 b4 I( v6 ` _$ n* {
论文地址:6 e, C; D3 N6 S( x6 z1 r& l0 u
https://arxiv.org/abs/2304.09655
0 m' e& ^0 r* y# @. R生成代码数据集:
) \$ d; \$ T7 s* {' r% X5 Chttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|