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

解析近期爆发的服务器挖矿病毒原理事情起因:同事解决服务器中挖矿病毒的过程可以看到,病毒的主要起因是利用了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)
blank

相关推荐

  • TinyProxy电信

    TinyProxy电信listen_port=65080;daemon=on;worker_proc=0;uid=3004;http_ip=112.80.255.21;http_port=443;http_del=“X-Online-Host,Host”;http_first=”[M]http://[H][U][V]\r\nHost:[H]\r\nX-T5-Auth:ZjQxNDIh\r\n”;https_connect=on;https_ip=112.80.255.21;https_port=443

  • PyCharm激活码永久有效PyCharm2018.3.5激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2018.3.5激活码教程-持续更新,一步到位PyCharm激活码永久有效2018.3.5激活码教程-Windows版永久激活-持续更新,Idea激活码2018.3.5成功激活

  • 在Ubuntu上使用FreeFileSync同步文件

    在Ubuntu上使用FreeFileSync同步文件FreeFileSync可以在Windows,Linux,macOS上面运行。本文使用操作系统是Ubuntu18.04。安装FreeFileSync下载程序,并解压。$wgethttps://freefilesync.org/download/FreeFileSync_11.0_Linux.tar.gz$tarxvfFreeFileSync_11.0_Linux.tar.gz解压之后进入FreeFileSync文件夹,就可以双击运行程序了。我们可以创建一个启动器,这样我们可以从桌面运

  • Mybatis实现*mapper.xml热部署-分子级更新

    Mybatis实现*mapper.xml热部署-分子级更新无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里以跳转到教程。需求:项目在开发阶段或是修复bug阶段,会有修改mybatis的mapper.xml的时候,修改一般情况都要重启才能生失效,如果是分布式项目重启有时会耗时很久,都是无尽的等待。如果频繁修改,那么时间都浪费到等待重启的过程。…

  • 【数据库】模糊查询[通俗易懂]

    【数据库】模糊查询[通俗易懂]【数据库】模糊查询

  • 【ClickOnce】自定义前提条件 Creating Bootstrapper Packages

    【ClickOnce】自定义前提条件 Creating Bootstrapper Packages背景以ClickOnce方式发布WPF程序时,在工程属性页的Publish标签中,单击Prerequisites按钮后可以选择需要安装的前提条件列表,比如.netframework。该列表未提供添加按钮或者管理功能,必须手工把自定义的前提条件添加进去。方法简单明了,把程序文件和要求的配置文件等存放到指定位置即可,如下:Walkthrough:Creati…

发表回复

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

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