记一次服务器中了挖矿病毒

今日闲来无事看了一眼探针,发现有个服务器CPU负载异常高(100%),仔细一想好像也没跑什么高负载服务啊,随即ssh登录上去看一眼。

1、初步排查

使用top命令查看系统进程,结果发现没有高负载程序,但是cpu显示99 us。那么怀疑是病毒隐藏了进程。

于是排查无有异常的网络连接,使用 netstat -anp 查看连接,确实有异常连接,但是还是看不到进程。

顺带反查了一下这个IP,发现是一个矿池地址。

2、深入排查

目前已经知道了矿池地址和端口,于是谷歌一下发现不少人都中这种隐藏进程的病毒。这位大佬的帖子中,https://www.cnblogs.com/bonelee/p/16976768.html,我得到思路。直接使用16进制编码端口,再去/proc/net/tcp文件中查找inode。

于是乎我们得到了该进程的inode,那么接下来我们只需要遍历/proc的pid目录,对比文件的inode,便可揪出异常进程了。所以写了一个python脚本来遍历。

import os


def find_file_by_inode(inode_number, directory='.'):
    for foldername, subfolders, filenames in os.walk(directory):
        for filename in filenames:
            full_path = os.path.join(foldername, filename)
            try:
                if os.stat(full_path).st_ino == inode_number:
                    return full_path
            except:
                pass
    return None


inode_number = 813563  # 上一步中找到inode
filename = find_file_by_inode(inode_number)
if filename:
    print('File found:', filename)
else:
    print('No file found with inode number', inode_number)

把脚本放在proc目录执行,很快哈,找到PID为577。

3、解决

接下来执行 ls -l /proc/{PID}/exe 便可拿到执行文件的路径了。后面清除目前就可以参考以下文章了。

https://blog.csdn.net/wu_qing_song/article/details/127551422

还有要记得检查你的/root/.ssh下的key文件,我在排查时发现了不属于自己的key,这就是为什么删除了病毒文件,却再次中招的原因之一,当然一般会隐藏进程的病毒都会篡改你的系统文件,为了安全起见(无数据),我直接选择重装系统。

为了验证PID 577是否是病毒,我是直接kill了这个进程,果然CPU负载成功降低。

4、如何防范于未然?

我觉得主要是一下几点:

(1)不要使用弱密码,或者使用ssh key。

(2)修改ssh端口,降低被扫风险。

(3)不要使用来路不明的脚本或程序。

上一篇
下一篇