记一次真实的LKM rootkit 与挖矿病毒的结合应急案例
字数 1462 2025-09-04 23:22:12
LKM Rootkit与挖矿病毒结合的应急响应分析
1. 案例背景
在一次应急响应中,发现客户数十台服务器感染挖矿木马,但常规排查无法直接发现异常进程。最终发现攻击者结合使用了LKM(Loadable Kernel Module) rootkit技术隐藏挖矿进程。
2. Rootkit技术分析
2.1 Diamorphine Rootkit
攻击者使用了GitHub开源的Diamorphine项目:
- 项目地址:https://github.com/m0nad/Diamorphine
- 支持内核版本:Linux Kernels 2.6.x/3.x/4.x/5.x/6.x (x86/x86_64和ARM64)
主要功能实现:
kill -63 0:切换rootkit自身的隐藏/显示状态kill -31 pid:隐藏或显示指定PID的进程kill -64:提权功能
2.2 Rootkit使用演示
- 安装后自动隐藏:安装成功后,rootkit模块自动隐藏
- 隐藏用户进程:
kill -31 <PID> # 隐藏指定进程 kill -31 <PID> # 再次执行显示进程 - 显示rootkit相关文件:
kill -63 0
3. 挖矿病毒分析
3.1 病毒特征
- 主进程伪装为
python3,实际为挖矿程序 - 通过rootkit实现进程隐藏
- 配置文件路径:
config.ini
3.2 配置文件解析
wallet=ZEPHYR2smB5JfBY2WKW8GF3eMvCHE5QeLQBKj77jmJtPhSfJWg9L4PPAiv7kpqQXu29NXKD7iK76CZBXDtpf95rWcAxeE1L81GG44
rigName=node17
email=
pool1=xmr-eu1.nanopool.org
noLog=true
autoUpdate=false
sortPools=false
useSSL=true
protocol=JSON-RPC
关键参数:
- wallet:矿工钱包地址,疑似属于Zephyr/XMR区块链
- rigName:矿机标识名称,用于矿池区分设备
- pool1:主矿池地址(xmr-eu1.nanopool.org)
- noLog:禁用日志输出
- useSSL:启用加密通信
3.3 技术实现
- 编程语言:实际使用Golang编写,伪装为Python
- 并发模型:利用Goroutine实现高并发挖矿
- 矿池连接:
- 使用
net.ParseIP解析IP地址 - 通过自定义函数
main_poolconnector_ResolveIP解析域名 - 循环尝试连接所有解析到的IP地址
- 使用
4. 日志清除工具
攻击者使用了mig-logcleaner工具:
- 项目地址:https://github.com/infinite-horizon219/mig-logcleaner-resurrected
- 功能:
- 清除指定用户的日志记录
- 清除所有日志记录
- 清除针对特定主机的日志记录
5. 应急响应步骤
-
初步排查:
- 执行
top命令未发现异常(但CPU使用率显示99%) - 执行
kill -63 0显示隐藏文件 - 执行
lsmod和rmmod x11移除rootkit模块
- 执行
-
进程分析:
- 发现异常的
python3进程 - 确认其为挖矿程序
- 发现异常的
-
样本分析:
- 提取并分析
x11.ko(rootkit模块) - 分析挖矿程序配置文件
- 提取并分析
-
清除措施:
- 终止恶意进程
- 移除rootkit模块
- 清理相关文件
6. 防御建议
-
内核保护:
- 禁用不必要的内核模块加载
- 使用SELinux或AppArmor
- 定期更新内核
-
监控措施:
- 监控
/proc目录异常 - 检查系统调用表完整性
- 使用完整性检查工具如AIDE
- 监控
-
挖矿防护:
- 监控异常CPU使用模式
- 限制对外矿池地址的连接
- 使用网络流量分析工具
-
日志管理:
- 将日志发送到远程服务器
- 设置日志文件不可变属性
- 监控日志清除行为
7. 总结
该攻击案例结合了:
- LKM rootkit技术实现进程隐藏
- 挖矿程序伪装为常见进程
- 日志清除工具消除痕迹
防御此类攻击需要多层次的安全防护,特别关注内核级的安全威胁和隐蔽的挖矿活动。