|
|
萧箫 发自 凹非寺
5 \- T1 m7 B& o w3 v量子位 | 公众号 QbitAI
9 T# D( C0 V& b3 o/ Z
+ O0 _ x3 @' G9 T5 N' L6 |0 F5 cChatGPT知道自己写的代码有漏洞,但它不说!9 V% y+ G4 o H
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
& J8 H) @- Q4 O然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。
, g9 {7 S' z4 p! V( i1 o) o) }* ]# y o! a' B/ R
+ b1 l# t! Y& W
% Y; T; k5 f: v2 ~$ N- w) l q8 j# \8 B这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。1 G9 o8 V3 }- p7 w5 S
而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
. r" d! q; p0 U5 I0 B- {- [5 @, @所以,用AI生成代码为啥会出现这种状况?
# Z# J* F0 ]. z7 a8 U) z写的程序中76%有安全漏洞
1 R O, V4 V/ Z1 }" P研究人员试着让ChatGPT生成了21个程序。& F3 N5 L/ k: a$ h: q# h
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。
% I6 R2 E& F* e3 _* S
( b4 Q/ e; q/ x# {5 ^( r/ k v) @7 N" R- R2 d
: d7 \6 ~, B5 @7 c* y4 c
研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
. L: F8 G9 E/ [& D0 M
4 s( x3 y' i2 q+ I' J1 N: G b% s) J5 }2 U* x
4 N. X5 Z3 m5 H统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。3 B6 S5 S% L% \! j
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
) f9 A [- l AChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!+ N# d- C# L9 ]( b: b8 j6 |! n
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:/ r$ a, w7 d& Z* G
8 K, {9 U7 Z" j* W! {
& s+ Q, a/ R3 v- P9 s0 O
) P' N3 i" X' x# f: \6 o发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。
5 {# u& j5 @/ l! E神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。5 P/ [0 T9 @/ ?6 h' A, s% q
经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。- h, `) M# L3 d
研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。- S4 y1 j* y* w6 z7 x
论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。# }3 |. |) n7 a9 ^* n; c
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:* k+ u4 }5 B) f6 t
: D: V" O" z8 H/ U) q% O3 j* u! f$ p5 ~7 q% T f7 {, q
* @0 c& T9 h% u' }
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。
( M! m# z, W; I2 J0 S5 j7 U- \程序员们在用它辅助写代码的时候,也需要考虑这些问题。
3 b# U' S' a! O, K4 q e% cCopilot也存在类似问题
5 r2 Q% v" {9 P5 s% G事实上,不止ChatGPT写的代码存在安全问题。
x, z& f- g; B' S+ ~) H此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。0 a: a$ T7 ^% k* c4 e7 A3 W
研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。 D; r& w- _9 t- O# e
% V/ U: _" b# _! D; J( ]4 p+ e# c7 u! B3 D2 A; {5 ]
2 t \+ W; u2 v+ J, `$ S而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。" h7 b- m5 f. n3 r, }9 G) Y L
基于此,研究人员得出了如下结论:. z0 H$ V3 C2 R
4 ]& G/ b* I6 a9 m9 i1 e( sChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
9 u% I6 J9 c# n/ x这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。
5 ]/ k9 ~3 ?/ i
" y+ g' D9 l' j; E% h9 P作者介绍
. T2 m( g! X( ?; `8 b+ F- x# y8 _& l四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。; P3 ~0 c) ?0 g! ?3 l* c8 Q0 r
" l0 i) i1 _2 V3 p- w, B- e# G& @ v- w; H2 }! L
! g) h6 A) t! ]8 `/ e, F
Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。4 V" W8 r8 `1 g# j8 _4 Z' L
3 v! M. r6 B3 ?0 R5 t0 O2 t
$ w5 h) k5 J) {) A( r+ Q. t
% ^! L. R {' R+ l# lAnderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。
) C0 U, T6 L6 v# d3 Z. v2 k作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。% J% P" q( {9 ~5 V# |4 @
你用ChatGPT写过代码吗?感觉它的“安全意识”如何?
5 E+ z* p. n( x& C* S$ s论文地址:
! I$ s0 Y- e! E- Xhttps://arxiv.org/abs/2304.09655- _1 d; q) ~9 z( }. u" u1 u
生成代码数据集:* p# |3 R+ P0 ]0 n& Z! M
https://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|