夜间模式暗黑模式
字体
阴影
滤镜
圆角
主题色
pwnrige挖矿病毒解决

前言

突然天空一声巨响,服务器访问变的巨慢。第一反应以为网络出了问题,一上服务器发现,各种资源占用跑满,应该是中了挖矿病毒了。

但是和以前碰到的挖矿病毒不太一样,这个挖矿病毒隐藏了进程号,无论是使用htop、ps都看不到占用内存的进程号。

隐藏进程方式

这面思考的就是黑客是如何隐藏进程呢,我上网大概搜索查看下,大概是有以下几种方式可以将进程隐藏。

篡改ps、top命令,让该命令看不到挖矿进程。

对抗方式:通过使用md5sum、stat命令检查是否进行篡改,如发现篡改可通过备份或者其他项目系统中的命令进行替换。也可以使用专业的工具进行检测,比如AIDE 、OSSEC

利用mount命令挂载到/proc进行进程隐藏

由于ps、top命令都是通过扫描/proc目录的,所以可以利用mout将目录挂载到/proc对应进程中,这样就达到的隐藏进程的功能。例如:

mount /dev/sda1 /proc/2222

这样就对2222进程号隐藏了,使用ps、top的时候就查看不到该进程了。

对抗方式:使用df -h 命令查看当前挂载的目录是否挂载到/proc的pid进程中。

通过Linux用户进行分离进程

这种方式操作比较简单,一般用来防止用户之间可以相互看到启动的内容。将hidepid设置会2可以达到上述效果。(由于我使用的是root用户所以不存在这种情况了)

对抗方式: 可以查看fastab
vim /etc/fstab
proc    /proc    proc    defaults,hidepid=2     0     0

Hook系统调用

这就要从ps、top的命令执行原理来说了,这些命令执行一般分为以下几步:

  • 调用openat函数获取/proc目录的文件句柄。
  • 调用getdents函数递归获取/proc目录下所有(包含子文件)文件。
  • 调用open函数打开/proc/pid/stat,status,cmdline文件,获取进程数据,打印出来。

攻击者一般通过以下几种操作来达到隐藏进程的操作

  • 修改命令需要调用的函数源码,比如open()、getdents()
  • 修改libc库中的readdir函数源码
  • 利用环境变量LD_PRELOAD或者配置ld.so.preload使得恶意文件先于系统标准库加载,使得系统使用命令时绕过系统标准库,达到进程隐藏的目的。

前2个都是通过修改源码的方式,通过一些校验工具可以查验出来,就不做说明。这里重点说下第三种方法的实践:

首先先编写一个可以绕过进程的文件,例如网上的常用的工具:

https://github.com/gianlucaborello/libprocesshider

你可以直接用他的文件进行编译,也可以在processhider.c中修改readdir方法,只隐藏某个文件

编译文件,并将文件移动到/usr/local/lib中(这里我测试了下 只有将文件移动到系统加载的lib文件中才有用。如果在任意其他目录没有作用。)

将文件加载到系统中,实现架空系统的目的

实现的有2种方式任选其一都可以运行:

  • 添加LD_PRELOAD变量,将变量指定到改文件,放入到/etc/profile中。
vim /etc/profile
export LD_PRELOAD=/usr/local/lib/libprocesshider.so
  • 直接将文件指引到/etc/ld.so.preload中
vim /etc/ld.so.preload
/usr/local/lib/libprocesshider.so

测试一下效果,代码中的evil_script是一个循环发送到某个服务器的恶意代码,libprocesshider.so文件是让evil_script进程看不见。这个阅读下processhider.c文件就可以知道。

下面进行测试,运行evil_script.py文件 需要传入IP(符合正常IP既可)和端口(小于65532)2个参数。

可以看出来已经隐藏了evil_script.py程序,cpu运行上来,并找不到占用cpu的程序,测试成功。

测试将libprocesshider.so注释以后是不是可以看到evil_script.py程序

注释掉以后,使用htop命令又可以看到evil_script.py程序。

