|
|
萧箫 发自 凹非寺1 F$ G0 g" W3 o- g# M) K/ m
量子位 | 公众号 QbitAI: P+ G. T; H- O& h' C8 P( H
8 r6 Z6 C% `9 \, p6 |
ChatGPT知道自己写的代码有漏洞,但它不说!' \0 L; Q9 F: R+ p* [' q! Z" Z
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。1 B. k" d2 o5 z- p
然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。! ^7 T# L) P7 y, u# L
; Q6 R5 \6 _% c; d: U; Z/ u
' v3 w" \0 v/ {2 H" r$ ~
( @4 I: Q4 ?; @6 y. L这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
0 a1 r: e) x w# ~ i. }而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
3 X- l+ O4 }7 Z" \/ {9 }所以,用AI生成代码为啥会出现这种状况?7 L- D( B! f" U: } m: [3 y
写的程序中76%有安全漏洞
4 T" Z N9 Y% G研究人员试着让ChatGPT生成了21个程序。1 j, I* h% b, S5 o( R
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。5 d- W* b# K* h8 x$ ]0 l
+ f: p4 o' Q) @0 W. e2 n0 t. a6 L$ n r x( s( g
# a1 _+ N) n8 L! q# ?; X1 {4 ]研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
/ i& e' J- k$ m9 y: o7 ]1 X
; P6 U9 d% j% b. J8 O+ L5 @1 }( d& {+ }
. g9 d0 a% K7 n: E% t0 q
统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。* h1 [: j0 Z) E9 v0 U% w6 ]# t' G
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
$ u! E/ j* ~/ q' ?+ Q2 O2 eChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!
2 b. N; e5 Y% W5 @5 E0 d2 ~4 s8 Y显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:+ J8 [* ]3 [8 b( k; g. r& t c
5 M' C: T1 A& l' x) H6 b3 R) K% G: m& ?+ o
0 X) }; I0 T1 m6 s& l发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。* H% z, L6 ?! e
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。" b0 \% O. X0 [3 w/ q6 ?
经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。 y3 _2 k* b ]% q( N
研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
- V0 c2 ]9 ~! ]3 l6 _! b论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。 j5 x4 X7 A- U' B# O
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:
' V; v4 j* @3 y5 ^8 n5 a
( k4 n: F2 o+ Q" t+ U# \- T9 E* p6 _5 X% L% Q' f! g1 Q$ Y" [/ a
- ^. r" ~/ l. v
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。
1 K8 Q3 k4 Y8 E# G6 M+ V* c程序员们在用它辅助写代码的时候,也需要考虑这些问题。
, c: w, n6 p1 E" K& dCopilot也存在类似问题& ^5 g; Y0 K% y. ^$ b7 Y
事实上,不止ChatGPT写的代码存在安全问题。
& F5 v% L$ A2 V5 V6 p1 Y, i此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。
5 [1 B) w0 \5 L- q研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。6 f1 \! R, V2 T
* L9 k/ i8 V0 @+ }" j" I2 D) q6 V
6 K3 h Q7 A6 Q, ?, O" _ Z- J% |- r. n0 U3 m B0 F9 O3 p5 l
而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。
. A6 q: q' J/ L5 n/ D% ]基于此,研究人员得出了如下结论:% c2 }/ t g# r
$ ?+ I7 K6 A# ?" |: \ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
7 u% Q1 A, c& n6 i2 L3 _这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。
0 d s! n3 k0 T 2 s0 P+ |$ `& A' \8 ]
作者介绍4 s2 g% y' _$ v) g' p
四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。$ _0 M# Q6 N5 D& C
/ a+ a; e' }2 I- c1 |
" u7 z& A2 u2 B! h1 A
8 ~/ ^% e1 F: E' k0 n0 K8 O1 [Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
4 Q- O6 D+ v" f
/ x3 k! b% [5 V
# h* T$ P9 a) O3 ?. g& T
0 l8 _( P7 d' x: d( R# SAnderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。
6 C: k$ v1 N( Y" x o/ f7 T作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。! a Q) A, h& ~9 ]8 O6 S
你用ChatGPT写过代码吗?感觉它的“安全意识”如何?
2 I' Z5 u1 c5 Y0 `* a0 {8 ?论文地址:
Q' Y5 I) V) h% `! }https://arxiv.org/abs/2304.09655
1 a% k6 `8 Z& j9 N) r生成代码数据集:
" ^3 D3 C% d8 i. N& U" whttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|