Linux安全系列之启动篇
但是我们还要做一件事,就是我们需要把我们ko入口地址修改成我们的rootkit函数的地址,我们可以看一下,入口init_module和rootkit()的地址现在分别是多少:
可以看到是不一样的,我们的地址是0000000000000011 所以我们要先把init_module的地址修改为0000000000000011 修改工具可以加入知识星球后获取(加入方式见文章末尾) 好了,现在我们可以把这个cdrom_new.ko覆盖掉原来test目录下的cdrom.ko 然后把initrd重新打包,覆盖掉原本的/boot/initrd.img-4.6.0-kali1-amd64 然后重启 执行dmesg|grep Rootkit 我们可以看到如下: 当然kernel也可以做手脚,有兴趣的同学可以试试。 我们怎么检查它是否被篡改了呢?简单的检查下可以用,stat 看一下时间对不对,当然要看change time,其他时间没有用。 stat /boot/initrd-2.6.32-431.el6.x86_64.img 二.Inittab 内核加载完毕,控制权交给了初始化程序init,init会根据/etc/inittab中定义的系统运行级别等动作来进行脚本执行。所以这个配置文件inittab成了第二个启动点。 比如:大名鼎鼎的shv5及其变种ddrk和mafix都是这种启动方式,他们篡改后的inittab截图: 设定了2345运行级别时都会执行一次/usr/sbin/ttyload(后门程序) 三.Sysinit init第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,这个脚本大概的作用是如激活udev和selinux,装载硬盘映射,挂载其他文件系统等。修改它当然可以实现自启动,另外它还提供了两个模块加载的地方,实现模块自启动,如下图: 四.服务 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看一下,或者用自己的命令工具包。 如下图: 我们执行ls –larth 显示最后一个改动的服务是mysqld 但是我们执行命令find . –ctime-100显示最后一个被更改的服务不是mysqld 如上图:functions服务在100天内被篡改了,我们继续cat看看里面是什么内容 可以看到在第二行的两个注释中间被人加了这么一行代码,就是服务启动的时候执行/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的时候说了,这个脚本提供了两个地方可以自启动模块,分别是
上面这是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显示的是所有可加载的模块(不一定在运行) (编辑:源码门户网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |