|
|
萧箫 发自 凹非寺
' Y2 p1 W" k& F% [0 Z6 m量子位 | 公众号 QbitAI
5 r/ s# y* O5 M! |1 _% ^. U ! ]- p5 j1 w5 a+ _" l' Y: J
ChatGPT知道自己写的代码有漏洞,但它不说!: @ N N6 n+ n
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
& y* }( z# n4 c: h! t/ C- f* g然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。( R2 q5 ^, x( b% J( b) P8 t
3 V% H% A3 \' e( ?/ e7 L' h" L7 O, l4 g0 k5 M
2 h: d+ e- d( S0 |7 ]2 ?这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
9 P- o2 m/ o2 F5 k而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
7 ~' x2 M* ~% N u1 M4 I! R所以,用AI生成代码为啥会出现这种状况?$ ^. s' u+ O! X* {
写的程序中76%有安全漏洞; w$ V1 M" t7 G
研究人员试着让ChatGPT生成了21个程序。1 h4 |7 K0 u1 a. H
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。
7 I& l' ?, @% p, @. @8 C9 h1 H1 o; e) B+ p, B/ `$ I1 ]0 v
( F0 F5 [7 Z; J7 E, E% u
0 v; H+ ~$ e$ A' W
研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
. T# N$ U$ A1 V( i3 J. E
, x' \; D6 V! A, m- V/ i. d2 e) e( f& I& V0 | ]; d& y
2 M" \0 j2 d; w( j) H, N+ l5 @1 {% c统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。
$ v. X6 U. k9 p# m* Z" {于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。+ x+ {, w6 P" R# B
ChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!
+ U, m2 Q7 c$ D8 G, s G显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
# |9 q. Q, k8 p/ A; w* ~* e/ A/ i
2 J4 d& }# \6 s. L G' `' X
$ D% b- g' Z: r B" q9 j. }) y发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。
5 l: U/ o3 Z2 ?1 _神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。# l* f5 R _# q# M, T6 A
经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。* d' `/ p3 a. F" b
研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
2 `5 ?' O O3 }0 D) ~论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。' v: K' [* }1 N5 z- V- Q
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:8 [8 `5 u. u; G+ h: I
. X* K( n+ s! ^4 a7 k, u, V. A: _
7 c) [" y5 g3 E5 {& r
8 X j4 W4 |8 s大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。. [# `4 b8 k6 g2 G, J6 }
程序员们在用它辅助写代码的时候,也需要考虑这些问题。! Z- r# R; f1 h+ d9 [: [
Copilot也存在类似问题
$ O+ m5 r7 ?7 ^- N# y4 { q. h事实上,不止ChatGPT写的代码存在安全问题。
) L3 r. _2 t( V此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。0 @7 L5 D" D8 G5 x% V$ P2 }0 N# B
研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。9 `: ^- Y6 L8 M) B, w% @/ ^" r5 _' @
" a) q' ^/ i( Z) i, m# Z5 J; @" `/ F6 J" D. ~4 ^
5 Y& l: ?" b# K/ q, t
而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。
& ]; D6 k) g2 q7 H基于此,研究人员得出了如下结论:! K( }. c5 N6 s6 P. G% t
8 X3 q y: T1 nChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
/ V6 @. O8 v: K3 f# n这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。+ S/ j4 v) R( B) a3 s$ s1 [
1 j0 X- q. h) f- m* \' l* F作者介绍
( z2 A& Y d9 }' y6 K% o# G四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。9 \; U2 [# s" [3 p& c
% I" j4 a [0 v. f/ i0 p V
2 Z7 h) ^4 ?/ ^" I$ [( S8 X; `
$ S5 o: G' }5 o" g$ t# {Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
1 K4 r0 k* m# m0 X& i$ \: D2 {
" [, a% n5 }- D9 f
/ U& G; _6 T7 A; m7 b& V$ C$ o! }
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。5 k, U1 X* }8 w7 B& R: i/ Y
作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。
) B- s) G5 a* T2 [你用ChatGPT写过代码吗?感觉它的“安全意识”如何?& Q' C; Z- o: X% G- _
论文地址:
& q. e; E- e" t5 m9 C9 }. mhttps://arxiv.org/abs/2304.09655
/ C7 o, _+ q/ O$ [( _1 h生成代码数据集:/ a% ^4 A3 i! n' q( g
https://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|