国外著名网络安全公司FireEye在2015年将其公司捕获到的一系列野外样本拿到VirusToal(以下简称VT,这是一个免费的病毒,蠕虫,木马和各种恶意软件分析服务系统)上检测,发现一些恶意样本文件能够躲避VT上所有厂商的杀毒软件,截止到披露这些样本(2016.4),有的检测时间甚至长达1年,如图1所示。
图1 未被检测到的恶意软件
FireEye统计了这些零检测率的样本,分析这些未被传统的基于特征匹配的检测方法检测到的在野恶意软件,并于2016.4.13发布一篇"GHOSTS IN THE ENDPOINT"报告,报告中指出这类恶意软件绕过这些杀软的技巧,同时报告中也增加了一些低检测率样本(VT<=3)的说明,如图2。这些样本虽然被一些杀软检测到,但是其绕过杀软的技巧依然值得安全厂商关注。
图2 低检测率的恶意软件
安全狗攻防实验室的安全研究人员认为这些绕过杀软的技术比较新颖,具有很强的破坏性,也在第一时间对FireEye描述的恶意样本文件进行还原分析,对其中的技术进行总结。
截止到目前,研究的样本都是来源于VT上的5种类型:Win32二进制文件、Office文档(包括Open XML格式)、RTF文档以及Hangul(韩国流行的办公软件)文档。
经分析这5种类型文件绕过技术均不同。例如,Win32二进制文件通过垃圾代码的填充 和加强壳混淆代码来躲避杀软;Hangul文档则是通过软件的一个0day(经分析为类型混淆漏洞);对于Office文档和RTF文档除了利用已知的漏洞,还可以通过各种变形的VBA、VBScript以及PowerShell等方式躲避杀软。
因此借助Office文档和RTF文档绕过杀软的姿势比较多,截止到目前这类样本在VT上的检测率依然很低,如表1所示。本报告将分析这类样本的绕过技巧。
MD5 |
文件名 |
检出率 |
95e89fd65a63e8442dcf06d4e768e8f1 |
Doc1.docm |
2/57 |
cda305a6a6c6ace02597881b01a116e3 |
CVE-2013-1331-doc.docx |
2/56 |
8de1ebacb72f3b23a8235cc66a6b6f68 |
Polnoe_raspisanie_igr.xlsm |
7/56 |
4b3858c8b35e964a5eb0e291ff69ced6 |
201507.xlsx |
6/56 |
b1f43ca11dcf9e60f230b9d6d332c479 |
Book2 – Copy.xls |
9/56 |
dc15336e7e4579c9c04c6e4e1f11d3dd |
dedinho no cuzinho.rtf |
10/56 |
aedd5d8446cc12ddfdc426cca3ed8bf0 |
S-old.xlsb |
11/56 |
497eddab53c07f4be1dc4a8c169261a5 |
Barclays_Q22015_IMS_excel_tables.xlsm |
8/56 |
表1 截止到目前典型样本检测率
可以看到截止到目前(4.22),一些样本的检测率依然很低。
样本细节分析
Sample1:S-old.xlsb hash:aedd5d8446cc12ddfdc426cca3ed8bf0
基本信息:
类型: XLSB
描述: VBA宏+ Shellcode木马加载
当前检测:1/52
第一提交时间: 9.28. 2015
最后提交时间: 1. 28. 2016
分析时间:4.22.2016
VT未检测时间: 至少4个月
根据描述,该样本是一个.xlsb格式(Open XML)的Excel电子表格文件,当打开这个电子表格时,受害人的电脑上出现标题为"2015年以色列暑假"的内容,并且试图诱导用户启用宏来观看完整内容,如图3所示。
图3 EXcel文件显示日历数据
正常情况下,一旦启用,主机就会感染病毒。因此解压该.xlsb格式文件,在..\xl目录下可以看到vbaProject.bin文件,如图4所示。该文件中嵌入VBA宏。
图4 解压后的vbaProject.bin文件
vbaProject.bin也是一种OLE格式的文件,如图5所示。
图5 vbaProject.bin文件结构
特别注意:根据Open XML的相关介绍,vbaProject.bin只是默认保存MS Office的宏,但是只要按照上述格式的说明,Open XML标准和MS Office可以允许任意宏的名字,因此如果单纯靠搜索名字的方式定位宏文件,有时候不一定成功。
既然vbaProject.bin为OLE格式标准,那么就可以使用oledump提取宏,然而结果报错,如图6所示。
图6 无法识别OLE文件
纠结之后放弃使用该方法,直接在表格中打开宏的工程文件,发现宏居然加密了(下同),如图7所示。
图7 加密的宏文件
所以猜测是不是被加密了,所以无法识别内部的宏。最后也没有找到解决的办法,只好尝试破解VBAproject密码,发现也不是很难,可以使用HOOK API的方法,具体可以Google之(下同)。得到解密后的VBA代码如图8所示。
图8 解密后的VBA
VBA先创建一系列的字符串,再将这些字符串拼接形成二进制文件,注意chr(77)+chr(90)创建的是MS-DOS的头部标志"MZ"。这些字符串由9个部分组成:A0-A8,最后拼接,重命名拷贝执行该二进制文件,如图9所示。
图9 VBA执行过程
执行完后,二进制文件写进文件系统中,并命名为NTUSER.dat{E6C0CB06-367C-4 B9E-8D56-14CBB2AF5A22}.exe,路径为:C:\Users\{name}\..,同时修改注册表键值如图10所示,随后通过ShellExecute() API 的 SW_HIDE 参数在后台悄悄执行。
图10 病毒一些操作
最后,释放的NTUSER.dat{E6C0CB06-367C-4 B9E-8D56-14CBB2AF5A22}.exe文件,在本地执行不起来,提示不是有效的可执行文件。。。。这个有点无解了。。。

