我的云服务器被植入挖矿木马,CPU飙升200%

共 4673字,需浏览 10分钟

 ·

2021-10-30 15:13

原文链接:https://bbs.pediy.com/thread-268197.htm


本文为腾讯安全专家撰写的《挖矿木马自助清理手册》,可以为政企客户安全运维人员自助排查清理挖矿木马提供有益参考。


一、什么是挖矿木马


挖矿木马会占用CPU进行超频运算,从而占用主机大量的CPU资源,严重影响服务器上的其他应用的正常运行。黑客为了得到更多的算力资源,一般都会对全网进行无差别扫描,同时利用SSH爆破和漏洞利用等手段攻击主机。


部分挖矿木马还具备蠕虫化的特点,在主机被成功入侵之后,挖矿木马还会向内网渗透,并在被入侵的服务器上持久化驻留以获取最大收益。

挖矿木马的整体攻击流程大致如下图所示:




二、挖矿木马中招特征


挖矿木马会在用户不知情的情况下利用主机的算力进行挖矿,最明显的特征就是主机的CPU被大量消耗,查看云主机CPU占用率的方法有两种:


1



控制台实例监控


2



主机执行TOP命令

如下图所示,通过执行top命令,即可在返回结果中看到当时系统的CPU占用率。

top -c


如果云主机CPU占用率居高不下,那么主机很有可能已经被植入了挖矿木马,会影响服务器上的其他应用的正常运行,需要立刻上机排查。

记一次 Linux 被入侵,服务器变 “矿机”~


三、清理挖矿木马



1



及时隔离主机

部分带有蠕虫功能的挖矿木马在取得主机的控制权后,会继续对公网的其他主机,或者以当前主机作为跳板机对同一局域网内的其他主机进行横向渗透,所以在发现主机被植入挖矿木马后,在不影响业务正常运行的前提下,应该及时隔离受感染的主机,然后进行下一步分析和清除工作。


腾讯云主机可以通过设置安全组隔离主机,具体参考如下链接:https://cloud.tencent.com/document/product/215/20089


2




阻断异常网络通信


挖矿木马不仅会连接矿池,还有可能会连接黑客的C2服务器,接收并执行C2指令、投递其他恶意木马,所以需要及时进行网络阻断。


(1)检查主机防火墙当前生效的iptables规则中是否存在业务范围之外的可疑地址和端口,它们可能是挖矿木马的矿池或C2地址

iptables -L -n


(2)从iptables规则中清除可疑地址和端口

vi /etc/sysconfig/iptables


(3)阻断挖矿木马的网络通信

iptables -A INPUT -s 可疑地址 -j DROPiptables -A OUTPUT -d 可疑地址 -j DROP

3




清除计划任务


大部分挖矿木马会通过在受感染主机中写入计划任务实现持久化,如果仅仅只是清除挖矿进程,无法将其根除,到了预设的时间点,系统会通过计划任务从黑客的C2服务器重新下载并执行挖矿木马。


挖矿木马常见的计划任务通常是下载并执行sh脚本,如下图所示:


可以通过执行如下命令查看是否存在可疑定时任务,若有,则先保存相关记录用于后续分析,再进行删除:

查看系统当前用户的计划任务:

crontab -l

查看系统特定用户的计划任务:

crontab -u username -l

查看其他计划任务文件:

cat /etc/crontabcat /var/spool/croncat /etc/anacrontabcat /etc/cron.d/cat /etc/cron.daily/cat /etc/cron.hourly/cat /etc/cron.weekly/cat /etc/cron.monthly/cat /var/spool/cron/



4



清除启动项

除了计划任务,挖矿木马通过添加启动项同样能实现持久化。可以使用如下命令查看开机启动项中是否有异常的启动服务。

CentOS7以下版本:

chkconfig –list

CentOS7及以上版本:

systemctl list-unit-files

如果发现有恶意启动项,可以通过如下命令进行关闭:

CentOS7以下版本:

chkconfig 服务名 off

CentOS7及以上版本:

systemctl disable 服务名

另外,还需要仔细排查以下目录及文件,及时删除可疑的启动项:

/usr/lib/systemd/system/usr/lib/systemd/system/multi-user.target.wants/etc/rc.local/etc/inittab/etc/rc0.d//etc/rc1.d//etc/rc2.d//etc/rc3.d//etc/rc4.d//etc/rc5.d//etc/rc6.d//etc/rc.d/

排查的时候,可以按照文件修改时间来排序,重点排查近期被创建服务项。如下图所示,系统近期被创建了一个名为bot.service的服务,该服务在系统启动时会启动/etc/kinsing这个木马文件,需要关闭bot服务,并删除/etc/kinsing文件。



5




清除预加载so


过配置/etc/ld.so.preload,可以自定义程序运行前优先加载的动态链接库,部分木马通过修改该文件,添加恶意so文件,从而实现挖矿进程的隐藏等恶意功能。
检查/etc/ld.so.preload(该文件默认为空),清除异常的动态链接库。可以执行`> /etc/ld.so.preload`命令进行清除。



6




清除SSH公钥


挖矿木马通常还会在~/.ssh/authoruzed_keys文件中写入黑客的SSH公钥,这样子就算用户将挖矿木马清除得一干二净,黑客还是可以免密登陆该主机,这也是常见的保持服务器控制权的手段。

