记一次挖矿病毒的溯源
字数 886 2025-08-10 08:28:24
Linux挖矿病毒溯源与清理实战指南
1. 挖矿病毒初步识别
症状表现
- Web服务异常卡顿
- CPU占用率高达99%
- 网络连接数较少(区别于DDoS攻击)
- 通过
top命令查看无明显高占用进程(可能存在进程隐藏)
2. 排查隐藏进程
/proc目录分析
/proc是虚拟文件系统,包含系统内核和运行进程信息:
- 数字命名子目录代表运行中的进程
- 包含进程状态、内存使用、打开文件列表等信息
Python检测脚本
import os
def get_max_pid():
pid_list = [int(pid) for pid in os.listdir('/proc') if pid.isdigit()]
return str(max(pid_list))
def get_existing_process_ids(max_pid):
process_ids = []
for pid in range(1, int(max_pid) + 1):
if os.path.exists('/proc/' + str(pid)):
process_ids.append(str(pid))
return process_ids
def get_ps_aux_process_ids():
process_ids = []
output = os.popen('ps aux').read()
lines = output.split('\n')
for line in lines[1:]:
if line.strip():
pid = line.split()[1]
process_ids.append(pid)
return process_ids
max_pid = get_max_pid()
existing_process_ids = get_existing_process_ids(max_pid)
ps_aux_process_ids = get_ps_aux_process_ids()
for pid in existing_process_ids:
if pid not in ps_aux_process_ids:
print('Hidden PID {}'.format(pid))
注意:可能检测到大量僵尸进程,需进一步筛选
3. 网络连接分析
关键命令
netstat -antp
常见挖矿特征
- 连接可疑IP(如案例中的47.130.146.28)
- 关联域名(如log.softgoldinformation.com)
- 常见矿池关联:moneroocean、xmrig等
临时处置措施
- 限制服务器只允许访问国内IP
- 阻断与矿池的连接可降低CPU占用
4. 入侵途径分析
常见入口点
- Redis未设置密码且暴露在公网
- 其他常见漏洞:弱口令、未修复的漏洞等
Redis安全检查
ps aux | grep redis
# 尝试空密码连接
redis-cli -h <IP>
5. 清理与补救措施
关键检查点
- 定时任务检查
cat /etc/crontab
- 临时目录检查
ls -la /tmp
ls -la /var/tmp
- 用户账户检查
cat /etc/passwd
ls -la /root/.ssh/
- 全盘扫描
clamscan -r /
清理脚本示例
#!/bin/sh
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin
while [ 1 ]
do
killall /tmp/*
killall /var/tmp/*
# 清理恶意定时任务
crontab -l | sed '/195.3.146.118/d' | crontab -
crontab -l | sed '/cf.sh/d' | crontab -
crontab -l | sed '/xms/d' | crontab -
crontab -l | sed '/kwork.sh/d' | crontab -
crontab -l | sed '/cyberium/d' | crontab -
crontab -l | sed '/newdat/d' | crontab -
# 清理常见挖矿进程
ps aux | grep -v grep | grep 'javaupDates' | awk '{print $2}' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'givemexyz' | awk '{print $2}' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'dbused' | awk '{print $2}' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'kdevtmpfsi' | awk '{print $2}' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'kinsing' | awk '{print $2}' | xargs -I % kill -9 %
# 清理下载工具进程
ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'wget' | awk '{print $2}' | xargs -I % kill -9 %
ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'curl' | awk '{print $2}' | xargs -I % kill -9 %
ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'urlopen' | awk '{print $2}' | xargs -I % kill -9 %
# 其他常见挖矿进程
pgrep JavaUpdate | xargs -I % kill -9 %
pgrep kinsing | xargs -I % kill -9 %
pgrep donate | xargs -I % kill -9 %
pgrep kdevtmpfsi | xargs -I % kill -9 %
pgrep trace | xargs -I % kill -9 %
pgrep sysupdate | xargs -I % kill -9 %
pgrep mysqlserver | xargs -I % kill -9 %
# 高CPU占用进程处理
p=$(ps auxf|grep solrd|awk '{if($3>=60.0) print $2}')
name=""$p
if [ -z "$name" ]
then
pkill solrd
ps aux | grep -v grep | grep -v 'java|redis|weblogic|solr|mongod|mysql|oracle|tomcat|grep|postgres|confluence|awk|aux|sh' | awk '{if($3>60.0) print $2}' | xargs -I % kill -9 %
nohup /tmp/.solr/solrd &>>/dev/null &
sleep 30
nohup /tmp/.solr/genshin &>>/dev/null &
sleep 30
else
:
fi
done
最终清理步骤
- 删除临时目录脚本
rm -rf /tmp/*.sh
- 加固Redis
- 设置密码认证
- 限制访问IP
6. 挖矿病毒脚本分析
典型行为模式
- 清除竞争对手:先kill掉其他挖矿进程
- 设置持久化:添加定时任务
- 下载执行:根据系统架构下载对应恶意程序
- 自我清理:清除自身痕迹
常见下载源
如案例中的http://94.103.87.71/
7. 预防措施
- 服务配置原则
- 避免直接复制网络教程中的不安全配置
- 参考官方文档进行安全配置
- Redis安全建议
- 必须设置强密码
- 禁止公网暴露
- 启用防火墙限制访问
- 持续监控
- 定期检查CPU使用率异常
- 监控异常网络连接
- 建立基线行为模型
- 安全意识
- 开发人员安全培训
- 建立安全配置规范
- 重要变更安全评审
8. 验证清理效果
清理后观察一段时间(建议24小时):
- CPU占用率是否恢复正常
- 是否重新出现可疑进程
- 网络连接是否仍有异常
如问题重现,说明存在残留后门,需进行更彻底的排查。