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

解析近期爆发的服务器挖矿病毒原理事情起因:同事解决服务器中挖矿病毒的过程可以看到,病毒的主要起因是利用了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 然后执行命令来达到清除文件的目的。

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 盘点|12款服务器监控工具「建议收藏」

    盘点|12款服务器监控工具「建议收藏」服务器监控工具功能相当强大,无论何时何地,我们都可以了解到服务器的功能以及性能。服务器监控工具的使用,可以让我们清楚的知道用户可以打开我们的网站,且确保网速不慢。只有这样做,才能留住宝贵的用户,以免因为系统停运的原因,导致用户丢失。基于此,我为大家收集了12款超实用的服务器监控工具。1、zabbixzabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。abbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问

    2022年6月12日
    82
  • js获取url参数值的几种方法

    js获取url参数值的几种方法一 字符串分割分析法 functionrequ paras varurl location href varparaStrin url substring url indexOf 1 url length split amp varparaObj for i 0 j paraString i

    2025年8月1日
    5
  • WebStorm常用快捷键(Mac版)

    WebStorm常用快捷键(Mac版)⌘——Command⌃——Control⌥——alt⇧——Shift⇪——CapsLockfn——功能键就是fn编辑Command+alt+T用(if..else,try..catch,for,etc.)包住Command+/注释/取消注释的行注释Command+alt+/注释/取消注释与块注释alt+↑向上选取代码块alt+↓向下选取代码块Command+alt+L格式化代码tab,shift+tab调整缩进Control+alt+I快

    2022年5月27日
    38
  • hive sql 窗口函数

    hive sql 窗口函数

    2021年11月27日
    52
  • linux下vi命令大全

    linux下vi命令大全进入vi的命令 vifilename:打开或新建文件,并将光标置于第一行首 vi+nfilename:打开文件,并将光标置于第n行首 vi+filename

    2022年7月2日
    22
  • linux网络发包工具_web抓包工具

    linux网络发包工具_web抓包工具如果想做模仿网络攻击的测试,选择高速小包发送工具,最好还是可以指定协议的。当然,我们研究这些可不是打算用来攻击他人的机器,搞网络破坏的,而是用来通过该方法测试收数据体验一下被攻击的感觉,哈哈,也顺便衡量一下机器的性能。这方面smartbit测试仪可以完全可以满足。可惜啊,一台都得好几十万,对于大多数人来说都不太划算。那么还有没有软件的发包工具可以实现高速按指定协议发送数据包啊?!有。还是要归功于l

    2025年8月27日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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