【长见识】以下内容告诉我们可执行文件的hash值改变不能说明系统被入侵,有可能是prelink搞的鬼~
声明:以下内容出自 李库 之手。
今天下午接到安全部门的通知说,tpsc-task01服务器的sshd程序文件md5校验值发生变化,与先前的不一致,怀疑sshd程序被篡改,系统被入侵。
我立即检查这台服务器,sshd进程的启动时间是7月31日,也就是这台服务器安装的日期。
然后我又比较了其他机器sshd文件的md5校验值,发现这些服务器sshd程序的md5校验值都不一样,难道这些服务器的sshd文件都被篡改了不成?
Exodus集群29台服务器sshd程序md5校验值:
我们目前使用的sshd版本4.7-p1-1,线上服务器使用的是同一个软件包(相同架构),理论上,相同架构服务器上sshd文件大小和md5
校验值应该都一致,但是检查的结果却是文件大小一致,md5校验值不一致。
接下来,我又使用vim和objdump工具分析了exodus-web2201与exodus-web2202服务器上的sshd文件
下面进行反编译一下。
通过vim中存在差异的部分以及ELF的section头中的偏移量可以发现,sshd文件相互不同的地方出现在ELF文件的一下3个
Section中:.gnu.liblist,.gnu.conflict,.got.plt。也就是说,.text 和.data等大多数section都是相同的,应该是什么东西修改了
sshd二进制文件的这3个section头,才导致了md5校验值不一致。这个时候,我想起linux系统中有一个prelink程序似乎
与这个有关,用今天新安装的服务器做实验:
运行/etc/cron.daily/prelink任务以前:
运行/etc/cron.daily/prelink任务以后:
可以看出,运行prelink后,sshd文件变大了,当然md5校验值也不同于rpm包中sshd文件的md5校验值。
使用prelink命令查看二进制文件最初的MD5校验值:
由上图可以看出,exodus集群29台服务器sshd文件最初的MD5校验值一致,他们来自同一个软件包,sshd文件其实没有被篡改。
关于prelink的更多信息:
(1)http://en.wikipedia.org/wiki/Prelink
(2)http://people.redhat.com/jakub/prelink.pdf
(3)man prelink
Prelink是Red Hat 开发者 Jakub Jelinek 所设计的工具,正如其名字所示,Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销, 是各种Linux架构上 用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具