文章总结: 本文记录LKMrootkit隐藏挖矿进程的应急案例。攻击者利用Diamorphine内核模块通过信号隐藏进程与提权,结合Golang门罗币木马窃取资源。文章剖析了rootkit原理及样本特征,提出移除恶意进程可解除隐藏的排查建议。 综合评分: 88 文章分类: 应急响应,恶意软件,二进制安全
记一次真实的LKM rootkit 与挖矿病毒的结合应急案例
vlan911
只会看监控的实习生
2026年1月3日 00:00 广东
故事背景来源于群友的一次应急响应,客户数十台服务器均中招挖矿木马,服务器占用异常但是排查的时候却没有办法直接查到是什么原因,最后发现是rootkit,当然了有人可能会说这不算,仁者见仁吧
简单复盘:
首先当然是上图,在服务器执行top指令,未发现系统资源占用异常
细心的基友应该已经看见cup最上面是99了,但是看不见是哪个进程,在执行下述指令之后,重新执行top指令,就又看到了占用异常的进程
kill -630lsmod rmmod x11
此时可以看到,python3进程存在异常,此进程很明显是被挂东西了,放到vt里一查,挖矿的无疑了
好胸弟对此有个疑问,就是为什么是kill -63 0,这个东西是从什么地方来的?于是好胸弟把样本拷贝后进行分析
主要关注x11.ko这个文件
从第一张图就发现了,挖矿的大哥直接用的github上开源的东西
https://github.com/m0nad/Diamorphine
从第二张图就看到了实现功能,可以看到,多个分支语句用来实现不同功能,kill -63 实现自身隐藏与显现;kill -31 pid 用来隐藏或显示用户启动的进程;kill -64 是用来提权的
本地试验了一下,根据github的说明,Linux Kernels 2.6.x/3.x/4.x/5.x/6.x (x86/x86_64 and ARM64) 版本均可以使用,根据实验发现,该rootkit小工具需要根据目标设备内核去生成(实验部分使用的是github上面的)
可以看见,安装成功后,rootkit是自动隐藏的,接下来尝试一下隐藏用户进程
执行kill -31 1919后,再次执行ps -aux,已经看不到进程了
再次执行kill -31 1919后,又看到了进程
而后执行kill -63 0发现,恶意的文件可以看见了
由于恶意进程python3本身是没有隐藏能力的,是基于rootkit工具实现隐藏,所以一般直接将他去除掉,隐藏也就直接失效了,这样即使不知道被隐藏的进程pid是什么,也能去掉隐藏效果
并且在本地还发现了攻击者用来日志清除的工具
功能非常多
github项目如下,大家感兴趣自己看看就行
https://github.com/infinite-horizon219/mig-logcleaner-resurrecte
后续python3挖矿木马分析:
为了保证客户环境的稳定性,在将python3 挖矿样本迁移后,在本地进行测试,尝试执行后结果如下:
翻译过来就是:
2025年8月14日 07:31:10:配置文件中不包含任何钱包或它们无效!
2025年8月14日07:31:10:以太坊挖矿的最小配置文件是“wallet=<你的以太坊钱包>
2025年8月14日 07:31:10:以太坊挖矿的最小命令行选项是“-wallet<你的以太坊钱包>”
2025年8月14日 07:31:10:请参阅ReadMe文档以获取详细信息。
而后在客户服务器发现config.ini文件
配置文件解析
-
**wallet** -
作用
:矿工的钱包地址
-
值
:
ZEPHYR2smB5JfBY2WKW8GF3eMvCHE5QeLQBKj77jmJtPhSfJWg9L4PPAiv7kpqQXu29NXKD7iK76CZBXDtpf95rWcAxeE1L81GG44 -
说明
:该地址疑似属于 Zephyr/XMR 区块链
-
**rigName** -
作用
:矿机的标识名称,用于在矿池中区分不同设备
-
值
:
node17 -
说明
:矿池后台可据此监控每台设备的算力、在线状态等
-
**email** -
作用
:可选字段,通常用于接收矿池通知
-
示例值
:空值
-
**pool1** -
作用
:主矿池地址及端口
-
功能开关参数
| | | |
| — | — | — |
| 参数 | 值 | 作用 |
| noLog | true | 禁用日志输出(减少磁盘占用,但不利排查问题)。 |
| autoUpdate | false | 禁用软件自动更新(保持版本稳定)。 |
| sortPools | false | 不自动切换矿池(仅使用 pool1)。 |
| useSSL | true | 启用 SSL/TLS 加密通信(防止算力提交被窃听) |
| protocol | JSON-RPC | 使用 JSON-RPC 协议(主流挖矿通信协议,如以太坊、Zephyr) |
配置文件用途总结
-
所属软件
:基于 RandomX 算法的挖矿软件(如 XMRig、Zephyr 官方矿工),用于挖掘 Monero(XMR)或 Zephyr(ZEPH)等虚拟币
-
核心目标
:
- 将矿机算力定向提交至指定矿池(
pool1)。 - 挖矿收益自动发放至配置的钱包地址(
wallet)。 - 通过加密通信(
useSSL=true)保障数据传输安全。
而后在用户机器上收集到下述文件
样本局部特征
继续分析python3样本,发现矿池地址 xmr-eu1.nanopool.orgxmr-eu2.nanopool.orgxmr-jp1.nanopool.org
该地址具备以太坊门罗币标准特征xmr-euxxx,也从侧面应征,该样本目标为以太坊门罗币
继续分析python3样本,发现该样本存在MinerClient ,并且实际上该工具采用Golang编写
而后在后续发现程序利用golang语言的高并发优势,初始化挖矿配置 → 绑定矿工参数 → 通过Goroutine启动挖矿任务,实现了挖矿的全部流程
而后发现了疑似解析动态矿池地址的域名解析函数
使用github.com/miekg/dns.IsFqdn检查域名是否为完全限定域名
下述模块为矿池连接器(Pool Connector)模块中的连接建立函数,该模块主要作用疑似为: 调用 net_ParseIP直接解析输入地址 、 通过 main_poolconnector_ResolveIP解析域名 、 循环遍历所有解析到的IP地址 、 对每个地址调用 main_poolconnector_doConnect尝试连接
而后在测试python3样本的时候,也能证明此处的应用
暂时就到这吧,样本134mb,分析起来实在是成本高
原文:https://forum.butian.net/share/4491
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:只会看监控的实习生 vlan911《记一次真实的LKM rootkit 与挖矿病毒的结合应急案例》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论