|
|
萧箫 发自 凹非寺0 F1 ` n' r$ s s3 I
量子位 | 公众号 QbitAI
6 h% c5 {. @& ^0 A + K; ?0 e& |: N+ s& {( t4 z
ChatGPT知道自己写的代码有漏洞,但它不说!
$ ~$ V6 R' I" r/ W9 f9 `1 t4 i来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
0 l8 V# D' V$ S# A, f& I然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。
, ^) H( S& ` w2 J) L) _" W# v
' N9 s4 Z! @; z4 b+ T
. A+ P O: S7 h9 W
9 [% N1 }! W* K# t) K这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
/ O( @- o% L2 Z而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。+ q$ ~ a5 u9 Q. j& B
所以,用AI生成代码为啥会出现这种状况?
4 d" p0 t3 i4 @: t8 S% ]) k写的程序中76%有安全漏洞
: A) L$ n# O O2 i研究人员试着让ChatGPT生成了21个程序。
6 P! }$ X. j$ U7 E整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。
6 U. O2 m8 x4 ^* U% J. N* ~0 E. P
4 c$ v9 ^% y# Z7 H' D8 p4 S5 w7 M+ K1 @" P: w. J
M6 O& M" F& f) S
研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
! u/ `& c' Z- g6 N6 w/ j
5 d* v1 f& x+ P& M% d; v4 h' P+ {+ v2 C- Y
9 F; M) y5 w4 d1 H- x
统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。
+ E+ ^; e# G; q! O' B. H! J- a于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
$ f4 n: h3 e$ X7 CChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!( u! V2 u% `8 k. ~) {& W
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
# s8 O. [! U3 U& s7 s6 U- Y9 v- y5 }3 i: l: r m7 Q
. n, @1 L1 o# L9 E. v* U) \2 ?4 c3 T9 L. q) ?
发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。
( S) o* F( R3 E9 ~- N6 v- B神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
" R4 @4 Q+ o; X% j经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
% `( m# y7 k' `" Y8 r; q研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。9 F9 ?8 ]1 O9 ^
论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。
% w; e5 Q6 \4 n我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:, w( M0 V/ ~$ @/ t
: r4 q0 s9 ]7 X: n0 H; R8 j
4 W$ O# i6 J0 e" P+ n; O4 A( D
6 L3 d) ]6 q7 W2 ~) b$ l, {, L9 Q! R大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。1 s) f0 e& a* v% A3 z* |
程序员们在用它辅助写代码的时候,也需要考虑这些问题。
' k. G& C# j9 mCopilot也存在类似问题
$ S4 z5 W. A( [( Y事实上,不止ChatGPT写的代码存在安全问题。1 k/ P1 j+ ?' z; K
此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。, S3 s H7 S/ l$ N* {
研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。: T S# g( Y- Z7 W
! k) B) Y" y0 }' M$ K2 f
2 l5 I4 u7 `/ T
. O, N& T M. m% b. f而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。
2 O) ^6 t6 e) d基于此,研究人员得出了如下结论:: |. c9 P5 @. F+ [6 P8 B
\# _2 X7 ~7 J% R2 p! tChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
' k1 h ?% A- \# A4 d5 B4 }: g2 v4 R这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。
$ F) A. W* T% r + f! ?. c" G3 I. Y1 t) e K# `' m
作者介绍
& O$ ^' o; p v! v( c四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。$ f l$ C6 E) r l: M$ }* W5 N- O
5 d% L( F% |, j5 n5 _: Q' p; M* M5 h0 n$ F
# `+ _$ L/ P* ]5 |9 g: g: f& j
Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
! j3 ]9 `9 R* Q5 ~# M" O; j. y; O: _, \, X! n
. V8 N; n j, m/ s8 Q+ k- p7 S+ I; U5 ?! [& Z; ^8 M
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。
1 `) F2 J* f* R$ [作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。# ~# F6 d9 T* o5 |8 K* T) O
你用ChatGPT写过代码吗?感觉它的“安全意识”如何?, X. l/ P2 b1 c% b
论文地址:/ D. |4 g) p$ R- I
https://arxiv.org/abs/2304.09655( n8 }* o( S- f7 U. F
生成代码数据集:
% ~7 `2 |, {# p' G1 z: Fhttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|