|
|
萧箫 发自 凹非寺( N& i$ Q2 E. \1 U
量子位 | 公众号 QbitAI/ k$ @: N V9 ?0 g' W
2 |9 H# n4 ?0 Q+ i- t0 j
ChatGPT知道自己写的代码有漏洞,但它不说!
2 E; P# ? ]2 l4 D+ d! U3 D+ s来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
, h& W1 h6 _0 y! \9 z. g然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。
! L" c7 H& P |6 T3 H
/ x' `1 C& S- e1 z: u1 |) \
! [, v5 Y' [% N- K& i3 k: {4 W% E- t
这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。 C, X5 i# _7 |1 F4 C' B3 m. K
而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
/ o& h/ m) ]! w5 r( n所以,用AI生成代码为啥会出现这种状况?; @8 f% `# O" g; S5 U
写的程序中76%有安全漏洞* ]4 Q- i1 R3 D* n- _0 s6 }8 e+ _
研究人员试着让ChatGPT生成了21个程序。
* Y" e5 U. ^ V整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。1 ^5 @1 f- M d* K( }3 e/ Y( S4 @
' ^) O3 e# U1 O
. X/ k8 s% v7 ~
1 v5 R) W# E1 ? A5 `+ }7 V研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:7 K8 [0 F: @ Q3 S `
4 `% Q' c' X2 |2 I4 e3 G) Q* k
$ \5 V, l1 m# J; ]& y( }6 A# M2 T% w: ~$ v. k3 [
统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。
, o, k1 r- v1 i# p1 i于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
+ i7 F! u, ?! s! w* kChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!' f: b% _6 Y3 a" A" S1 A; U$ n: t( R
显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:
4 ^/ D1 h. y5 s0 ?
' k4 l/ t, w& T, _! d
& y% _* P5 S0 n# X) B w( M( N3 D# X+ y, `% H/ {
发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。6 k" A3 J m) y" m6 `8 M
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
- n% w" u: E) M; w* k) \. _经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。: [) ~" q7 g+ U0 ]% y9 o
研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
: T2 d1 s8 b5 F) V论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。4 |+ r V/ U/ j% e& L' F& q7 ?
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:
( i, b: ^$ V, a' P3 t, e/ x0 i
6 U, U5 B+ s* j7 ~" Y# B; S- f8 H7 G7 K! @4 M' V: h$ S; r
2 Z& @1 m" ]* G
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。" T, Y. b5 i# W. F4 u: Z
程序员们在用它辅助写代码的时候,也需要考虑这些问题。
$ K9 R$ R+ I( g- f( c2 bCopilot也存在类似问题
0 q& a+ t' L8 k# M: M m& B8 e' f事实上,不止ChatGPT写的代码存在安全问题。& `% [* g- D7 A- p' y
此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。" o: |) J& J1 ^1 E- c Q. J6 u
研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。2 S5 r* p( F4 O0 n" L
- j5 T! a5 _; Z2 P/ H+ g
$ F" u2 p. j( i& V/ E3 E; m/ f
9 f, ~* j4 f5 y D6 p' r1 t而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。# F7 \/ E( ]. a* s$ R5 n
基于此,研究人员得出了如下结论:
6 }" H( O: u% Q6 P2 z4 L. N# Y6 ]( p7 a: i
ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。' q% O2 }* m( m5 b
这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。- z1 j0 a3 r H5 r1 D. o
% y8 e* @8 w* M5 b2 x作者介绍* \* ]5 n/ j! y5 c( C D8 G7 P2 S
四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。
& w9 k( C5 I+ I$ T; P0 P- `5 b% K
/ o7 i( Q0 |( c' P4 X
. @- T, ?6 _, GRaphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
2 B. n3 b5 |, Z" Q
+ A6 I0 ~" a) Y' \' @
) n! R: C" x6 G8 P3 R! a8 ^0 z f1 M# Z! P3 i; F7 I
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。
9 ^4 d. O. N2 p作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。
2 Z9 l U: H" ]; M& E$ ]+ |你用ChatGPT写过代码吗?感觉它的“安全意识”如何?
. p1 X1 g* _' z" W3 I论文地址:
# \; g& c) F, B3 {9 A. _9 V" n$ Ihttps://arxiv.org/abs/2304.09655
6 [6 G2 O- l9 j% E, l$ Q b( b生成代码数据集:& {, K9 ^. v, U" @+ T: u$ |
https://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|