记录一次服务器被挖矿(top,htop被修改)
挖矿一个简单的词汇经常出现在互联网各个角落但往往没人在意,直到今天我们实验室的H800服务器出现了问题,才发现挖矿竟在我身边。
背景:
上周我在使用服务器写LLM调试代码的过程中,debug总是失效,加上代码还没写好便没有在意,以为是debug功能出现了问题,便跑到A100服务器上调试代码。改好代码以后在A100上能够跑通,便跑到H800上跑代码。由于是用Accelerate多卡并行跑实验,结果总是报异步调用框架出错,便以为是torch环境出现了问题, 便重新安装cuda驱动、环境之类。试过了还是不行,我便尝试单卡跑,结果单卡跑的时候程序也会出现被kill掉的情况,由于debug启动不了,便开始尝试使用python自带的pdb在代码内部进行调试,发现还是会被killed掉。此时查看系统日志发现查不到任何相关信息,往常来说,程序被kill掉是因为out of memery,都是内存报错。于是htop、top查看内存发现一切正常也没有异常的进程,于是来回查看,终于发现avg指标高达96%,即cpu占用超过96%。第一反应还是觉得是系统出了问题,便进行多次重启,结果一开机就是96% 的cpu占用。此时结合网上搜索大概能确定是被挖矿了。
尝试:
- 因为病毒是也怕kill,所以通常会定时进行重启,果然发现于是删除定时任务进行重启,不能解决问题
- 病毒可能既不是root用户也不是ubuntu用户,创建了新的用户进行守护,果然发现存在一个未知用户,于是进行删除重启,还是不能解决问题
- 因为服务器要进行网络挖矿一定存在网络连接,所以查看网络当前进程,果然发现IP地址在德国的进程,多次查看发现进程号一直在变化,也不能kill解决
- 突然想到挖矿程序自身的唯一性,会最大挤压其他进程,所以直接查看当前在运行的进程,一直刷新终于发现一个很长的命令,丢给gpt确定就是挖矿脚本了,但这个进程一直在刷新,进程号一直在变,且几分钟才出现一次,所以一筹莫展
解决方案:
- 最初已经打算妥协,直接将数据全部放到数据盘,重装系统,重新配置环境。 直到在进行cp备份数据的时候,cp命令也被kill掉了,因为病毒本身有cpu监测超过多久便kill程序,真的不能忍受。
- 突然想到我们平时都是ll /proc 查看实验是谁挂的,想起来Ubuntu系统里面都是/proc暴露进程信息,top/htop都只是封装,可以通过查看存在/proc的进程而不在top上的进程来确定谁是挖矿脚本。于是进行查找终于发现有nohide来解决这个问题,最后发现了相关进程,高达1000多个,写了个循环进行kill,cpu直接降到0%,算是解决问题了。
在2进行后,也不能确定是否有残留,所以为了安全还是进行了1来重装系统
总结
总结一下本次最大的问题是,因为服务器在内网便忽视了更改ssh端口,只修改了默认密码,看来是一点大意都不能有,挖矿不是小说,一直在身边。