无文件挖矿分析
1. 概述该样本为无文件门罗币挖矿,传播行为通过ms17010和hash传递进行传播,相关脚本保存在WMI 对象中,挖矿程序通过开源的PowerSploit中Invoke-MemoryLoadLibrary进行调用,相关操作比较隐蔽,在分析时部分相关的服务器依然存活,若有错误的地方望大伙指出,谢谢。
2. 样本信息
样本名 1.ps1
样本大小 4239412 bytes
MD5 CDC34DDF78A16D4CF8A3B8E7CC361406
SHA1 01111C0FCC8CC75FF0EF84CF9C7C9628FB4EABCD
3. 实验环境
windows 7 x64 ip:192.168.202.139
4. 简要运行
设置powershell执行策略后,运行脚本。
5.具体分析5.1简单去混淆
打开样本,样本经过混淆,开头有六个变量,先不管这六个变量:
看后面的字串,混淆思路比较简单,首先去除掉string中,w!~<mhl字符,然后逐个对字符toInt16,接着用.( $VeRbOSEpREfeReNcE.tOSTrInG()+'X'-jOIN'')生成的iex调用;我们去掉iex,执行后即获得原本字符串:
5.2分析解混淆后的脚本:
先ping两个域名update.7h4uk.com、info.7h4uk.com和两个地址185.128.43.62, 192.74.245.97,判断是否能通信
两个域名DNS均失败:
Ip地址185.128.43.62失效:
Ip地址192.74.245.97有回复:
再判断系统位数是否32位,否则下载64位的ps1脚本:
注册名为root\default:System_Anti_Virus_Core类,并把上面六个变量的数据保存到该类的属性中,其中版本ver=1.8:
root\default:System_Anti_Virus_Core类:
类中新增的六个属性:
如果保存属性失败,则执行以下操作:
设置标志位,运行cohernece.exe
$funs解码后为powershell脚本,其中内容文章后面有介绍。其中RunnDDOS 函数在$funs解密后的变量中,大意是如果$env:temp路径下没有cohernece.exe则请求http://$nic/logos.png、http://$nic/cohernece.txt,分别下载java-log-9527.log和cohernece.exe,并执行cohernece.exe:
Download_File函数具体实现如下:
若保存属性成功后,通过scan函数进行漏洞扫描,有ms17010漏洞的IP保存在$17属性,用eb7/eb8函数内网传播$sc变量解码出shellcode:
5.3安装WMI事件
安装WMI事件消费者,事件过滤名为Windows Event Filter,事件消费者名,Windows Events Consumer:
事件过滤参数如下:
https://attach.52pojie.cn//forum/202101/07/170034pmd342nomzddvl6r.png?l
事件消费者参数如下:
创建WMI属性,当捕获到指定事件发生,则执行恶意代码EncodedScript:
__EventFilter实例:
CommandLineEventConsumer实例:
5.4其他设置查询其他团伙后门,并删除:
增加一条名为netbc的安全策略,组织主机139/445端口通信:
增加名为WindowsLogTasks、System Log Security Check任务计划,
设置从不休眠睡眠和电源使用方案:
查找进程名包含powershell或schtasks,该进程包含使用端口为80或14444的tcp网络连接,认为挖矿程序已经在执行中,则停止该进程:
当没有触法到上面的catch分支则直接执行恶意代码脚本$script,否则解码并释放msvcp120.dll、msvcr120.dll,再反射调用mon挖矿程序:
5.5所执行的恶意代码EncodedScript分析:先判断服务器是否在线和延时时间:
访问'update.7h4uk.com/ver.txt判断本地版本与服务端版本是否一致:
跟接着是一系列准备操作,获取开机时间,解密并执行$funs内容,判断$dirpath路径下是否有msvcr120.dll、msvcp120.dll:
查找进程名包含powershell,该进程包含使用端口为80或14444的tcp网络连接,认为挖矿程序已经在执行中,不再继续执行之后的代码:
运行DDOS并结束包含字符“System_Anti_Virus_Core“的进程:
KillBot函数如下:
检查每个进程是否存在3333、5555、7777端口tcp链接,有则结束该进程:
获取WMI中的属性$mon、$funs,其中$mon解码后为门罗币的挖矿程序:
矿池和钱包如下:
解码$funs作为命令,$mon作为参数传入执行,使得可以在Powershell进程中注入执行矿机:
其中$RemoteScriptBlock就是反射调用的核心脚本,观察其主要的调用过程,发现主要调用了Invoke-MemoryLoadLibrary函数,其内容与https://github.com/PowerShellMafia/PowerSploit/blob/d943001a7defb5e0d1657085a77a0e78609be58f/CodeExecution/Invoke-ReflectivePEInjection.ps1一致:
继续跟进Invoke-MemoryLoadLibrary函数,该函数里使用CreateThread创建新线程调用挖矿进程,线程回调函数地址存放在$ExeMainPtr变量中:
接着解码得到$mimi属性的内容,其为mimikatz:
通过Get-creds函数反射调用mimikatz:
Get-cred函数详情如下:
其中$RemoteScriptBlock就是反射调用的核心脚本,跟进脚本看其实现,取得"powershell_reflective_mimikatz"函数地址转为委托并调用:
下面看脚本中得传播行为,先获得分配到电脑的所有IP并解码出传播用的shellcode:
判断开机时间是否小于1.5小时,少于则不攻击;传播过程如下,先调用Test-Port 探测ip地址是否开启445端口,再调用test-ip函数实现WMIExec攻击,需要mimikatz提供$NTLM,再通过scan函数进行漏洞扫描,有ms17010漏洞的IP保存在$17,扫描完后条用eb7\eb8攻击,$sc为解密的shellcode:
Test-Port函数实现如下:
test-ip函数主要调用如下,其中调用invoke-wmiexec函数用于hash传递攻击,该函数在$fun解码后的变量中:
invoke-wmiexec函数详情如下,其内容与https://github.com/Kevin-Robertson/Invoke-TheHash/blob/master/Invoke-WMIExec.ps1一致:
最后把有密码的ip和有漏洞的ip重新写入属性:
6清理:
结束并删除计划任务:
删除名为netbc的本地策略:
删除WMI项:
完,谢谢大家观看。
还会删除其他团伙的后门,那装个这个,再移除它,不就相当于杀了一次毒 看不懂啊,我为什么要点进来{:1_909:} xmr跌这熊样 还有人挖 11点才在公众号看到了这篇文章,大佬是鸡哥本人吗? 谢谢分享啊 谢谢分享 挖矿是个坑 谢谢分享 很有意思,多谢分享
谢谢分享啊