当前位置: 华文问答 > 数码

山衫惠子说智子没有发现希恩斯改动了思想钢印程序代码中的一个正负号,这可能吗?

2020-02-19数码

一个现实的例子。

近期,一个恶意用户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这次恶意提交中存在问题的一个diff。

其中红色的就是之前的代码,绿色的就是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,都不能看出一个「.」引起的安全问题,三体中的智子,可能也不可以。毕竟原著中,智子并没有体现超高的人工智能特性。

参考:

  • 知名压缩软件 xz 被发现有后门,影响有多大?如何应对?