总结
感染方式还是通过启用VBA宏来加载木马,不同的是在代码的处理上,这里通过字符串拼接形成木马文件,然而这种方法也不是很新鲜了,之前在分析 Rocket Kitten时,就已经有了这种方法。所以这里可以判断基于特征码的检测还是很脆弱滴。
2.此外样本没有混淆VBA代码,而是通过加密的方式干扰检测。但是更容易被分析人员检测,因为VBA代码的加密更容易破解。
Sample2:Barclays_Q22015_IMS_excel_tables.xlsm hash:497eddab5 3c07f4be1dc4a8c169261a5
基本信息:
类型: XLSM
描述: VBA宏+电子表格生成VBScript
当前检测:1/54
第一提交时间: 7.08. 2015
最后提交时间: 1. 27. 2016
分析时间:4.23.2016
VT未检测时间: 至少7个月
根据描述,该样本是一个.xlsm格式(Open XML)的Excel电子表格文件,当打开这个电子表格时,出现标题为图片内容,并且提示用户如何打开宏来观看完整内容,说明文字包括英文和希腊文如图11所示。
图 11 开启宏的提示
解密VBAproject密码,发现该样本在EXCEL中嵌入了宏。如图12所示。
图12 嵌入的VBA宏
VBA先创建释放目录,随后在其目录下创建名为ocagent.vbe的脚本文件,通过循环的方式将单元格内的脚本数据写进ocagent.vbe文件中,如图13。最后通过WScript启动该脚本文件。

