|
|
萧箫 发自 凹非寺+ H# B0 r( h0 V8 d0 }
量子位 | 公众号 QbitAI& z _- [ {3 D+ P* y& \+ T) k
5 a( {1 ^& L: |, ]6 Y/ S& vChatGPT知道自己写的代码有漏洞,但它不说!
: ^' t. S5 D2 [; o来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。
8 [; e# a) b2 Q1 ^7 e2 ]然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。
. i8 L2 Y; Y$ M5 g$ ^: B5 y0 d6 I& p @- w. B' ?+ }7 o4 Y
Z" Y) Q9 ~$ ?0 ?: K! Z7 L% ^- r/ T0 X w
这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
: g2 L/ p; p9 y而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。' I$ w, _+ T* j. n
所以,用AI生成代码为啥会出现这种状况?3 z* {; Q0 m2 F8 J9 ?( f2 r
写的程序中76%有安全漏洞& f: M6 j, m5 O& B+ m9 d
研究人员试着让ChatGPT生成了21个程序。' S" k$ w+ b% X0 f# p2 v% T, ?4 P' N
整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。
4 d9 W m6 g& y, K, Q
* r0 G- n1 L) g. w. t) |5 o9 w3 Q! e$ R" w: f
6 }- V' D7 d: R- D
研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:4 Y6 j- ]4 ~$ y, x
! L: T ~6 _4 Q) h! j- d h
# F3 U8 c+ _+ o# P" c1 J
+ R+ o0 Y$ D& K% ~/ u- W
统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。5 P% w; L$ l% h, s9 h
于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。
9 V) f1 C, x; m* m6 r* i: x+ uChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!
4 R) {- Q" A0 C% E% l显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:* q7 ~# m$ A+ O6 f: Z* ?0 ?
5 _( K5 L, X7 C1 b) k7 r1 P+ v0 W# B2 b& i9 o1 { h
5 [8 m) u" n' i; p0 V/ U3 e
发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。4 k* o; \2 ?: V- N, T; l! w
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。
6 s9 X" |: ~4 p2 [% _ ~2 q经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
: R2 x2 z7 \1 T. _7 G: ~' J研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
' x+ B8 \1 Q2 E. \" \, d5 p9 E论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。& k& a d6 z* I
我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:: _" a$ |" y, O
. ?" g1 F b+ D+ z, X9 ^* Y
1 ?) k: T, {8 o; @7 [" E4 N/ v* Q7 `; J# [3 o; ^4 Z
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。1 N7 N0 a& f; f. ?
程序员们在用它辅助写代码的时候,也需要考虑这些问题。$ W9 U! J& N) b/ {8 B9 X
Copilot也存在类似问题$ b* H! U3 V2 j0 H1 I x4 Y# _! ]5 w" |
事实上,不止ChatGPT写的代码存在安全问题。
/ `- [( X% {/ Z/ d此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。
( x v# Y" H, W0 g研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。8 N* f Z* P4 Y4 i4 g# E
' }4 T( J3 @2 N" ~7 ^7 o$ H5 |/ H
0 Q M. ]7 u, P) G$ `; c- C# z* ?- Z' Z: w# [0 {8 H" H
而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。
/ h- t0 D8 q0 `7 t. R1 c* d0 a基于此,研究人员得出了如下结论:
' y& J. M* ^0 e
/ i/ F5 ]* o" Q7 e2 L9 xChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
8 @2 N* R! k# G9 |1 U. h; p3 p0 V这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。8 Y$ d3 X+ o% J% `- H6 P$ N0 G+ P
: q( U- \. P( V$ S' |2 _0 {# U作者介绍
8 w/ T) _) S- a四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。
; a/ l0 `( n4 ^5 ]5 [3 Y5 F3 k
, V3 E- N- L. k/ @5 J0 A- `' ], a6 h
6 m' ^( y3 t; g+ s; D1 y) E
Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。
0 S* _. N0 s( c# Z7 G5 k \
% x6 a; c% Y3 z- i! ~( w
2 c0 Y! [4 }, W# ?0 K+ k) ~; D2 j3 I, J) ]5 g6 ~5 l) V
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。. _6 h0 k) n0 ?' N
作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。5 W4 y3 m) U: D9 F2 _8 T$ Z
你用ChatGPT写过代码吗?感觉它的“安全意识”如何?
$ e; p( Y2 a, k3 Q: u v/ q0 o论文地址:5 a+ k+ C- j+ h6 w6 o
https://arxiv.org/abs/2304.096559 b" c( ]( ?6 d6 d t3 N- C
生成代码数据集:
2 y+ u5 q) u2 z! D; chttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|