解决方式

将隐藏进程可显示

通过上述几种隐藏进程的检测,发现病毒中的隐藏方式为Hook系统调用,病毒没有将libprocesshider.so文件以环境变量的方式注入,而是通过ld.so.preload文件

在系统环境变量中未找到LD_PRELOAD
在ld.so.preload中发现,已经将其注释。

在使用htop命令的时候就可以发行,正在运行的挖矿进程了。

进入到/proc/2319中查找对应进行的exe文件发现,执行过程中已经删除文件,没办法通过反编译执行脚本的方式结束进程了。由于当时处理着急,忘记留截图,但是当时显示的是这个样子 exe -> /usr/bin/-bash (deleted) 表示在运行已经被删除,也是刻意隐藏代码的一种手段。

忘记截图将上诉替换成(exe -> /usr/bin/-bash (deleted)

挖矿病毒查杀

crontab定时任务中清理

可以通过crontab -l (查看定时脚本) crontab -e编辑定时脚本

发现挖矿病毒添加的定时脚本,这3个条脚本都是挖矿病毒添加进来的,进入到/var/tmp中,发现病毒有一个.system和.update/.update和.system/.system也包含了病毒的下载以及启动

通过脚本是可以看到,挖矿病毒运行以后自动删除当前脚本的,所以就出现前面那个在/proc/pid/exe中指引的目录被删除。这里的操作是将/var/tmp目录中的文件全部删除。并将crontab中的定时任务中包含挖矿任务全部删除。

开机自启动清理

检查/etc/rc.d/init.d/目录中发现pwnring挖矿的启动进程,并检查/etc/rc.d/rc*中是否也包含该进程,找到并全部删除。

通过检测发现ntp服务,也是被伪装的,和pwnrig的挖矿服务完全一样,所以删除ntp服务器,对服务器重新安装。

这里的所有的文件都利用chattr改变文件属性防止修改和删除的。所以需要将这些属性去掉在删除。

a:让文件或目录仅供附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防意外删除。

chattr 用于改变文件的属性, lsattr用于查看文件的属性。其中 +就是添加属性 -就是删除属性。

ntp服务通过 yum remove ntp 删除 可有通过yum install ntp重新安装下,也可以手动将自启动的服务都全部删除掉。

在进入/etc/systemd/system/目录中,检查是否有自启动的pwnrig服务,这一层就比较隐蔽了 可以用过find 搜索下。 我是这etc/systemd/system/multi-user.target.wants找到了pwnrig的服务,将其删除。

检查环境变量中是否有挖矿脚本

检查 文件中是否包含挖矿脚本使用命令为grep -rn “pw.pwndns.pw”(通过前面的shell发现,挖矿病毒是从这个域名下载的,所以可以简单匹配下)

  • /etc/profile
  • /etc/profile.d/*
  • ~/.bash_profile

检查以上目录发现,~/.bash_profile中发现还存在挖矿脚本,将其删除。

总结

通过以上的所有操作,在进行重启已经完全解决了挖矿病毒,将系统重启一下,发现运行一切正常。

如果你通过以上操作还发现,有残余的挖矿病毒,还是会过一段时间继续启动的话,这里可以给一个思路,你可以查看系统打印的日志。

tail -f /var/log/message

这里会显示系统的所有操作日志

现在已经可以通过htop查看到挖矿病毒了,你用kill -9 挖矿病毒pid 将进程终止掉,然后去查看日志,如果挖矿病毒再次启动,会在日志中显示启动的命令,以及对应的目录。这样你去当前目录在删除掉对应的脚本就可以。

关闭会自动启动,看到目录在/usr/lib/systemd/systemd中

其中也不用一直盯着日志 也可以用过命令进行检索 tail -f /var/log/messages | grep pwnrig(需要检索的信息)

评论

  1. lee

    一摸一样啊,,

    3年前
    2021-8-13 8:27:50

发送评论 编辑评论


				
上一篇
下一篇