一个现实的例子。
近期,一个恶意用户Jia Tan(下称JiaT),尝试在xz-utils中开后门,具体的过程可以参考知乎问题「 知名压缩软件 xz 被发现有后门,影响有多大?如何应对? 」下的回答,这里只关注这个大瓜下的一个小「细节」。
背景知识:
landlock,根据 Landlock: unprivileged access control — The Linux Kernel documentation ,
Because Landlock is a stackable LSM (LSM = Linux Security Modules,答主注), it makes possible to create safe security sandboxes as new security layers in addition to the existing system-wide access-controls. This kind of sandbox is expected to help mitigate the security impact of bugs or unexpected/malicious behaviors in user space applications. Landlock empowers any process, including unprivileged ones, to securely restrict themselves.关乎着沙箱(sandbox)的安全。
而JiaT的一次恶意代码提交 git.tukaani.org - xz.git/commitdiff (需要魔法),是这样的:
其中红色的就是之前的代码,绿色的就是JiaT在这次提交中新增的代码。
如果你是审查这段代码的人,你能发现这段代码的问题吗?
事实上,引入个提交之后,LANDLOCK永远不会激活。它直接影响了sandbox的安全性。
现在,你已经知道了这个提交有问题,你能看出来JiaT是怎么做到的吗?
非常简单,在这段代码中,check_c_source_compiles语句里,包含了一个C代码。JiaT的提交,表面上看起来是,如果这个C代码编译通过,就让HAVE_LINUX_LANDLOCK变量为true,否则为false。之后根据HAVE_LINUX_LANDLOCK的正负控制SANDBOX LANDLOCK检查。
但是,问题就出在,这个C代码根本不可能编译通过,因为一个点。
这个点,并不符合C语言的语法,导致这段C代码编译一定失败,进而导致HAVE_LINUX_LANDLOCK一定为false,所以SANDBOX LANDLOCK检查一定失效,进而,(可能)导致sandbox的安全问题。
我相信,即使是最优秀的reviewer,也不一定能肉眼看出这里有问题。我甚至把这个提交给ChatGPT3.5看了下,让它分析这里的问题,它看不出来,在我的引导下,虽然它说出了上面分析的逻辑,但是也不能说清楚这块代码为什么引入安全问题。如果你手头有别的生成式AI大模型工具,你可以试试,看看它们能不能看出这个问题。
现在回到题主的问题。这种极小代码导致巨大的差异不被发现,我认为是可能的。
即使现在还算「智能」的生成式AI大模型之一ChatGPT3.5,都不能看出一个「.」引起的安全问题,三体中的智子,可能也不可以。毕竟原著中,智子并没有体现超高的人工智能特性。
参考: