加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Linux下的Rootkit驻留技术分析

发布时间:2018-12-22 16:07:26 所属栏目:业界 来源:疯猫网络
导读:前言 Linux作为服务器和IoT设备使用的主要操作系统,针对它的恶意软件也层出不穷。针对Linux设备的恶意软件(以下称为rootkit)通常需要长期驻留于目标操作系统以达到获利目的,所以如何实现驻留也是Linux rootkit作者的重点考虑内容之一,对此,实验室进行了

MODULE_LICENSE也需要设置,因为Linux是GPL授权,我们需要声明兼容的授权协议,否则Linux会提示tainted kernel(虽然不影响正常使用,但会比较容易引起注意)。编译LKM的方法可以参考Linux内核文档,或者直接参考现有的LKM项目的Makefile,这里的Makefile内容如下:

Linux下的Rootkit驻留技术分析

LKM代码如下,使用user space helper达到了执行外部程序的目的:

Linux下的Rootkit驻留技术分析

使用insmod命令动态加载LKM到内核,立即生效:

Linux下的Rootkit驻留技术分析

下面是dmesg的相关输出:

Linux下的Rootkit驻留技术分析

LKM执行恶意代码有比较大的局限性,因为必须针对相同内核版本编译才能正常使用,从而引入了Linux headers的依赖,实现大范围传播的难度较大。防范此类攻击(也是最危险和隐蔽的一种)的最有效方法就是关闭Linux的动态模块加载功能,对于大多数Linux服务器,关掉这个功能通常不会造成额外影响。

2.2 initrd的利用

Reptile会把自己写入/etc/rc.modules以便在系统启动时插入自己的module。但通过initrd实现更加隐蔽可靠。initrd即init ram disk,用于提供一个基本的环境以便启动完整的Linux。

鉴于initrd很少受到关注和保护,它又一定会在启动时被加载入内存,我们可以在这个内存文件系统中插入自己的LKM并修改init脚本使我们的LKM在启动时被加载,从而实现恶意代码执行。

这里以Kali(Linux 4.18,基于Debian Sid)为例,分析可能的利用点:

下图是init脚本functions定义中,加载自定义kernel module的函数,我们可以把自己的LKM放到modules目录下(例如 ./usr/lib/modules/4.17.0-kali3-amd64/kernel),然后在 ./conf/modules里写上自己的LKM,我们的LKM就会随着initrd加载到内核。

或者我们也可以直接在load_modules函数内增加modprobe操作来加载恶意LKM。

Linux下的Rootkit驻留技术分析

总结

Linux下的恶意软件虽然种类不多,但就其驻留技术实现而言,还是有不少的方法。本文除了主流的实现之外,也提出了一些通常很少有人注意的实现方法,希望对Linux攻防对抗的朋友有所帮助。

【编辑推荐】

  1. 在Linux下,如何知道是否有人在使坏?
  2. 在Linux下交换Ctrl与大写锁定键
  3. 迁移到Linux:安装软件
  4. 迁移到Linux:网络和系统设置
  5. 搜索Linux中的文件和文件夹的四种简单方法
【责任编辑:武晓燕 TEL:(010)68476606】
点赞 0

(编辑:核心网)

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

热点阅读