加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

Linux安全系列之启动篇

发布时间:2019-02-21 10:24:25 所属栏目:Windows 来源:不必再等
导读:副标题#e# Linux的自启动项,相对Windows来说简单太多了,在我们应急响应中操作系统的启动方式有哪些这个是一定要知道的,不然后门也清除不干净

但是我们还要做一件事,就是我们需要把我们ko入口地址修改成我们的rootkit函数的地址,我们可以看一下,入口init_module和rootkit()的地址现在分别是多少:

  1. objdump -t cdrom_new.ko|grep init 

Linux安全系列之启动篇

可以看到是不一样的,我们的地址是0000000000000011

所以我们要先把init_module的地址修改为0000000000000011

Linux安全系列之启动篇

修改工具可以加入知识星球后获取(加入方式见文章末尾)

好了,现在我们可以把这个cdrom_new.ko覆盖掉原来test目录下的cdrom.ko

然后把initrd重新打包,覆盖掉原本的/boot/initrd.img-4.6.0-kali1-amd64

Linux安全系列之启动篇

然后重启

执行dmesg|grep Rootkit 我们可以看到如下:

Linux安全系列之启动篇

当然kernel也可以做手脚,有兴趣的同学可以试试。

我们怎么检查它是否被篡改了呢?简单的检查下可以用,stat 看一下时间对不对,当然要看change time,其他时间没有用。

stat /boot/initrd-2.6.32-431.el6.x86_64.img

Linux安全系列之启动篇

二.Inittab

内核加载完毕,控制权交给了初始化程序init,init会根据/etc/inittab中定义的系统运行级别等动作来进行脚本执行。所以这个配置文件inittab成了第二个启动点。

比如:大名鼎鼎的shv5及其变种ddrk和mafix都是这种启动方式,他们篡改后的inittab截图:

Linux安全系列之启动篇

设定了2345运行级别时都会执行一次/usr/sbin/ttyload(后门程序)

三.Sysinit

init第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,这个脚本大概的作用是如激活udev和selinux,装载硬盘映射,挂载其他文件系统等。修改它当然可以实现自启动,另外它还提供了两个模块加载的地方,实现模块自启动,如下图:

Linux安全系列之启动篇

四.服务

init会根据定义的启动级别去执行相应目录下的脚本,在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本.

如:Run level 0– /etc/rc.d/rc0.d/

这些目录下的脚本只有K*和S*开头的文件,K开头的文件为开机需要执行关闭的服务,S开头的文件为开机需要执行开启的服务。

于是这些脚本成了高危项,尤其是S开头的脚本。哪些服务是否开启关闭可以用chkconfig –list查看,但我们最怕的还是这些脚本被篡改了。

我们怎么检查服务是否被篡改了呢?

可以用ctime及其家族成员newerct来检查,ctime是一个非常重要的参数,它代表了变更时间,一切变更,包括状态属性权限等,它是最可靠的检查方式,跟ctime异曲同工的还有newerct,当然stat命令也可看一切,只是只能查看单一文件。

当然执行stat find等命令时最好先用rpm –Vf看一下,或者用自己的命令工具包。

如下图:

Linux安全系列之启动篇

我们执行ls –larth 显示最后一个改动的服务是mysqld

Linux安全系列之启动篇

但是我们执行命令find . –ctime-100显示最后一个被更改的服务不是mysqld

Linux安全系列之启动篇

如上图:functions服务在100天内被篡改了,我们继续cat看看里面是什么内容

Linux安全系列之启动篇

可以看到在第二行的两个注释中间被人加了这么一行代码,就是服务启动的时候执行/var/tmp/rootkit并且不输出标准输出和错误输出。

正常情况下,都是放在最前面的那些注释行里(尤其是自动的病毒),也有放最后的,这个可不一定,特征基本都是xxx >/dev/null,这样的形式,为了不显示启动输出。

注意,这里要先cd /etc/init.d,因为它都是软链接,所以一定要先进入这个目录,而不能直接使用find /etc/init.d -ctime

90%的linux后门是通过这种方式启动的,如果学会此招,可发现90%的后门。

五.rc.loacl

init根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。

这个/etc/rc.local脚本我们很多管理员启动应用服务都喜欢放这里面,不多说。

六.模块

上面介绍sysinit的时候说了,这个脚本提供了两个地方可以自启动模块,分别是

  1. /etc/rc.modules和/etc/sysconfig/modules/*.modules 

上面这是redhat/centos系列的

Debian/Ubuntu/kali系列的是这个文件 /etc/modules

除此之外,模块的启动大多数情况下,要依赖于服务启动和其他启动脚本,这是不同于windows的,甚至2.6版本模块的启动地位比起2.4也大大下降,大多数情况下模块的地位居然没有服务优先级别高。

当然了,系统关键模块的地位还是高的,所以这些系统关键模块是否被替换,也是一个检查点,依然可用ctime检查。

另外,centos系列下还存在一种在线向initrd内部更新驱动模块的方法,可在/etc/initramfs-tools/modules文件中添加相应模块的模块名及其参数,然后用update-initramfs-u -k命令进行更新。

lsmod显示的是正在运行的模块,modprobe –l显示的是所有可加载的模块(不一定在运行)

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!