47

记一次挖矿处理

 4 years ago
source link: https://xuchao918.github.io/2019/11/13/记一次挖矿处理/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

11月10日周日晚上21:58分收到阿里云监控告警邮件,提示云服务器被挖矿,顿时意识到事情严重,于是立马登陆到机器上处理。

ZvA73mv.png!web

定位并清除挖矿程序

由于这是一个线上服务器,当前首要任务是找到并Kill掉挖矿病毒,恢复正常。

首先,使用top命令定位挖矿程序,发现是一个名称为base64的进程,妥妥的,CPU使用率飙到了715%。

VFrMzum.png!web

然后,查看该挖矿进程是如何运行的

nMbm6r2.png!web

找到之后,我们要想办法尽快干掉它,恢复业务

# cd /root/.tmp00
# ls
bash  bash64  bash.pid  cfg  cfgi  uuid

收回程序的可执行权限,这里一定要先回收可执行权限才能kill掉进程,否则无效

# chmod -x bash64 
# chmod -x bash

杀掉bash64进程

# pkill bash64

接下来尝试删除病毒文件,发现删除后会自动生成,并自动运行。

# rm -rf ./*

3eUBbeI.png!web

因为一般病毒会使用chattr +i命令,于是使用chattr -i bash64,然后再 rm -f bash64,发现也无法删除。

于是只有重复上面步骤。

再次使用top命令查看,发现bash64挖矿进程消失,持续观察一段时间后进程没有再起来,总算先抑制住了,可以松口气了!

遗留问题1:挖矿病毒暂时无法删除

定位并清除crontab定时任务

OK,这里只是暂时压制住了这个邪恶的东西,继续排查其他问题。

接下来查看有无crontab定时任务

# crontab -l
*/1 * * * * export DISPLAY=:0 && /root/.tmp00/bash >/dev/null 2>&1

果然有,于是尝试使用crontab -e 删除掉crontab,但删掉后又自动创建了。这里我们已经知道该定时任务为每分钟执行一次。所以我们怎么删也无用,crontab服务被破坏掉了,无法正常停止,当然最粗暴的是先备份crontab可执行程序,然后删掉它。

好吧,试试其他办法,于是

# cd /var/spool/cron
# rm -f root VM

6zyEviE.png!web

纳尼,root文件可以删除,VM删除后又自动生成,好吧,我尝试去修改它,发现修改后又会自动生成新的一行。

jmme2yv.png!web

使用crontab -r也无法删除。

接下来,确认/etc/init.d目录下有没有挖矿程序,OK,没有。

遗留问题2:该挖矿程序定时任务暂时无法删除

禁止挖矿程序连接网络

OK,那我们就追本溯源,看看/root/.tmp00/bash64这个程序,是黑猫还是白猫。

# more /root/.tmp00/bash
******** /root/.tmp00/bash: Not a text file ********

尝试VIM打开,好吧,如所料这是一个编译后的文件(非bash脚本)无法直接查看。

jErm6b2.png!web

回到上面,我们通过ps命令获悉该挖矿进程通过-c参数指定了配置文件,查看该配置文件的内容

IJviIrr.png!web

好家伙,该文件内容经过base64编码处理,base64解码后配置内容如下:

{
	"algo": "cryptonight",
	"autosave": false,
	"background": false,
	"colors": true,
	"retries": 5,
	"retry-pause": 5,
	"syslog": false,
	"print-time": 60,
	"av": 0,
	"safe": false,
	"cpu-priority": null,
	"cpu-affinity": null,
	"donate-level": 0,
	"threads": 8,
	"pools": [
		{
			"url": "proxkekman.ru:8080",
			"user": "0c82cc57-7dae-4d4b-a409-12afcc45136e",
			"pass": "x",
			"keepalive": true,
			"nicehash": false,
			"variant": "r",
			"tls": false,
			"tls-fingerprint": null
		}
	],
	"api": {
		"port": 0,
		"access-token": null,
		"worker-id": null
	}
}

这里,重点是这个url地址proxkekman.ru:8080。使用浏览器尝试访问页面无法打开,那使用telnet试试能否通。OK,能通。

telnet proxkekman.ru:8080

由于挖矿程序base和base64没有时间去解码,所以看不到程序代码。根据我的个人推测,挖矿病毒需要使用这个url地址去做些勾当,为了保险起见,于是使用iptables禁止访问这个url地址。

iptables -A INPUT -s proxkekman.ru -j DROP 
iptables -A OUTPUT -d proxkekman.ru -j DROP

其实,在最开始kill掉该进程前,我们可以使用netstat查看该进程使用的端口号。然后使用安全组规则或iptables drop该端口的连接。

流程走到这里时,有2个问题没有处理掉,即挖矿病毒文件和crontab定时任务没有清除掉。山雨欲来风满楼,刚好此时在网上找解决方法时,ssh连接因超时自动退出(做等保时加了配置),此时再次以root用户或其他用户登陆再执行sudo等命令时,发现该挖矿病毒在我最开始登陆之后的1分钟左右把root用户删掉了,重新创建了一个VM的超管账号,并破坏掉了sudo等命令。

综合评估最优选择,经过内部商议,决定回滚该云服务器的系统盘快照恢复系统(该实例运行的是边缘业务)。

补充要点

如何快速定位异常用户

检查系统用户,查看是否有异常的系统用户

# cat /etc/passwd

查看是否产生了新用户,UID和GID为0的用户

# grep “0” /etc/passwd

查看passwd的修改时间,判断是否在不知的情况下添加用户

# ls -l /etc/passwd

查看是否存在特权用户

# awk -F: ‘3==0 {print3==0 {print1}’ /etc/passwd

查看是否存在空口令帐户

# awk -F: ‘length(2)==0 {print2)==0 {print1}’ /etc/shadow

打开 /root/.ssh/authorized_keys, 删除你不认识的账号。删除之前,先备份,以免误删。

cp authorized_keys authorized_keys.back

清理定时任务

(先清理定时任务,再删除挖矿病毒本体,防止再生),包括但不限于

/etc/crontab
/var/spool/cron/root
/var/spool/cron/crontabs/root
/etc/cron.d/system
/etc/cron.d/root
/etc/cron.hourly/oanacron
/etc/cron.daily/oanacron
/etc/cron.monthly/oanacron
/etc/cron.monthly/oanacron3

删除相关动态链接库

包括但不限于

/etc/ld.so.preload
/etc/libjdk.so
/usr/local/lib/md.so
/usr/local/lib/screen.so
/usr/local/lib/y.so4

总结

1.服务器如非必须,禁止开放端口,按需开放即可;

2.重要服务的端口,如数据库等服务端口,应禁用默认端口,启用密码认证并禁止外网连接;

3.一定要有数据备份,包括业务数据备份(如数据库)和基础数据备份(如系统盘和数据盘)等。总之,有备份,睡觉也踏实;

4.及时修复系统漏洞,打安全补丁;

5.严格控制所有用户的操作权限,需特殊权限需特殊审批;

腾讯CTO张志东曾说:安全问题可以让腾讯一天倒闭。这是不是真的,我不知道。但笔者曾亲身经历过的公司因被专业黑客持续攻击,导致损失上百万,从而成为倒闭的主因之一。

在此小记,以免忘了!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK