|
|
萧箫 发自 凹非寺! y$ h, v+ t1 C4 A" }$ Y% m, P
量子位 | 公众号 QbitAI: q7 ?+ }2 k# R- b- C# b
/ l: o$ |8 {" e4 M1 k0 y! R) x
ChatGPT知道自己写的代码有漏洞,但它不说!
& t0 G0 |, q. ?" j( H9 p7 m来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
. j% m. c, h; n& K" _2 ]) |: E然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。
& h5 A; H6 m* N& I7 L, U8 Q+ f9 Z& @. U) z& a
% l! M. K4 k7 \" Y9 a
9 f/ I# P8 l7 X" }* Q
这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
J0 G& ?0 Q# p8 r而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。 V4 e; l" e O& ~
所以,用AI生成代码为啥会出现这种状况?
7 X' l# a% ]% T& P6 y1 G" }4 k写的程序中76%有安全漏洞
9 P _: V7 k* i5 j( y w, J: P( R# D: i研究人员试着让ChatGPT生成了21个程序。
9 o5 o R0 l8 ^2 I8 y整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。, \5 q& s7 [ C8 L" Y
* L% G) i1 i+ D6 Q5 a; Q: j9 m5 x: j5 V* i
7 G$ ~. N' ]# V" U9 n研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
% W, W5 H5 J+ d1 @; e# X! m: b) M4 t9 e3 g1 I; ?, c
+ K: g1 [. \9 r! {* q
, U$ w$ a3 r& q1 q7 p) v
统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。
0 w) n1 u1 h2 W0 G$ l* s8 g) p于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。; U9 R8 ~0 G7 z1 _* |+ k
ChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!; _- C3 m: k, a- |! o) I7 {4 @
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
' c7 {/ I" ^. _) C) q) C7 N* {' ^ o5 ?, n
! I' h% i+ D! `. P$ U: `" I: @* s n5 w( r6 Q: s3 S
发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。. e( @& B8 W0 q
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。& C# `2 F: V. l0 K; d- @
经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
7 n i b1 e3 L& @! K! s研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
, D1 ]( i/ y1 A论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。/ ]! d, r5 N; }
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:
0 u. a9 V- ]8 f+ g5 W! R z7 F
: N& l: h" b# m& _
& d5 J. _8 }$ [
+ N8 m9 ?6 x8 V7 m: [大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。
2 \ [( s6 ^1 r( I程序员们在用它辅助写代码的时候,也需要考虑这些问题。" F" B v. w7 M7 X; ~4 Z
Copilot也存在类似问题
1 Q) b7 v8 M, G; U# f1 k# |% \事实上,不止ChatGPT写的代码存在安全问题。' t5 g: O6 N) X" A, ~
此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。
' L- {# i# s* C5 h9 K5 q研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。
; C" C- ?/ \4 F6 t/ b% |3 F/ p A
+ U: V9 Q. G1 j* `
: }$ v& `6 S' B& [1 v
' \* a, }0 y& h+ @- J, I, |" N而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。5 @' \0 w# W% ^/ f
基于此,研究人员得出了如下结论:2 r. Z4 Z5 o8 Q# U7 E
7 \& T" R! K0 P( N1 ^; |+ K4 A, qChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。9 n2 x$ v5 G q
这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。7 x' R4 C. Z' p5 i6 ?
( Z9 @* `8 f4 A. a
作者介绍# @* Z& i& l4 y$ a @
四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。
& B( r4 z8 I1 \) B/ x) H0 ^6 w1 z: w Y b/ {
' [* m/ w% o8 P5 w' Y! k9 e2 J
9 U. f }- L/ p3 S% c& s$ b% I/ n! kRaphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
p, M }" m/ _) v2 M( ~5 [( n0 E; m5 L/ x0 B
: ~* F6 |4 s- R( I( E
$ ^% }2 D& P# }! H9 ?7 Q1 p qAnderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。 O$ R1 Z, O3 {8 F7 \$ N
作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。( T9 S1 W) E% I; J0 R9 p
你用ChatGPT写过代码吗?感觉它的“安全意识”如何?
( k/ j8 l0 {0 z+ d# B论文地址:
! N' z* A6 J4 K5 u- A1 Shttps://arxiv.org/abs/2304.09655; v0 \1 }! H+ o" [
生成代码数据集:; U2 \+ N/ _* W9 _+ M4 H& X
https://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|