解析近期爆发的服务器挖矿病毒原理

解析近期爆发的服务器挖矿病毒原理事情起因:同事解决服务器中挖矿病毒的过程可以看到,病毒的主要起因是利用了Linux预加载型恶意动态链接库的后门,关于Linux预加载的知识可以参考这一篇文章:警惕利用Linux预加载型恶意动态链接库的后门 一、准备工作我们导出病毒文件 libioset.so,然后利用IDA反编译该so文件,得到如下图的函数列表:可以看到,里面有许多我们熟悉的库函数,例如fope…

大家好,又见面了,我是你们的朋友全栈君。

事情起因:同事解决服务器中挖矿病毒的过程

可以看到,病毒的主要起因是利用了Linux预加载型恶意动态链接库的后门,关于Linux预加载的知识可以参考这一篇文章:警惕利用Linux预加载型恶意动态链接库的后门

 

一、准备工作

我们导出病毒文件 libioset.so ,然后利用 IDA 反编译该 so 文件,得到如下图的函数列表:

函数列表

可以看到,里面有许多我们熟悉的库函数,例如 fopen(),stat() 之类的。

 

二、病毒的自我保护

同事提到过当初排查的时候用 ls 命令并没有查看得到 ld.so.preload 和 libioset.so 文件,这是为什么呢?让我们来看一下 ls 的源代码,首先执行命令 which ls :

解析近期爆发的服务器挖矿病毒原理

可以看到 ls 命令在 /bin/ls 下(ubuntu系统),然后执行命令 dpkg -S /bin/ls :

解析近期爆发的服务器挖矿病毒原理

这个结果代表的意思是 ls 命令在 coreutils 包中,接下来我的做法是到GNU的官方网站 www.gnu.org 去下载 coreutils 包然后用source insight 打开,找到 ls.c 文件,分析该文件可以发现,ls 命令主要是通过调用 stat 函数来获取文件的相关信息:

解析近期爆发的服务器挖矿病毒原理

但是前面可以看到,stat 函数已经被病毒恶意修改了,我们来看看 stat 函数的内容:

解析近期爆发的服务器挖矿病毒原理

可以看到,病毒作者很奸诈,当文件名等于 libioset.so,ld.so.preload,ksoftirqds 时并不会执行原来的 stat 函数,而是直接返回 0xFFFFFFFF,这也就是为什么执行 ls 命令并不能看到病毒文件的原因。观察其他被覆写的函数可以发现基本上都是类似的操作,如果文件名不是上面三个就执行原来的操作,如果是的话就直接返回无效值。

同事反应的 netstat 命令也无效了,所以分析一下 netstat 为何无效。通过同样的操作查找到 netstat 所属包是 net-tools,但是GNU上并没有 net-tools 包,搜索发现该包属于单独的项目,下载下来后分析,该函数会读取 /proc/net/tcp 文件:

解析近期爆发的服务器挖矿病毒原理

观察病毒链接库里的 fopen 函数,可以看到对 tcp, tcp6 和 stat 文件进行了特殊处理:

解析近期爆发的服务器挖矿病毒原理

而 forge_proc_net_tcp 和 forge_proc_cpu 覆写了文件已达到伪造的目的(函数前缀是 forge, – -!):

cpu:

解析近期爆发的服务器挖矿病毒原理

tcp:

解析近期爆发的服务器挖矿病毒原理

病毒自我保护的方法就是如此,覆盖原有的库函数,将对自己的操作过滤,以到达保护的目的。

 

三、病毒的攻击

在第一部分可以看到,该恶意链接库覆盖了比较多的系统库函数,但是其中大部分函数都是为了保护该恶意链接库而覆盖的,具有攻击作用的只有一个函数,就是 access 函数,看一下 access 函数的部分代码(为了安全考虑隐藏了病毒的脚本地址):

解析近期爆发的服务器挖矿病毒原理

可以看到,在 access 函数里,病毒作者丧心病狂的添加了三个 crontab 脚本,该脚本会执行病毒进程 watchdogs,从而达到添加 ld.so.preload 和 libioset.so 的目的。