排查~/.ssh/authorized_keys文件,如果发现可疑的SSH公钥,直接删除。


7



清除挖矿木马

(1)清除挖矿进程

挖矿木马最大的特点就是会在用户不知情的情况下,利用主机的算力进行挖矿,从而消耗主机大量的CPU资源,所以,通过执行如下命令排查系统中占用大量CPU资源的进程。

top -cps -ef


确认相关进程为挖矿进程后,按照如下步骤将其清除:
获取并记录挖矿进程的文件路径:

ls -l /proc/$PID/exe


杀死挖矿进程:

kill -9 $PID


删除挖矿进程对应的文件


(2)清除其它相关恶意进程

恶意进程与外部的C2服务器进行通信时,往往会开启端口进行监听。执行如下命令,查看服务器是否有未被授权的端口被监听。

netstat -antp


若有未授权进程,按照如下步骤将其清除:
获取并记录未授权进程的文件路径:

ls -l /proc/$PID/exe


杀死未授权进程:

kill -9 $PID


删除未授权进程对应的文件


还可以通过如下命令排查近期新增的文件,清除相关木马

 find /etc -ctime -2 (这里指定目录为/etc,获取近2天内的新增文件) lsof -c kinsing (这里要查看文件名为kinsing的相关进程信息)



8



风险排查、安全加固

对系统进行风险排查和安全加固,避免挖矿木马卷土重来,详情可参考如下链接:https://cloud.tencent.com/document/product/296/9604


四. 常见问题


1



明明刚刚清理了挖矿木马,没过多久就又卷土重来?

很多用户会反馈挖矿木马老是清理不干净,明明已经Kill了进程,删除了木马文件,没过多久,CPU占用率又上来了。究其根本,还是因为清除得不够彻底。大部分用户都只是Kill掉挖矿进程和对应文件,却没有清理计划任务和守护进程。


一般建议先清除计划任务、启动项、守护进程,再清除挖矿进程和其他恶意进程。



2



如何判定可疑进程是否为恶意进程?

如下图所示,未知进程kinsing监听本地31458端口,非常可疑,可通过如下方法判定:
(1)执行`ls -al /proc/$PID/exe`确认可疑进程对应的文件;
(2)若文件未被删除,则直接上传文件到Virustotal进行检测,或者计算出文件对应的md5,使用md5去Virustotal进行查询;若文件已被删除,可执行`cat /proc/$PID/exe > /tmp/t.bin`将进程dump到特定目录,再上传文件到Virustotal或者计算dump文件对应的md5到Virustotal进行查询。如果有多款杀毒引擎同时检出,那基本可以判定该进程为恶意进程。


Virustotal地址:https://www.virustotal.com/gui/s



3



为什么系统CPU占用率接近100%,却看不到是哪个进程导致的?

如下图所示,系统CPU占用率接近100%,却看不到是哪个进程导致的,这种情况一般是因为系统命令被木马篡改了,从而隐藏了木马进程的踪迹,让用户无法进行溯源分析。


命令篡改有多种方式,分别如下:
(1)top源文件被篡改,恶意进程信息被过滤后返回


通过执行如下命令即可复原:

rm -rf /usr/bin/top && mv /usr/bin/top.original /usr/bin/top


【相关文章】

https://blog.csdn.net/chenmozhe22/article/details/112578057


(2)篡改预加载so文件,ls、top、ps等命令已经被木马的动态链接库劫持,无法获得木马进程相关的信息


通过执行如下命令即可复原:

> /etc/ld.so.preload && rm -rf 恶意so文件路径


(3)通过其他未知手段篡改系统命令


可分别尝试如下两种方案解决:
i.从其他相同版本系统中拷贝命令源文件到当前系统中进行覆盖;可使用uname -a命令查看当前系统版本;


ii.或者安装busybox来对系统进行排查。

busybox是一个集成了300多个最常用Linux命令和工具的软件,可以使用busybox替代系统命令对系统进行排查;

yum -y install wget make gcc perl glibc-static ncurses-devel libgcrypt-develwget http://busybox.net/downloads/busybox-1.33.0.tar.bz2tar -jxvf busybox-1.33.0.tar.bz2cd busybox-1.33.0 && make && make install

【相关文章】

https://www.cnblogs.com/angryprogrammer/p/13456681.html

- END -

 推荐阅读 

31天拿下 K8s 含金量最高的CKA+CKS证书! 
Kubernetes与分布式系统,容器化背后的故事
一名运维小哥对运维规则的10个总结,收藏起来
运维工程师不得不看的经验教训和注意事项
Kubernetes上生产环境后,99%都会遇到这2个故障
如何用 Kubernetes 实现 CI/CD 发布流程?| 漫画
K8s kubectl 常用命令总结(建议收藏)
Kubernetes 的这些核心资源原理,你一定要了解
终于明白了 DevOps 与 SRE 的区别!
我在创业公司的 “云原生” 之旅
基于Nginx实现灰度发布与AB测试
编写 Dockerfile 最佳实践
搭建一套完整的企业级高可用 K8s 集群(二进制方式)



点亮,服务器三年不宕机

浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报