社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 822阅读
  • 2回复

[分享]xls宏病毒,程序不落地创建傀儡进程实现远控

楼层直达
z3960 
级别: 茶馆馆主
发帖
770867
飞翔币
207694
威望
215657
飞扬币
2511641
信誉值
8

萌新分析,很多不足,请大佬们提出问题,共同学习。基本信息
  FileName    FileSize    FileType    MD5  
  Order_679873892xls    47,4722 Byte    Rat    7641fef8abc7cb24b66655d11ef3daf2  
简介病毒是一个宏病毒,点击启用宏后会通过[size=; font-size: 10.5pt,10.5pt]mshta.exe[size=; font-size: 10.5pt,10.5pt]来访问url,得到要执行的代码,病毒会创建计划任务与设置开机自启,通过powershell执行代码,从url得到两段PE数据,通过宏加载第一个PE文件,然后通过第一个PE文件创建傀儡进程,傀儡进程是一个远控流程图 详细分析解密[size=; font-size: 10.5pt,10.5pt]病毒会调用mshta.exe  [size=; font-size: 10.5pt,10.5pt]http://bit.ly/8hsshjahassahsh[size=; font-size: 10.5pt,10.5pt] [size=; font-size: 10.5pt,10.5pt]打开网站后,发现是空白,在浏览器F12,查看网络请求,刷新页面 [size=; font-size: 10.5pt,10.5pt]往下滑,找到script代码,复制出来,复制到浏览器的console [size=; font-size: 10.5pt,10.5pt]去掉结尾的</script>,把unscape之前的内容改为console.log(,输出解密结果 [size=; font-size: 10.5pt,10.5pt]StrReverse[size=; font-size: 10.5pt,10.5pt]作用是使字符串反序,整理一下 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]最后会执行命令  WScript.Shell.RUN mshta [size=; font-size: 10.5pt,10.5pt]http://www.pastebin.com/raw/nv5d9pYu[size=; font-size: 10.5pt,10.5pt] [size=; font-size: 10.5pt,10.5pt]访问这个url后会发现这个页面已经挂了,但是在ANYRUN有人跑过这个样本,可以看见传回的参数 [size=; font-size: 10.5pt,10.5pt]同样的方法在console跑一遍,然后整理一下 [size=; font-size: 10.5pt,10.5pt]结束进程[size=; font-size: 10.5pt,10.5pt]第一段代码,调用CMD关闭进程winword.exe、excel.exe、MSPUB.exe、POWERPNT.exe[size=; font-size: 10.5pt,10.5pt] [size=; font-size: 10.5pt,10.5pt]创建计划任务[size=; font-size: 10.5pt,10.5pt]第二段代码,创建一个计划任务,名为Windows Update,每60分钟执行一次,执行的内容是[size=; font-size: 10.5pt,10.5pt]mshta.exe[size=; font-size: 10.5pt,10.5pt]http://pastebin.com/raw/vXpe74L2 [size=; font-size: 10.5pt,10.5pt]解密计划任务执行的内容[size=; font-size: 10.5pt,10.5pt]在浏览器打开url后,全都是混淆的代码 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]用一样的方法在Console里面用Console.log输出出来 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]复制到notepad++,看见代码最下面有个replace [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]按Ctrl+H将中间的字符串替换掉 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]得到两个字符串,用StrReverse函数将字符串反过来,最后是用powershell执行这段代码 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]代码解密出来为 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]利用powershell执行,第三行的代码来自url [size=; font-size: 10.5pt,10.5pt]https://pastebin.com/raw/wMG90xwi [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]经过解密后:得到一个MZ头的PE数据 [size=; font-size: 10.5pt,10.5pt]第四行的代码url为 [size=; font-size: 10.5pt,10.5pt]https://pastebin.com/raw/W455MkAZ [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]经过解密后,也可以得到MZ开头的数据 给创建傀儡进程传参这里先创建一个实例,类和方法都来自第一段数据dll中,然后传入两个参数,第一个是创建的进程名“MSBuiler.exe”,第二个参数是第二段获取的PE结构数据 [size=; font-size: 10.5pt,10.5pt]调用powershell,执行上面代码 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]第二段代码内容: [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]创建计划任务[size=; font-size: 10.5pt,10.5pt]访问 [size=; font-size: 10.5pt,10.5pt]http://pastebin.com/raw//JdTuFmc5[size=; font-size: 10.5pt,10.5pt] [size=; font-size: 10.5pt,10.5pt]获得要执行的代码 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]和前面一样,改成console.log [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]解密之后,发现与上一段代码相同,只是计划任务时间从60分钟运行一次,变成了300分钟运行一次修改注册表[size=; font-size: 10.5pt,10.5pt]第四段代码修改注册表,内容是[size=; font-size: 10.5pt,10.5pt]http://pastebin.com/raw/CGe3S2Vf[size=; font-size: 10.5pt,10.5pt]取回的内容 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt] [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]一样,放进console里面,改成console.log,解密出的代码如图[size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt] [size=; font-size: 10.5pt,10.5pt]最后还是和前两段一样的内容,在注册表自启动中写入,利用Powershell执行代码 [size=; font-size: 10.5pt,10.5pt]反混淆[size=; font-size: 10.5pt,10.5pt]通过前面MSBuilder.exe编译可以得到两个PE文件,一个DLL,一个EXE,都是用.net编译,都可用de4dot反混淆[size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt] [size=; font-size: 10.5pt,10.5pt]反混淆后使用dnSpy查看dll文件,发现其中还是有很多混淆,是ConfuerEX,用工具解一下ConfuerEX混淆[size=; font-size: 10.5pt,10.5pt]解混淆之前: [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]解混淆之后: [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]在JS代码最后,会调用.dll中的类和方法[size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt] [size=; font-size: 10.5pt,10.5pt]创建傀儡进程[size=; font-size: 10.5pt,10.5pt]在Dodo函数传入两个参数,第一个是JS代码中写的MSBuilder,第二个是JS代码中的$f,就是前面解密出的exe文件 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt]在五个目录下查找MSBuilder.exe [size=; font-size: 10.5pt,10.5pt]当查找到MSBuilder后,就执行下面的代码 [size=; font-size: 10.5pt,10.5pt]这个地方调用了tickleme函数,tickleme函数又调用了PEHeaderE和FUN函数 [size=; font-size: 10.5pt,10.5pt]PEHeaderE[size=; font-size: 10.5pt,10.5pt]函数: [size=; font-size: 10.5pt,10.5pt]FUN[size=; font-size: 10.5pt,10.5pt]函数里又调用了Smethod_0函数,传入的第一个参数是MSBuidler.exe第二个参数是exe的十六进制数据 [size=; font-size: 10.5pt,10.5pt]Smethod_0[size=; font-size: 10.5pt,10.5pt]函数,先创建了一个MSBuilder的进程 [size=; font-size: 10.5pt,10.5pt]获取到EXE的PE头和ImageBase [size=; font-size: 10.5pt,10.5pt]判断是32位系统或64位系统,调用获取线程上下文函数 [size=; font-size: 10.5pt,10.5pt]从内存中读取4字节数据,然后卸载映像,清空内存,方便后面注入 [size=; font-size: 10.5pt,10.5pt]得到exe ImageBase的大小然后申请对应大小的空间 [size=; font-size: 10.5pt,10.5pt]在申请的空间中写入exe的header [size=; font-size: 10.5pt,10.5pt]然后获取到节表,遍历写入节表的所有节 [size=; font-size: 10.5pt,10.5pt]将前面获取到的线程上下文放回,然后唤醒线程,完成创建傀儡进程,执行exe里的内容 EXE[size=; font-size: 10.5pt,10.5pt]exe[size=; font-size: 10.5pt,10.5pt]中可以看见C2服务器信息、互斥量、ID等信息 [size=; font-size: 10.5pt,10.5pt]进来先找到main函数 [size=; font-size: 10.5pt,10.5pt][size=; font-size: 10.5pt,10.5pt].SCG[size=; font-size: 10.5pt,10.5pt]就是new的自己,然后再调用Execute()函数,Execute函数内分别是This.SC、This.PT、This.INST三个函数,每个函数创建了一共线程,执行不同的代码 [size=; font-size: 10.5pt,10.5pt]其中包含有对C2服务器的TCP链接 [size=; font-size: 10.5pt,10.5pt]获得主机各种信息包括病毒ID、IP、主机名、系统信息、内存、杀软信息等,并用key值([size=; font-size: 9.5pt,9.5pt]lunlaylo[size=; font-size: 10.5pt,10.5pt])做分隔符,然后发送到服务器 [size=; font-size: 10.5pt,10.5pt]谷歌了一下互斥量“[size=; font-size: 9.5pt,9.5pt]RV_MUTEX-WindowsUpdateSysten32[size=; font-size: 10.5pt,10.5pt]”,发现是一个成熟的远控,名叫” [size=; font-size: 10.5pt,10.5pt]Revenge Rat”
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
833785
飞翔币
226630
威望
224648
飞扬币
2443889
信誉值
0

只看该作者 1 发表于: 2019-09-24
来看一下
级别: 超级版主
发帖
833785
飞翔币
226630
威望
224648
飞扬币
2443889
信誉值
0

只看该作者 2 发表于: 2019-09-24
不错,了解了