找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 160|回复: 0

[服务器安全] 记录一次服务器被挖矿经历...

[复制链接]
  • 打卡等级:Lv7.热心大叔
  • 打卡总天数:279
  • 打卡月天数:3
  • 打卡总奖励:8516
  • 最近打卡:2026-05-11 09:07:12

381

主题

599

回帖

1万

积分

管理员

积分
11455
发表于 2024-1-14 15:12:35 | 显示全部楼层 |阅读模式
前一段时间,导师服务器计算机无故空转,找我来帮忙处理一下,第一反应,机器应该是被挖矿了,前前后后处理了两周左右才完全删干净,这次的挖矿病毒和往常的不太一样,比较会隐藏,这里简单记录一下。
用ssh远程链接到服务器后,首先用top和htop分别看了下CPU占用,发现在没有计算程序运行的状态下,CPU的占用达到了90%左右,和往常的挖矿程序不同,这位是把进程隐藏了。
以下命令都是在root环境中执行。

top命令下,CPU占用90%,但是显示没有大型计算程序在运行
进程被隐藏,浅浅的在网络上搜索一番后,了解到被隐藏有几个级别,可能是内核级的隐藏,也可能单纯是一些常用命令被替换,于是查询怎样才能让被隐藏的进程显现出来。htop是第三方指令,也显示不出来,所以应该是linux内核等位置做了手脚。
  1. <div># 查到了如下两个命令可以一定程度上发现被隐藏的进程</div><div>sysdig -c topprocs_cpu # 该命令可以输出cpu占用的排行,经测试可以显示出被隐藏的进程</div><div>unhide proc # 自助搜索隐藏进程,linux系统中一切皆文件,proc目录下保存的就是所有正在运行程序的进程ID,即PID</div>
复制代码
以上两个命令需要额外安装,不是系统自带命令
  1. # sysdig可用如下命令安装,curl是类似wget的下载命令,这里下载的是一个bash脚本,下载后再通过bash执行安装
  2. curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash
  3. # unhide 可以通过如下命令进行安装
  4. yum install unhide # 中毒的是Centos7系统,所以用的是yum
复制代码
安装好这两个命令后,首先试了下unhide,发现弹出了很多隐藏进程编号,个人感觉是一个多线程进程的子线程编号然后尝试使用sysdig命令,输出了如下结果。

ab8d393d为挖矿程序
可以看出这个挖矿程序占用了至少54个计算核心。
进入挖矿进程的PID目录下,可看出该进程的运行信息。

/proc/60818下执行ls -al
这里显式执行程序已被删除,这里单纯只是系统没有识别到的原因,并不是被真的删除。这里先别急直接用将进程删除掉,以免再次挂起。
  1. # 至于为什么不要第一时间用kill删掉病毒进程,这是一个惨痛教训,后面会提到。
  2. # 首先我们用如下命令查询进行是如何被运行的
  3. systemctl status 60818 # 60818为病毒的PID
  4. # 这里的输出结果PID目录下environ文件内容是类似的
复制代码
结果输出如下

其中bf1e7ddf为病毒进程
这里前前后后删了多次挖矿进程,所以每次挖矿进程的可执行程序的名字和PID都不一样,不过名字都是由8位的16进制数字组成。可以看出这个挖矿进程是被一个mdcheck什么服务启动的。
  1. # 所以这里我先通过如下命令将该服务停掉
  2. journalctl -u mdcheck-4838751a # 终止之前可以用该命令查看服务运行状态
  3. systemctl stop mdcheck-4838751a # 终止该挖矿服务
  4. systemctl disable mdcheck-4838751a # 终止该挖矿服务的开机自启
复制代码
从上图中可看出终止之后再查看该挖矿进程状态,其中的服务已经变为失败状态。
  1. # 知道这些后,我们可以用防火墙firewalld或iptables对这些IP进行封禁iptables -I INPUT -s IP -j DROPfirewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="IP" reject'# 其中IP字段替换为真实的黑客IP
复制代码
这里我没有截图留念。其中发现了一个来自美国的IP和一堆欧洲IP链接,经过分析后,这个美国IP是黑客日常发送指令的位置,欧洲IP是接收挖矿密钥的位置。

  1. # 知道这些后,我们可以用防火墙firewalld或iptables对这些IP进行封禁
  2. iptables -I INPUT -s IP -j DROP
  3. firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="IP" reject'
  4. # 其中IP字段替换为真实的黑客IP
复制代码
但是发现系统提示说是没有iptables指令,我用whereis命令进行查询发现,系统中存在iptables的源文件,但是可执行文件缺失,我就从相同系统环境的另一台机器上把iptables复制过来,并通过如下命令启动防火墙服务。
  1. systemctl enable iptables # 开机自启
  2. systemctl start iptables # 打开服务
复制代码
然后通过之前的命令把黑客IP进行封禁。
但是重启电脑之后,被关闭的病毒服务又回来了,iptables也被第一时间删除。看来简单关闭挖矿服务是不行的,需要完整的删除。
在上图中,我们可以看到挖矿服务在/etc/dns/mdcheck-的目录下。但是一通操作后,发现目录下是空的。甚至在/etc/dns/下也查询不到mdcheck-文件下,除非输入完整路径信息。

挖矿服务目录
这里我想复制一份挖矿服务程序出来,系统提示如下报错
  1. Operation not permitter
复制代码
root都没权限进行操作。一通检索后才知,linux怕用户误删一些系统必要指令和文件进行的保护,可通过如下命令进行解除。

  1. chattr -iR /etc/dns # 解除改目录的误删保护,R为递归执行,但是文件夹下的病毒都被隐藏,所以这里的R其实没有起作用
复制代码
这里需要分别用chattr对该目录下的文件逐一全名的进行解除。然后通过rm -rf对dns目录进行删除。最后再利用kill -9命令将挖矿进程删掉,再次重启之后,挖矿服务没有再次被启动。
后来分析了一下服务器被挖矿的原因,

  1. # 一方面是ssh远程登录没有禁用root的远程登录,此时需要在/etc/ssh/sshd_config中添加
  2. PermitRootLogin no
  3. # 保存后,对ssh服务进行重启
  4. systemctl restart sshd
复制代码
另一方面原因是,为了在多台服务器上统一管理HTCondor任务提交系统,我将防火墙都关闭了,这里可以通过添加IP例外,使得其他服务器可以连接到该服务器上。至此,清楚挖矿进程告一段落,也学习到了很多linux运维的知识。
通常的病毒只会在crontab中写入定时自启病毒,所以直接删掉即可,这次的病毒在linux系统中注入了服务,让人难以搜索到,尤其是对病毒进程和文件夹进行了隐藏操作,防不胜防。
有条件的可以将服务器中ssh登录都设置为rsa免密登录,这样可以避免绝大多数问题。一般黑客是通过尝试用户名和密码对服务器进行攻击,但是每台服务器中用户名都不同,所以很难攻击,但是root名称一般不会变,所以黑客一般是先攻击这个名称。
世界上第一位被抓到的黑客,就是利用用户偷懒的行为得逞的。上世纪很多人的电脑喜欢创建一个叫author的用户名,密码可能就是简单的123456或者password之类的,所以就让黑客钻了空子。
后来我查看了近期有哪些人尝试登陆过服务器,发现有很多类似maxwell等奇奇怪怪的名字出现,所以服务器上尽可能也别出现知名人士名字的账户。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2026-5-13 19:35 , Processed in 0.047521 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表