A.保存在单元格A1中的代码
B.写进ocagent.vbe的混淆代码
图13 嵌入在表格单元格中混淆的脚本
释放的ocagent.vbe是一个混淆后的VBScript,这些混淆数据来自电子表格tmp中的单元格A1(图13,A)。
执行过程中,wireshark捕获到脚本连接的IP为: 94.70.155.253(如图14)
图14 wireshark抓包
在VBA宏中还可以看到下图(图15)代码,将地址重定位至http://0x5E469BFD,转化为10进制表示为http://94.70.155.253,和wireshark抓包数据是一样的。
这个地址就是C&C服务器地址,释放后的VBScript脚本和其进行通信,进而持续控制主机。
图15 连接C&C服务器地址
总结
该样本采用多种方法绕过杀软检测:
将后门数据VBS嵌入到某一个单元格中,再从单元格中读取,这样避免直接在VBA中出现代码,可以隐藏恶意代码;
VBS经过混淆,干扰检测;
VBA中硬编码的IP地址以16进制编码的格式存放,这样可以绕过传统的基于点分十进制匹配IP地址的方法。
Sample3:Book2 – Copy.xls hash:b1f43ca11dcf9e60f230b9d6d332c479
基本信息:
类型: XLSM
描述: VBA+Python shellcode
当前检测:0/54
第一提交时间: 8.20. 2015
最后提交时间: 1. 28. 2016
分析时间:4.23.2016
VT未检测时间: 至少6个月
这里作者首先玩了个小把戏,文件后缀是.xls,直接打开,会有提示,将后缀名修改为.xlsm则正常打开,Excel文件是空白的,如图16所示。
图16 空白的EXCEL文件
查看一下内部的宏文件,如图17所示。
图17 VBA代码
VBA代码比较简单,似乎除了对注册表进行操作外,没有什么可疑行为。注册表的操作也仅仅是对访问本地不信任站点的设置,例如如果URL策略值是0x00,动作是允许的; 如果值是0x01,则提示用户,具体见微软的相关说明。
此外宏实例化一个OLE对象,并通过xlVerbPrimary verb来加载对象。很有可能就是这个加载的OLE对象有问题,解压样本Book2–Copy.xlsm,在目录..\xl\embeddings下可以看到内嵌的ole对象oleObject1.bin,如图18所示。
图18 ole对象文件
根据经验这个ole对象oleObject1.bin内部应该包含恶意样本,解析oleObject1.bin样本,发现内部数据并没有经过混淆,直接提取文件偏移值为0x7a71和0xb78d的两个PE文件:
分析这两个文件,发现0xb78d处的PE是一个合法的python27.dll文件,而0x7a71处的PE是通过py2exe创建的PE文件。
注:py2exe是将python代码转化成windows能够独立执行的PE文件。
测试了一下py2exe生成PE文件的过程,发现每个生成的exe目录下会附带一个python27.dll,当然也可以将python27.dll集成到exe文件里面,因此主要感染文件是偏移值0x7a71处由py2exe生成的PE文件(取名为malwar.exe)。
尝试反编译malwar.exe文件,这里主要参考Py2exe原理剖析中的方法反编译malwar文件。Dump资源文件PYTHONSCRIPT,图19:
图19 dump PYTHONSCRIPT文件
PYTHONSCRIPT是一种二进制格式的文件,分析内部格式,可以将其进一步转化成.pyc文件,代码如下:
|
|
|
得到3个pyc文件,反编译最大的那一个文件,可以得到非常nice的反编译py代码,图20:
图20 反编译的核心Python代码
反编译后的python代码同样也经过了简单的混淆,但是不影响阅读(但是主体shellcode经过AES加密,因此无法解密),首先作为测试或者诱饵会先启动Windows的计算器,接着通过VirtualAlloc和CreateThread分配并创建shellcode线程,最后每60s执行一次shellcode完成攻击。Wireshark捕捉到会连接一个地址为31.168.144.18的C&C服务器,图21。
图21 wireshark抓包
最后再执行一遍原始的xlsm文件,释放..\AppData\Local\Temp\file.exe文件如图22所示,这个file.exe文件经过hash比对后其实就是上述的malwar.exe文件,最后通过VBA方法oo.Verb xlVerbPrimary执行file.exe,完成攻击。
图22释放file.exe文件
总结
将恶意软件嵌入在Excel的OLE对象中,通过宏去调用OLE对象中的恶意软件,这样VBA代码不存在恶意行为。
OLE对象包含的PE文件也很讲究,存在一个合法的python27.dll文件,这 样会混淆检测,此外最后恶意的file.exe是经过py2exe转化的,这样也会混淆杀软的检测。但是由于py2exe后的文件很容易被反编译,因此分 析人员会很轻松得到核心python代码。
核心python代码经过base64和AES加密,绕过基于特征匹配的检测。
Sample4:Polnoe_raspisanie_igr.xlsm hash:8de1ebacb72f3b23a82 35cc66a6b6f68
基本信息:
类型: XLSM
描述: VBA+PowerShell+shellcode
当前检测:2/54
第一提交时间: 10.14. 2015
最后提交时间: 1. 28. 2016
分析时间:4.25.2016
VT未检测时间: 至少3.5个月
打开Excel文档,显示的是俄文,同样提示开启宏,攻击者也是想尽办法让你开启宏,居然提供一个合法链接教你打开宏,如图23。
图23存在合法链接的EXCEL文件
还是从VBA代码执行查看一下内部的宏文件,如图24所示。
图24 VB脚本构造Powershell脚本
从上述VB脚本可以很清楚的看到VBA执行过程,首先执行带参数启动PowerShell脚本,这个过程和之前安全狗攻防实验室分析过的PowerSniff宏病毒(2016.3.21)相似,这也可能是该样本检出率比较高的原因之一。之后便是一系列的解压,并对主体shellcode进行Base64解密,加载至内存中执行。最后连接的C&C服务器地址来自俄罗斯IP 81.23.177.72。
总结
1.这类样本中一个使用VBA启动powershell执行样本文件,这种方法披露出来的时间是2016年3月中旬,然而从样本的提交时间可以知道其实早在2015年或者更早就已经开始利用了,并且能够绕过绝大多数杀软,这又证明了黑客们总是领先安全分析人员一大步甚至更多。
2.虽然shellcode包含在VBA内,但是经过一些列的加密(base64)和压缩,逐级处理,如此便简单绕过了基于特征值的检测。
Sample5:Doc1.docm hash:95e89fd65a63e8442dcf06d4e768e8f1
基本信息:类型: DOCM
描述: VBA+PowerShell+Netcat后门
当前检测:0/53
第一提交时间: 6.19. 2015
最后提交时间: 1. 26. 2016
分析时间:4.25.2016
VT未检测时间: 至少7个月
注:该样本截止到目前都没有在野外检测到,但是VT上目前也只有2个厂商能够检测到,可能是考虑危害过大,FireEye没有共享样本,下面是FireEye的分析过程。
Word文档打开后,显示了一些简单的消息,大意是"朋友,这个文档绝逼是安全的"如图25所示。
图25 显示消息
并非像作者所说的那样,一旦宏被执行,就会释放木马文件,VBA代码如图26所示:
图26 加载恶意代码
作者的思路很新颖,将PowerShell代码内嵌在文档注释中,如图27所示。
图27 嵌入在文档注释中的PowerShell脚本
PowerShell脚本随后访问远程主机。脚本下载并执行netcat,监听IP地址:192.168.52.129端口3724。一旦连接请求接收,PowerShell将会(通过–epowershell.exe)发送给客户端一个shell文件(PowerShell反向shell),如图28所示。
图28 恶意代码
还是类似sample4中的方法,黑客使用PowerShell代替传统的shell(cmd.exe),这种做法很实用。例如,PowerShell允许WMI服务,但是这个通过标准的命令是无法访问的。
总结
将PowerShell脚本隐藏在word文档的注释中,这个应该是样本绕过的核心技术了,所以有时候不一定需要非常复杂的技术绕过检测,只要你的思路够猥琐就行。
Sample6:dedinho no cuzinho.rtf hash:dc15336e7e4579c9c04c6e4e 1f11d3dd
基本信息:
类型: RTF
描述: RTF文件嵌入可执行文件
当前检测:0/54
第一提交时间: 10.22. 2015
最后提交时间: 1. 25. 2016
VT未检测时间: 至少3个月
分析时间:4.25.2016
打开RTF文件,可以看到嵌入了额外的恶意文件,jpg和packager包装的二进制文件,如图29所示。
图29 RTF包含的文件
嵌入的JPG图片可以直接打开,是一张H图(马赛克一下,图30),用来诱惑用户打开真正的二进制文件。
图30 jpg图片
由于RTF需要借助Packager.exe打开其中的二进制文件,因此需要依赖操作系统的特性。例如在win7或者更高版本的系统上安装office的不会附带packager.exe,所以无法正常工作,为了研究病毒特性,可以在win xp上打开嵌入的二进制文件:
图31 嵌入的二进制文件
在上述路径释放二进制文件:
图32 本地释放二进制
嵌入的二进制文件被RLPack加壳了。随后释放一个经过UPX加壳的Delphi二进制文件,该文件在操作系统上释放Spy-Net RAT。流程如下:
Spy-Net 可以允许攻击者通过远程shell在受害人主机上传和下载文件,操作注册表,执行进程和服务,抓取桌面图片,记录网络摄像头和麦克风文件。同时能够提取保存的密码然后切换主机的代理服务。
总结
作者主要是利用RTF可以嵌入package的特性,在文档中任意嵌入恶意软件,同时使用加密壳来混淆代码,这样可以绕过基于特征值检测,而在本例中,同时使用两种不同的加密壳进行加密。
文档病毒的特征
从目前的威胁类型来看,文档类病毒一直在不断提高自己的技术来对用户进行攻击,同时可以成功绕过大量AV的检测,从分析的样本来看,以下技术可以不被杀软识别:
1.在Office文档中嵌入对象;
2.使用恶意代码添加不同的脚本语言混淆检测,例如使用VBA脚本构建PowerShell脚本;
3.多种技术从Office文档中加载恶意内容;
嵌入Acticex控件
嵌入OLE二进制文件
嵌入文档注释
嵌入电子表格单元格
4.使用Python脚本生成的二进制文件;
5.多层加密壳压缩:RLPack+UPX。
安全狗,知名互联网安全品牌,领先的云安全服务与解决方案提供商。秉承“安全狗即服务”的理念,依托全球领先的安全技术与完善的大数据处理平台,帮助客户实现业务平台的安全、稳定、可靠运行。


