服务器被入侵(疑似挖矿病毒)处理
一、环境介绍:
系统:ubuntu 18.04
内存:128G
硬盘:500G(操作系统盘)+15T(数据盘)
a、查看物理CPU个数
root@ubuntu:~# cat /proc/cpuinfo| grep"physical id"| sort| uniq| wc -l
2
b、查看每个物理CPU中core的个数(即核数)
root@ubuntu:~# cat /proc/cpuinfo| grep"cpu cores"| uniq
cpu cores :16
c、查看逻辑CPU总的个数(利用超线程技术实现。2个物理CPU;2x16=32核;每核2线程:32x2=64线程)
root@ubuntu:~# cat /proc/cpuinfo| grep"processor"| wc -l
64
d、查看总线程数,可以理解为总逻辑cpu的数量
root@ubuntu:~# grep 'processor' /proc/cpuinfo| sort -u | wc -l
64
e、查看 CPU型号
内核:Linux ubuntu4.15.0-147-generic #151-Ubuntu SMP Fri Jun 18 19:21:19 UTC 2021 x86_64 x86_64x86_64 GNU/Linux
64 Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz (利用超线程技术实现的64个逻辑CPU)
文章主题之外补充:KVM、VMwre等等虚拟化,应该分配几颗CPU 是以总核数来确定的(如上16x2=32核),不是以逻辑(线程数)CPU 的数量来确定。
二、服务器状态排查一
1、如下图可见,%CPU us:用户占用cpu(用户CPU使用率)达到了50%,(us是用户CPU 使用率,便于理解:CPU 分为用户态和内核态,所以也分为用户CPU占用率、系统CPU 占用率(用户:就是在操作系统之上运行的各种应用软件;系统:就是在操作系统本身),理解可参考:https://www.cnblogs.com/bailongcaptain/p/12397679.html)。
引用:之前看到过一篇文章介绍说:只要是跑着的线程,那么都是占用CPU的线程,如果一个进程有多个线程在同时运行,那么cpu占满是不可能的,每个线程本来就是会被操作系统分配时间片的。举个例子:如果3个线程同时运行,那么只有问题线程所使用的30%是满的,3个线程同时都是问题线程的概率是很小的(但不是没有可能),所以cpu总体使用率可能是50%以上,但不可能达到100%,遇到问题进程,这个首先得看是不是程序占得cpu,这个还是可以top一下,查看性能监测器,确定是某个程序的话,可以通过windbg抓dump进行分析。然后听到了一个感觉会有些烧脑的名词——线程监控,把内部线程和系统线程id结合,可能会在调试状态下查看CPU使用率,然后找到哪个函数CPU占用过高这么个场景会用到。备注:在我的环境中达到50% 服务器并不卡,可能在高点达到70~80%就会卡了。
在我这个场景下,第一张图:用户CPU占用率达到了50%左右,Load average 负载达到了32左右,CPU总核数也是32
第二、三张图就能清晰的看到 CPULoad average 达到了32左右
top 命令后按“1“:
2、心里想:CPU load average 负载这么高,可能是磁盘IO出问题的时候,CPU都等着向磁盘写数据呢,或者磁盘有坏道,写的慢,CPU任务执行不完,就一直处于等待的状态,所以导致的负载这么高,排查iowait信息,如下显示:磁盘IO是正常的。
3、排查定时任务crontab中任务脚本,以及硬盘使用情况,内存使用情况,也都未发现异常。
4、列出进程id, 线程id和cpu占有率,同时按照cpu占有率排序
root@ubuntu:/etc#psH -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
以为用这个命令可以把隐藏的进程都显示出来,是我年轻了!!!
5、排查网络,服务器连接的IP以及监听的端口是否异常,并使用ifconfig查看网卡收发的流量情况
6、排查/etc/passwd 是否有可疑用户或者登录的权限设置有问题(就不附图片了)
7、排查/var/log/message 用户登录记录,我这用的是vim打开,里面的记录也都被清空了,此时还没有意识到/var/log下文件的重要性,这让我很后悔,原因嘛,等下就晓得了。
思路小结:以上排查后,偏偏CPU占用率很高,其他的很正常,这不符合逻辑呀!!!
附上此时内心独白:真TM奇了怪了!!! 到底是个啥导致的CPU占用率这么高???要么就等他自己爆吧,反正又不能重启;心里又想,难得遇到这么个场景,重启此时的服务器环境就没有了,问题始终要解决,鼓着上吧。
三、服务器排查二
1、重点:以上的排查这是部分的排查,要想找到问题所在,还是要耐住性子,虽然知道服务器里面有那么多的文件,遇到的问题就在这么多文件的其中,但是解决的途径也是在其中。
2、突然想到:一开始的/var/log/message 是直接用 vim 打开看的,并没有把/var/log下的所有的文件都看过,要不把 /var/log下的所有文件都看一遍,哈哈哈,这可能是真是运气,在/var/log/syslog里面尽然有很多的报错是关于SSH服务的,SSH服务一直在不断的重启,并且一直在调度分配新的job去执行重启,怀疑可能是一直就是因为这个原因导致的CPU占用率这么高;并且查看状态一直有ip在暴力破解密码,同时也统计了一下密码被暴力破解的次数:有12万多。我们的密码我感觉设置的也很简单,感觉都经受不了这么多次的尝试。(别人设置的,我的话最起码十位数起步,大小写,特殊字符)
activating(start) 这个状态是不正常的。
3、排查了ssh服务的配置文件/etc/ssh/sshd_config 文件,里面没有问题,手动重启了一遍,仍然是activating(start)这个错误的状态,打算重做SSH服务
4、重装SSH 服务,遇到了新的问题:
问题1、Errors were encountered whileprocessing
问题2、The following packages have unmet dependencies:
openssh-server : Depends: openssh-client (=1:7.2p2-4ubuntu2.8)
Depends: openssh-sftp-serverbut it is not going to be installed
问题3:dpkg:erro processing package openssh-server(--configure) installed openssh-server package post-installation scriptsubprocess returned error exit status 1 errors were encontered while processing
问题4:dpkg: error processing package openssh-server (--configure):
subprocess installed post-installation scriptreturned error exit status 10
Errorswere encountered while processing:
问题5:等等一连串的依赖报错之类的问题
以上的问题都是由于对ubuntu 的不熟悉,apt-get remove openssh-server 会出现一连串的问题,切记,要想把软件卸载干净就不要使用这个 apt-get remove xxxxx;
正确做法:apt-get purge openssh-server openssh-client ,就不会有上述的一些依赖问题。
心得:出现以上类似的其他软件包的问题,其实可能都是由于在之前使用了remove。场景:若是现在需要新装一个软件,出现了类似的上述的依赖报错问题,并且这个报错是之前卸载某个软件遗留下来的,可以通过:先which xxx 或者whereis xxx ,查询一下软件包的主要配置文件在哪,将他cp备份保存一份;接下来使用apt-get purge xxxx 来卸载依赖报错的软件(xxx是之前的卸载的软件,并且这个软件在报错中一定会体现的);然后apt-get install –f && apt-get install xxxx 将依赖报错的软件重新安装,在把新的配置文件对照着cp备份保存的配置一下,再然后apt-get update更新如软件包的信息,可以理解为更新下载源;最后再apt-get install 安装需要新装的那一个软件。
5、重装SSH服务遇到了个最棘手的问题,同时这个问题也证明了服务器确实已经被入侵过了。
问题1、unable tomake backup link of `./usr/bin/sshd’ before installing new version: Operationnot permitted
这句话的意思是:我如果要apt-get install openssh-server openssh-client ,需要先把/usr/bin/sshd 这个文件删除掉,并且能够对这个文件有权限进行读写执行操作
问题2、root超级管理员也没有权限对sshd文件进行操作,我知道的Linux下有lsattr 和chattr这俩命令是设置特殊权限的,但是从下图可见,使用这俩系统中自带的命令对sshd文件进行操作,显示权限被拒绝了。
解决方法:
正常的lsattr应该是这样的,有----------;
lsattr俩命令再这两张图片里面完全不一样,猜测第一张图片里面的lsattr可能被修改或者替换了。接下我从相同版本的ubuntu
18.04上拷贝了lsattr和chattr 两份文件,重命名为:lsattr_new 和 chattr_new,并上传到了第一张图片的服务器中。
使用lsattr_new和 chattr_new 对sshd 进行操作,终于生效了。
接下来重装SSH服务,执行命令:apt-get update && apt-get install openssh-server openssh-client && systemct restart sshd 。
内心独白:心累~~~~一开始怀疑,因为ssh 服务一直不断再重启,再不停分配新的job,是这个原因导致的CPU占用率这么高。唉,是我天真了!!!没啥毛用!!!看来还是因为其他的原因,第二次想放着不管了,让他自己爆了再去重启。
继续继续-------俺只是那么一想
三、借助第三方商用软件——Bitdefender GravityZone排查
1、这个商用病毒查杀软件支持的平台以及系统版本还是挺全的,方式1、可以使用KVM或者VMware等虚拟机进行部署,这个适用于有虚拟化环境,只需要一台虚拟机就能够部署,最低要求8G内存;方式2、可以使用SAAS的方式进行部署,但是需要联网,这个适用于部署在物理机上。我这采用的是方式2
SAAS部署Bitdefender GravityZone步骤:
步骤1:登录控制台后,到这个页面下完整安装包(不能联网的机器就不能用这个包,需要先联网安装,然后再给你生成一个内网安装包)我这的环境是可以上网的。
步骤2:下载linux安装包;上传到服务器上后解压压缩包:tar –zxvf 包名;chmod +x installer ;./installer 进行安装
步骤3:使用图片中的命令进行扫描操作
扫描到有结果会自动清理(清理:是剥离恶意代码,重组正常的文件,清理之前会拷贝一份到隔离区)
步骤4:完成后可以在控制台,网络区域,点击这个设备,弹出信息框,扫描日志
客户端扫描完成后,会出一份扫描清理的报告;
控制台,左侧,隔离区也能看到扫描结果
步骤5:到控制台,左侧,ThreatXploer可以看到更多信息
四、挖矿病毒的处理
1、、/usr/local/lib/libnss.so 文件的作用:
执行top看到CPU占用率较高,但是显示的进程关于CPU的占用率都并不高,libnss.so 这个文件会动态连接库后门来隐藏进程信息
root@clamav:/etc# wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64
busybox-x86_64 100%[==================>] 977.65K 173KB/s in 5.8s
2021-07-14 19:31:15 (170KB/s) - ‘busybox-x86_64’ saved [1001112/1001112]
root@clamav:/opt# chmod +xbusybox-x86_64
root@clamav:/opt# mvbusybox-x86_64 busybox
root@clamav:/opt# mkdirruqing
root@clamav:/opt/ruqing#/opt/busybox ls -al /usr/local/bin/libnss.so
-rw-r--r-- 1 root root 12952 Jul 14 19:34libnss.so
root@clamav:/opt/ruqing# /opt/busyboxls -al l /etc/ld.so.preload
-rw-r--r-- 1 root root 12952 Jul 14 19:34libnss.so
root@ubuntu:/etc#/opt/busybox cat ld.so.preload
/usr/local/lib/libnss.so
2、lsattr_new 和chattr_new 文章前面有介绍过,
参数含义:
i:不允许对文件进行删除、改名,也不能添加和修改数据
a:只能在文件中増加数据,但是不能删除和修改数据
u:在删除时,其内容会被保存,以保证后期能够恢复
使用lsattr_new查看libnss.so文件的特殊权限
root@ubuntu:/usr/local/bin#lsattr_new libnss.so
-u--ia--------e---lsattr
取消设置的权限
root@ubuntu:/usr/local/bin# chattr_new -uialibnss.so
root@ubuntu:/usr/local/bin# rm –rflibnss.so
3、在删除libnss.so文件后,执行任何命令都一直出现如下报错,这是因为关键的挖矿进程——zfsutils-md5sum还在运行,
/etc/ld.so.prelod利用Linux的/usr/local/lib/libnss.so预加载型恶意动态链接库的后门
ERROR: ld.so: object'/usr/local/lib/libnss.so' from /etc/ld.so.preload cannot be preloaded (cannotopen shared object file): ignored.
关于ld.so.preload文件的解释可参考:
使用lsattr_new 查看ld.so.preload文件的特殊权限
root@ubuntu:/etc# lsattr_new ld.so.preload
ERROR: ld.so: object'/usr/local/lib/libnss.so' from /etc/ld.so.preload cannot be preloaded (cannotopen shared object file): ignored.
-u--ia--------e--- ld.so.preload
# 执行以上命令后,退出重新登录,否则之前的bash是注入过libcurl.so的
# 下面的命令要等所有注入过libcurl.so.2.17.0的进程都退出后才有用,否则还会被改
取消设置的权限
root@ubuntu:/etc# chattr_new ld.so.preload
ERROR: ld.so: object'/usr/local/lib/libnss.so' from /etc/ld.so.preload cannot be preloaded (cannotopen shared object file): ignored.
root@ubuntu:/etc# pwd
ERROR: ld.so: object'/usr/local/lib/libnss.so' from /etc/ld.so.preload cannot be preloaded (cannotopen shared object file): ignored.
/etc
root@ubuntu:/etc# cat ld.so.preload
ERROR: ld.so: object'/usr/local/lib/libnss.so' from /etc/ld.so.preload cannot be preloaded (cannotopen shared object file): ignored.
/usr/local/lib/libnss.so
root@ubuntu:/etc# rm –rf ld.so.preload
4、键盘敲得干脆非响的一步,连呼Nice!!!
删除以上两个文件后,便能看到了一直被隐藏的进程zfsutiles-md5sum,该进程使用top、ps、unhide等命令均无法查出来。
从下图能够看到进程zfsutiles-md5sum,占用服务器上所有CPU,运行累计占用的时间以及CPU 占用率。
通过上图中的zfsutils-md5sum进程的pid是2649,使用命令:cd /proc/2649 下,可看到红框中内容,exe链接的/usr/lib/zfs-linx/l2arc.mod/zfsutils-md5sum就是病毒的主程序
使用命令:kill -9 2649,杀掉这个进程,CPU占有率立马恢复正常。
相当可惜,我尽然没有记录下这个关键性的kill,就出去冒烟了!!!
5、服务器中还有一个目录/root/.debug是包含挖矿病毒程序,因为不确定里面的部分内容,所以也需要将这个 文件夹删除。
五、遗留问题
以为找到病毒程序,并kill 掉占用CPU资源的进程就结束了??只想感叹人外有人,还没完呢!!!
1、问题1:系统的CPU 使用率虽然恢复正常,但仍然遗留有病毒程序,/usr/lib/zfs-linux/l2arc.mod/路径下的zfsutils-md5sum就是主运行程序,如下图,该zfsutils-md5sum文件使用重新替换过的lsattr_new 也不能查看该文件具有的特殊权限信息,同时对该文件进行操作一直提示权限被拒绝。
2、问题2:su – 普通用户 提示权限不够,对系统中权限设置进行了检查,是正确的,新建立test用户进行测试,结果也是提示权限拒绝,这是因为将前面提到的/root/.debug文件夹权限改为:700,属主属组均为root,才导致的su – 普通用户提示权限失效;将该目录权限改为755后,su – 普通用户功能恢复正常,可是该文件是含有病毒的程序,最后也将该文件夹删除了。猜测可能是因为环境依赖问题,打算重启一次服务器,重启后却发现,服务器网卡无法配置IP地址。重启前未对网卡配置文件进行过任何修改,同时后面也排查了网卡配置文件,重试了几次后都未能将网卡绑定上IP地址。