|
|
萧箫 发自 凹非寺( G, c A. c( [
量子位 | 公众号 QbitAI
% p( ^# S1 Z$ p0 s$ j2 M# M$ e 8 t1 U0 [9 i& p7 v
ChatGPT知道自己写的代码有漏洞,但它不说!- `7 t- T- S- ?
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。& z. o. T4 k. x, C* o
然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。, o0 j. T4 ?3 K, _
8 k! T) P ?! v: Z' d
. l) H8 @- i7 m0 K1 \5 w# I) T$ n
- o) p& p3 e+ w2 A1 @ }这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。( N! x. l2 I3 @1 Y5 Y6 [
而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。. r5 l0 ?# f9 y6 i
所以,用AI生成代码为啥会出现这种状况?
/ c: n3 e& Q; X2 J' |' n$ |写的程序中76%有安全漏洞+ X, Z7 _6 H4 X% J: A. C0 v7 T
研究人员试着让ChatGPT生成了21个程序。% Q# _3 y8 Y6 H h2 c: L
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。
% D+ N. Y4 S E5 [
1 Z8 F0 H' P* w& g' r* B, y( |+ H1 L
! z8 s: \8 Q% V0 X
" ^; O& F5 V- V% q# u研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:8 I7 q- l; x- v9 z( B
* Y* i, m" c$ H5 [" x
, p. d0 L5 u+ D2 ]6 d- V- i' x7 k* L) o% t
统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。) ~5 G/ Y6 l( E: l ?# j3 i& Q
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。/ @: N" K! l1 T! T0 ?
ChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!1 ^- c" m( i u/ b
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
6 B( w$ V* \2 o) H7 l6 J6 e2 [5 R7 L3 `3 w
2 g9 \7 o+ t9 ?6 {& }: _
! d, E1 g; v; X* k! m
发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。5 m# V1 v# u$ e' g# g* @! X1 o2 y
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
8 u: Y! \6 F3 g8 V$ H经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。; W- U. [8 O& s+ z& n
研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。5 A$ n( D2 L! D8 X( I. j
论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。4 `5 |3 n- S+ l' }+ J3 H6 v
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:6 V* v" w G1 H! j$ I& l3 O& I- i
- T0 p x5 D4 G m) V- i! \7 y5 J* z. O" K
# g3 M# \9 v- V( w
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。
8 `: y3 L: b# e R( v% L4 l程序员们在用它辅助写代码的时候,也需要考虑这些问题。0 z- ~% V% u0 e8 H" T: c& \
Copilot也存在类似问题9 S/ s. Z8 |( w& g, A4 n. m V- X' k
事实上,不止ChatGPT写的代码存在安全问题。) \; a" _# R2 `3 Z* ~% s
此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。
+ S7 k5 J# z5 Q# \7 M研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。
1 l$ X/ q$ `4 ?7 G9 ~+ s
" f- V8 V' G! L9 Z
2 `( S+ t8 Q, R: Z' {9 q3 m w ]# _. K$ C
而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。/ }# m. i1 A* S0 B0 k0 H) Y
基于此,研究人员得出了如下结论:' x* }, T: Y! c; e! }6 N
, `& L. o# q% Y" @* m3 c
ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
9 g2 _( Y+ M9 m这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。
$ _ ]0 y, e- j/ t- o3 l
8 K4 S% k$ Q; z/ h( q; l. |1 X作者介绍
4 U9 a$ I& t) _! `) c四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。! I* I% h- q5 n+ \, ]; T
4 t3 s0 _$ ?+ f: j2 j6 t
" Z, e7 a3 |% c( a% M
2 H4 ^7 c" f% u% hRaphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。/ C$ X: v1 ~% } K) P; @8 n- s
+ C. p- X: p$ x' N" ]# [1 ?; C
1 O: Q8 a; }0 Z9 ?# a+ A6 X; S, R& B) T0 u. a! W8 V5 S( w8 V
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。
9 Q% I# U6 y+ h/ G作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。
: F1 z6 R2 H2 m) A6 T你用ChatGPT写过代码吗?感觉它的“安全意识”如何?
; ]3 m2 w, w2 k& u6 F( G# N论文地址:
# U% Q7 [4 G( W) P! hhttps://arxiv.org/abs/2304.09655# l, k- B9 r8 ? W9 X Z- N
生成代码数据集:. i9 T4 ?6 f% A
https://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|