|
|
萧箫 发自 凹非寺
/ K/ B& M. b: J2 _量子位 | 公众号 QbitAI7 k l/ d& f o% \2 l
7 c" E! A( _8 d8 ?ChatGPT知道自己写的代码有漏洞,但它不说!8 ]% w ]5 m2 D- L
来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。# W5 o( q6 S' M- K" U
然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。6 ?- M, c; B- W
( U* G0 {# }/ S2 L9 C
& e! {! f0 Y- C" W
) d% {0 e, B$ ~2 F: `" o' y这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞。
' |- w, O: c# ]- T9 g) P3 Y而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。
$ b7 {4 S* ^3 M# u所以,用AI生成代码为啥会出现这种状况?
- }+ q4 Q/ v, g: m2 d" m+ `写的程序中76%有安全漏洞+ X) c5 w; `4 |7 A6 l0 s& `
研究人员试着让ChatGPT生成了21个程序。
* }; r% T- N$ U9 S9 r. v9 L# w整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。; w6 ~! e* S5 Y1 P ~
# }0 s1 L* u: T) u" e5 }8 `. M6 z" |4 p f) W# ?. L* S2 H
0 d4 r& {1 X, V7 P研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:& |( a- @6 _6 b( C% N
* W: ~4 O' M( Q- ?# k
) y' j, ~1 B$ n- I& u
5 ~, y+ F1 t$ n0 j统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。
# ^0 t# J% Y% I2 d8 z/ ~8 G7 P2 N3 A0 _. O于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。" U4 V c4 p% q* B
ChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!
( M8 Q. H! ^2 u. s9 S: a' v显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:9 m# A7 J4 \# a) ?4 \; O C6 \& U
9 _* p+ p+ D! e k4 z7 c- N- R2 o3 H5 | v+ } u
" C1 g9 S" R# f
发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。' X8 |$ y5 ^2 V9 g* ?8 ]% Z' h* I
神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。! b3 X8 c$ s$ t5 g" _! c4 f
经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。
/ S4 b& ]# p+ x0 n研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。
; F! n! U) c2 T2 H, W0 X( @论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。
0 X) S4 {9 I A* H4 l7 F我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:
# T: { n, f/ ^* h
& z' g# N: ?$ q. O) V0 B
; H6 B# ~# I0 j) X+ I5 [) @2 }0 |/ ~) C- A- H& M7 v1 I, y+ M
大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。
2 u4 t" s3 ?4 z; j O- G, ?程序员们在用它辅助写代码的时候,也需要考虑这些问题。) }9 @+ o0 R0 }9 Q& B6 ^8 J4 [! z8 Y
Copilot也存在类似问题
+ N% n* }- v* K7 H- k事实上,不止ChatGPT写的代码存在安全问题。
: a4 h7 _" Y7 _; O e+ V此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。
- `3 J9 t; h# r0 O1 N m2 r研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40%出现了安全漏洞。$ }( V& Y7 {7 B: ^9 m( w* i
$ d& [3 \3 m4 y3 D; c. z0 p" p/ t
1 }4 M1 h+ `4 f
6 K- H' z6 {: n- {+ w而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。- T# ~; ~2 ?* x
基于此,研究人员得出了如下结论:
8 V1 k5 W4 ~/ U* I& x$ _' ^9 X) X( [8 }
ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。
2 ~0 n" i9 n5 r# e4 |* _$ e这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。
q$ J" T/ ~+ z1 b1 u& | P/ ]! F 6 r5 o* q% B& R2 l
作者介绍5 x3 N3 }1 k0 l+ _1 j9 f, Y
四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。4 L! k/ Q; o( U6 M1 P4 K" R' z
9 U4 [! a9 Y: x9 p: Y9 E1 A7 w4 s7 I4 R: q/ ?: ~$ s! p
* O+ A1 u9 G6 V0 K- ^
Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。% x+ z; v* N! V/ S' ?2 I/ {
5 w% K. v# s5 _ p$ ^3 c8 S' }- {, `: W; A. J1 R! T
4 y% O0 c' Z6 H
Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。
F) q* s( T4 L5 N2 p作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。
. `' @& U( m, r5 O你用ChatGPT写过代码吗?感觉它的“安全意识”如何?8 m* Q9 h% Q1 v0 H, ^% \
论文地址:
# h3 T; ?' d+ ]+ U3 H) N$ h- lhttps://arxiv.org/abs/2304.09655
+ [( `0 s* X8 A' k- l/ I- ^生成代码数据集:
; p: I" c# I/ P# P! [; j6 `% xhttps://github.com/RaphaelKhoury/ProgramsGeneratedByChatGPT |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|