问题现象

内存被吃的很满,top 之后发现始终有僵尸线程在占用大量资源,kill 之后又会重新起来一个。

1. 检查恶意进程及非法端口

1
netstat -antp

可以看到 ESTABLISHED 状态的网络连接:

1
2
3
tcp  0 0  10.0.0.8:52860  104.168.71.132:80  ESTABLISHED  24031/bashirc
tcp 0 0 10.0.0.8:37602 185.156.179.225:80 ESTABLISHED 778145/kdevtmpfsi
tcp 0 0 10.0.0.8:56536 194.5.249.24:8080 ESTABLISHED 777784/dbused

其中端口 52860, 37602, 56536 等都是非法的,到云服务商安全组中重新设置,只对外开放 22 端口,关闭其他端口。

百度异常 IP,发现:

1
2
3
4
104.168.71.132 美国纽约布法罗
185.156.179.225 俄罗斯莫斯科
209.141.40.190 美国内华达拉斯维加斯
194.5.249.24 罗马尼亚

明显 IP 地址有问题。

2. 解决方案

2.1 解决 kdevtmpfsi 矿机问题

参考:记一次服务器被 kdevtmpfsi 变矿机

查找矿机进程和守护进程:

1
2
find / -name kinsing      # 守护进程
find / -name kdevtmpfsi # 挖矿进程

找到 /etc/kinsing,对此文件进行删除,之后 kill -9 PID 杀死进程。

查看网络状态:

1
netstat -alntop

查看 crond 服务状态,如果是他定时拉取木马,是否可以停止此服务再清理病毒文件呢?

1
2
3
4
5
service crond status
# 关闭 crond 服务
service crond stop
# 服务关闭了,但是已经启动的 job 不会停止,需要查看进程来杀死
ps -ef | grep cron

修改 SSH 的 22 端口增加端口 23148,先保留 22,新端口测试通后再去除 22:

1
2
3
4
5
6
7
8
9
# 修改 ssh 配置文件
vim /etc/ssh/sshd_config
# ...
Port 22
Port 23148
# ...

# 修改完后重启 sshd 服务
systemctl restart sshd.service

修改云服务商安全组,增加 23148,本地防火墙开放 23148 端口,本地 SSH 访问成功。

2.2 解决 dbused 矿机问题

处理逻辑:

1. 查看进程中是否有 dbused

1
top -c

2. 查看服务器的网络链接情况

1
netstat -antp

可以看到 dbused 的进程在链接网络。

3. 查看定时任务,停止 crond 定时服务

1
crontab -e

看到其中有矿机的定时任务,接下来研究怎么清除。

停止 crond 服务:

1
2
3
4
# 查看 crond 服务状态
service crond status
# 停止 crond 服务
service crond stop

cron 服务虽然停止,但已经启动的定时 job 其实还是在运行的,这个时候就要手动通过 top -cnetstat -antop 命令查找到矿机 PID,通过 kill -9 xxxx 干掉,之后执行如下脚本,清理掉矿机程序相关文件,避免死灰复燃再下载矿机程序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
chattr -ia /var/spool/cron/crontabs/root
rm -f /var/spool/cron/crontabs/root
chattr -ia /etc/cron.d/apache~
rm -f /etc/cron.d/apache~
chattr -ia /etc/cron.d/root
rm -f /etc/cron.d/root
chattr -ia /etc/cron.d/nginx
rm -f /etc/cron.d/nginx
chattr -ia /etc/cron.hourly/pwnrig
rm -rf /etc/cron.hourly/pwnrig
chattr -ia /var/spool/cron/root
rm -f /var/spool/cron/root
chattr -ia /etc/cron.hourly/oanacroner
rm -f /etc/cron.hourly/oanacroner
chattr -ia /etc/cron.weekly/pwnrig
rm -rf /etc/cron.weekly/pwnrig
chattr -ia /etc/cron.d/pwnrig
rm -rf /etc/cron.d/pwnrig
chattr -ia /etc/cron.monthly/pwnrig
rm -rf /etc/cron.monthly/pwnrig
chattr -ia /etc/cron.daily/pwnrig
rm -rf /etc/cron.daily/pwnrig
chattr -ia /etc/cron.d/apache
rm -f /etc/cron.d/apache
chattr -ia /etc/rc.d/init.d/pwnrig
rm -rf /etc/rc.d/init.d/pwnrig
chattr -ia /etc/systemd/system/multi-user.target.wants/pwnrige.service
rm -rf /etc/systemd/system/multi-user.target.wants/pwnrige.service
chattr -ia /usr/lib/systemd/system/pwnrigl.service
rm -rf /usr/lib/systemd/system/pwnrigl.service
chattr -ia /etc/systemd/system/pwnrige.service
rm -rf /etc/systemd/system/pwnrige.service
chattr -ia /bin/bprofr
rm -rf /bin/bprofr
chattr -ia /bin/sysdr
rm -rf /bin/sysdr
chattr -ia /bin/crondr
rm -rf /bin/crondr
chattr -ia /bin/initdr
rm -rf /bin/initdr
chattr -ia /usr/bin/bprofr
rm -rf /usr/bin/bprofr
chattr -ia /usr/bin/sysdr
rm -rf /usr/bin/sysdr
chattr -ia /usr/bin/crondr
rm -rf /usr/bin/crondr
chattr -ia /usr/bin/initdr
rm -rf /usr/bin/initdr
rm -rf /tmp/dbused
rm -rf /tmp/dbusex
rm -rf /tmp/xms
rm -rf /tmp/x86_
rm -rf /tmp/i
rm -rf /tmp/go
rm -rf /tmp/x64b
rm -rf /tmp/x32bchattr

检查是否还有矿机相关文件,如果没有再查看 top -cnetstat -antop。如果都没有可疑进程,说明已经清除;如果还有,再从头来一遍,操作速度要快,不等矿机程序下载恶意代码就杀死 PID,清除恶意文件。

1
2
3
find /etc/ -name '*' | xargs grep 'xms' -n 2>/dev/null | grep init.d
find /etc/ -name '*' | xargs grep 'dbuse' -n 2>/dev/null | grep init.d
find /etc/ -name '*' | xargs grep 'dbuse' -n 2>/dev/null | grep systemd

确认清理干净后,再启动 crond 服务:

1
2
3
4
# 启动 crond 服务
service crond start
# 查看 crond 服务
service crond status

参考资料