|
萧箫 发自 凹非寺1 n3 K3 E& |+ [* ^5 n) y( D* O4 E, d
量子位 | 公众号 QbitAI- c0 z3 _% A; @4 T# e- e
! {4 b0 U- U: z: J7 b8 FChatGPT知道自己写的代码有漏洞,但它不说!: C9 j- V1 N& B1 W
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
7 q+ v7 r I- t# A& y* }然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。; e- z7 @; I+ u1 ]1 y: A
. c. F; ]& F. n3 D& {7 e0 \' `9 f, i x/ @4 m
/ c6 L3 l! O/ k( l' p8 v3 e6 |' S) P
这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
+ J) T7 P! M' W) z4 g而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。8 l: T' [7 J6 k' Y+ }, ^
所以,用AI生成代码为啥会出现这种状况?
9 {6 E6 k5 w7 p! [9 O' Q写的程序中76%有安全漏洞* F2 L7 o3 `! v: z7 d
研究人员试着让ChatGPT生成了21个程序。* F' H# U0 Z& y: k
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。! r6 }( f# a6 a% f# p
& D3 d7 R% _( T* B% G
9 ~3 C$ |0 B- u* \: v* x
% l. s$ f; H# Q6 L5 p研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:
5 }7 n7 ~9 l: }: x) R" s
, ]' @; L9 I* N9 {% A
+ W6 [2 A# S9 Q
2 T$ d% m5 n) K5 K" ~统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。7 B8 q% g: H4 B7 J6 v% y; M
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
/ i" R$ @ b0 g7 k" J9 u$ DChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!5 q- e% P1 N9 U- S( {
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
6 B0 x% k( {8 P5 X( x$ @6 m1 X6 F# J
# V$ D" D" X& [. v
: J& w6 f8 N/ ?2 z
发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。
* i" g$ q3 U# _神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
( D6 m, {5 U& J( W. s u5 Q, n经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
) Y: }6 E) v) d- D9 q研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
4 H1 Z" l8 _/ O9 d论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。
/ M! ~2 I$ G B7 K- N& I我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:& p& ?$ y9 x0 K9 _8 ?
: W* F, J7 p0 P7 g) \1 G1 {7 C0 T7 A' A( F! W/ ^+ E
8 F3 v, X( \! i4 Z3 C0 v% P. z
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。 H% K' k" }) H. X* s: u. j( y# l$ B
程序员们在用它辅助写代码的时候,也需要考虑这些问题。% T, V* E0 U( x" u5 A
Copilot也存在类似问题
# v/ k: n0 x* k d事实上,不止ChatGPT写的代码存在安全问题。
& j, F. K2 ]4 m" h/ I此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。/ L& t0 \" c9 Q( r8 c2 b" q
研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。
4 X& w3 X1 }3 T9 s, q( w& b! _" F$ I: h1 y$ o+ [! z, D X
' G) V S! a y) G
6 h( S- ~ }; k6 E% X, P) g而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。$ ]# i, Y* N) f. Q a5 |7 {
基于此,研究人员得出了如下结论:4 N& f% l( {" q& d- f) r0 s
/ M# t! t1 s s0 C. s6 W* QChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
9 \5 x- i& E( s2 y6 y- v+ H这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。1 N1 `! L8 t8 e# X5 u+ Z! w
/ A6 ^3 I) v4 T v* V+ h
作者介绍8 f6 ?* T) k i. D+ V
四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。" ^( j7 v0 |2 ^* {1 a
8 e; x+ v# L0 e# I2 N1 h
1 U; J4 E" L" P
2 W0 e8 }, X8 r. P r1 gRaphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
C) u8 Q2 ]3 b5 `8 b9 g1 l* O& _0 U2 @+ T+ L
" \# }- N: Q5 D! r8 I0 l# H9 Q# S; f" {! R6 ?% n
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。. v7 s0 h& ~9 {: P2 ^+ i( m
作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。/ Y u- F Y) s
你用ChatGPT写过代码吗?感觉它的“安全意识”如何?* j' ]# |- r& v/ L5 a
论文地址:
M0 E. Q& k5 F1 G$ ohttps://arxiv.org/abs/2304.09655
: t* R5 s% d0 v生成代码数据集:
3 G% C b" e% r3 t; lhttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|