一款门罗币挖矿病毒木马分析
目录
文章目录
0x00基本信息
文件名称 | d48ab2e921f5c725672fce16135d1f09_d48ab2e921f5c725672fce16135d1f09.vir |
---|---|
文件大小 | 468480 byte |
是否加壳 | 无 |
样本类型 | 挖矿木马 |
MD5 | d48ab2e921f5c725672fce16135d1f09_d48ab2e921f5c725672fce16135d1f09 |
0x01 概述
1 | 2 |
---|---|
木马病毒特点 | 跟任务管理器 |
攻击人群 | 所有电脑主机 |
活跃地区 | 全球 |
0x02流程图
0x03 技术细节详细分析
加载恶意程序
刚拿到这个样本,用peid查壳工具简单查了一下没壳,跑了跑行为,就拖进IDA分析了。可是发现IDA中的函数的参数都是0,函数都不起作用,慢慢感觉事情没那么简单。
没做任何处理直接拖进IDA,会发现是这样的:
通过IDA 只有一个函数分析不出来是干什么的,自然就专注到该函数:
用OD跟着跑行为。
走几步就会发现又是virtualAlloc,virtualProtect,将40A000地址的内容重新填写了类似函数地址的内容,又有遍历了节表像是进行解压PE。 怀疑是壳的代码,跟着跑跑,验证一下猜测。
不一会儿找到一个可疑的jmp:
跳转过去,发现疑似OEP的地方(大多我们自己写的程序 OEP 都会是一个call 加一个jmp这样子类型的)
试试dump下来
脱壳后,拖进IDA 尝试放在OD中调试,却发现直接跑了起来
大佬告诉我在脱壳的时候,取消勾选用原本的PE头,就可以恢复(其实不这样做脱完壳有30多Mb,明显脱的不对)。
其实这个样本脱壳也可以单步跟到 或者直接给virtualAlloc 下硬件执行断点。等加载程序把真正解密后的程序加载后,直接dump下来即可。
经历一番周折
拿到脱下壳的程序,细细品味。(后知后觉,感觉这个也不那么像壳,更像是一个加载器,将解密后的PE文件,加载在内存中执行,所以也可以不用去脱,直接把他加载在内存的程序dump下来是一样的。)
互斥量NIHILMsINERaassdaa
通过OpenMutex去检测能够成功打开互斥量,来判断互斥量NIHILMsINERaassdaa是否存在,如果不存在说明程序未被执行,继而创建互斥量NIHILMsINERaassdaa
侦测自身路径以及创建计划任务
该函数通过获取环境变量"APPDATA"的展开路径,并拼接svchostx64.exe 文件名 与当前模块完整路径进行判断,如果不在指定的APPDATA扩展路径下,就把自身拷贝到目的路径下
计划任务:
创建计划任务,每分钟一次创建一次计划任务,如果计划任务已经存在则强制创建任务并抑制警告。
计划任务名称“Adasdsadas3id”
运行程序 C:Users \john AppData Roaming \svchostx64.exe(是自身的复制体)
测试内存大小
尝试申请100000000字节大小的虚拟空间,并全部释放。怀疑只是检测当前虚拟内存空间够不够接下来进行的行为使用。
这段代码感觉对程序运行没什么用。
创建线程,保证系统处于工作状态
创建一个线程,该线程每一秒执行一次SetThreadExecutionState(0x80000041)函数,保证系统一直处于工作状态。
加载挖矿程序到申请内存
该函数将自身模块的.plato节表中提前写入的挖矿程序 加载到申请的虚拟内存空间中。
将该部分文件dump下来后,查看信息
这是一款开源的门罗币官方推荐的矿机程序。 下载地址在下面的溯源中。
创建傀儡进程,执行挖矿程序
该函数首先将挖矿程序所需的参数:矿池地址,账户名,密码,附加选项,挖矿线程数量等参数。并把参数保存在申请的堆空间中。
解密出来的参数内容:
创建傀儡进程,挂起创建进程,通过GetThreadContext读取进程基址,如果挂起的进程基址 跟挖矿程序的基址相同,直接卸载傀儡进程中整个模块,然后再在傀儡进程中申请和 挖矿程序基址相同的地址空间,然后将挖矿程序 写入傀儡进程中,并且将线程基址和入口点设置为挖矿程序基址和入口点。
实时监控任务管理器
该函数是一个死循环 一直在判断是否创建傀儡进程成功,进行递归调用注入函数。
此外,死循环中还每三秒打一次进程快照,枚举进程判断是否有Taskmgr.exe (任务管理器)进程,(程序自己编程没考虑到小写的taskmgr.exe,如果任务管理器名称taskmgr.exe,他就达不到自己期待的结果)
如果发现有任务管理进程,就终止傀儡进程,并一直进入等待,直到发现任务管理器进程已经关闭,再重新创建傀儡进程 进行挖矿。
此外 如果发现本进程在创建傀儡进程的时候向傀儡进程申请虚拟内存失败,就会退出本进程,等待计划任务的下一次执行。
0x04 样本溯源 & 作者溯源
文件 | md5 |
---|---|
挖矿程序(开源) | 308C9BA7B760BF48BF5E31C2271B406A |
矿池地址
矿池 | IP |
---|---|
monerohash.com:3333 | 107.191.99.95(美国纽约) |
挖矿程序 开源地址
https://github.com/xmrig/xmrig
作者钱包地址
4BrL51JCc9NGQ71kWhnYoDRffsDZy7m1HUU7MRU4nUMXAHNFBEJhkTZV9HdaL4gfuNBxLPc3BeMkLGaPbF5vWtANQni58KYZqH43YSDeqY
0x05 查杀,防御技术方案
1.删除病毒源文件
2.使用cmd命令行关闭与源文件同名的进程。
taskkill /in 源程序名.exe /f
3.将下面代码写成.bat文件
taskkill /in svchostx64.exe /f ::关闭傀儡进程
schtasks /delete /TN Adasdsadas3id /f ::删除计划任务
DEL %APPDATA%\svchostx64.exe /f ::删除释放的计划任务启动文件
运行。 重复上面操作直至ok。
0x06 总结
任务管理器也不一定会找到进程,任务管理器也可以被恶意样本用来躲猫猫玩,但是taskList 一些其他的简单的用命令查看进程还是要会的。
推荐阅读