Q4n's lkm rootkit
Linux q4n 5.8.0-48-generic #54~20.04.1-Ubuntu SMP Sat Mar 20 13:40:25 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
只在当前版本测试, 内核不同版本间api有改动, hook的函数和方式有所改变
make && make install
sudo python3 client.py
依赖scapy
- ### 权限提升
通过hook SYS_open进行后门操作
open(cmd, cmd_length, 0xdeadbeef)
- ### 隐藏文件和目录
隐藏/恢复
内容隐藏, 目录结构隐藏
两种实现:
vfs hook
hook syscall
这里用的是hook vfs
pid隐藏就是隐藏 /proc中内容
还需要实现隐藏 /sys 和 /
- ### 隐藏进程
隐藏/恢复
通过hide /proc/pid 来隐藏
- ### 隐藏自己
隐藏/恢复
-
lsmod
-
/sys/module/qrk
-
/proc/kallsym
/var/log/syslog.1, 这个应该是crash后才有的, 不需要理会
/var/log/kern.log 需要删除
未解决(暂时的想法是将模块重命名 《瞒天过海》):
/sys/kernel/tracing/available_filter_functions
/sys/kernel/debug/kprobes/blacklist
/sys/kernel/debug/tracing/available_filter_functions
/lib/modules/5.8.0-48-generic/modules.dep
mokutil 驱动签名校验, 但是这里需要重启才能生效
- ### 卸载保护
隐藏/恢复
- ### 代码混淆
汇编层面混淆, 以后再写, 可能只能实现x86的, x64的暂时没有发现
-
### 开机启动
/lib/modules/$(KERNEL)/kernel/drivers/$(DRIVER)
放入.ko/etc/modules-load.d/$(DRIVER).conf
写入 qrk- 执行depmod
-
### icmp(/tcp/udp)后门
icmp 命令执行(未加密)
netfilter hook实现
- ### 隐藏socket连接
隐藏/恢复 通信端口, 是针对双方的
新版本中引入
asmlinkage long (*sys_getdents)(struct pt_regs *regs);
lkm-rootkit
reptile
rkduck
rootkit
suterusu