原本 access 函数的作用是执行文件时判断文件是否可操作的,所以整个系统中调用 access函数的地方非常多而且非常频繁,因此一旦病毒注入成功,那么脚本添加过程就会非常频繁,就会出现删除 crontab 脚本但是过个几秒钟又出现的现象,而删除 crontab 脚本然后立马锁定文件确实能起到一定的抑制病毒的作用。

 

四、病毒运行过程

到这里大概就可以整理出病毒的整个运行过程了:

解析近期爆发的服务器挖矿病毒原理

首先 watchdogs 病毒进程会添加 ld.so.preload 和 libioset.so,这样就会覆盖掉原有的系统库函数,类似在原有的系统库函数外面加了一个壳,当某个地方执行 access 函数的时候,病毒脚本就会被添加进 crontab ,然后 crontab 执行病毒脚本,而脚本会执行 watchdogs 病毒进程,如此反复。仅删除 crontab 脚本并不能起到作用,然后因为病毒的自我保护措施,覆盖了几乎所有能操作到病毒的命令,所以也很难通过系统命令来清除病毒链接库。

因此,要想解决掉该病毒,可以先清除 crontab 脚本并锁定文件,防止执行病毒脚本,但是因为 access 函数执行非常频繁,所以这个过程必须要快,而且可能需要执行多次,因为可能失败。然后清除病毒链接库,但是因为系统命令都已被劫持,所以平常的调用系统命令并不能起到效果,但是可以通过静态编译 busybox 然后执行命令来达到清除文件的目的。

以上就是该病毒的原理,感谢同事的努力和分享,我才能完成这次病毒分析。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134260.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • AF自动对焦 CDAF PDAF「建议收藏」

    AF自动对焦 CDAF PDAF「建议收藏」前言主流的AF:CDAF,PDAF,laserassistAF(这个只是辅助,在微距或者拍摄纹理不明显的场景下好用)。1.cdaf原理CDAF的大致原理就是检测图像锐度或者等价于锐度的参数,不断推动马达寻找最清晰点实现合焦或者对焦。如下图:缺点:对焦准确,速度慢,由于camera帧率,cpu处理速度,马达反映时间问题不能实时对焦运动物体。2.pdaf原理计算相位差,将相位差转换为相位差和afcode的关系….

  • 动态规划C++实现–最长递增子序列

    动态规划C++实现–最长递增子序列题目:给定数组arr,返回arr的最长递增子序列。举例:arr=[2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,8,9]要求:如果arr长度为N,请实现时间复杂度为O(NlogN)的方法。一、先介绍时间复杂度O(N^2)的方法,具体过程如下:1.生成长度为N的数组dp,dp[i]表示在以arr[i]这个数结尾的情况下,arr[0…

  • micro f1和macro f1_correct score

    micro f1和macro f1_correct score首先,明确一个概念,精确率(Precision)和召回率(Recall)并不是只有在目标检测中才有的,是所有任务涉及到分类的都有。而且P和R是针对于每一类来说的,每一个类别都有自己的准确率和召回率,计算每一个类别时,该样本即为正样本,其他样本统一为负样本来计算。首先,先说F1score,它其实是用来评价二元分类器的度量。F1是针对二元分类的,那对于多元分类器,有没有类似F1score的度量方法呢?那就是这里提到的micro-F1和macro-F1macro-F1…

    2022年10月10日
  • python-获取图片的exif信息

    python-获取图片的exif信息

  • js删除数组中指定元素或者空字符串

    js删除数组中指定元素或者空字符串

    2021年11月22日
  • vsftp用户名密码配置_win10ftp服务器设置用户名和密码

    vsftp用户名密码配置_win10ftp服务器设置用户名和密码huangyandong于2011-05-1013:06:11发表:打开vsftpd的配置文件,redhat的配置文件默认为/etc/vsftpd.conf:要想使用本地用户登录的话则只需更改下列选项local_enable改为YESchroot_local_user=YES#当设置为YES时,本地用户登录后就自动转到他们的用户主目录中去。#注意!:该选项用安全问题,特别是当用户有上传文…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号