17号paloalto发布了文章dealerschoice-sofacys-flash-player-exploit-platform,文中提到apt28正在编写adobe flash player的利用工具包,遂将样本下下来分析了一番。
和之前很多的flash漏洞利用不同,这次apt28将自身的漏洞利用工具作为ole的一部分捆绑到rtf文件中,运行结果如下,可以看到运行之后,直接显示的是一个word文档,内容是关于俄罗斯的,看来这次是要搞老毛子咯。。。。。。
Rtf文件处理
直接通过officeMalScanner跑显示是一个rtf文档。
那就使用REFScan解包咯,结果是两个OLE。
解压之后发现这两个ole文件中有一个即为swf文件。
Swf分析
反编译之后,符合paloalto文中提到的Main,ExtSwf,ExtSwf1,ExtSwf2的结构
具体的main函数如下分别解密shellcode,和exp.swf。
获取flash版本,根据版本返回对应的exp。
直接在loadBytes前通过trace将解密的swf输出。
这个地方报错了,主要是一开始使用的flash版问题,此时使用的是flash10,使用18以上就没有问题了。
换成高版本flash之后,可以看到log记录下的swf文件。
反编译解密之后的swf文件,结果不论是as3,还是ffdec都出问题了,尤其是AS3中报的错为zlib解压失败,通常的swf文件是FWS和CWS两种格式,CWS是压缩格式,flash在运行的时候通过文件头的标记判断,如果是CWS格式,则从偏移0x8的位置开始通过zlib解压,这个地方报错的话,说明我们的log中的文件出了问题。
在010中跑模板之后,可以看到这个地方UncompressedSize的长度确实是有问题(太大了。。。。。)
Windbg dump
这样的话就只好通过调试,使用我自己编写的监控工具,可以看到flash运行起来后的函数调用,如下图所示,对flash漏洞熟悉的话,就会知道这个地方是CVE-2015-7645的利用代码。
直接在LoayBytes的jit函数下断点,运行之后断下。
此时内存中的解密之后的exp.swf,可直接dump。
漏洞exp.swf触发后使用的shellcode。
此时再反编译dump出的exp,可以看到,这是一个标准的CVE-2015-7645利用。
在利用代码里还可以看到apt28准备将该工具实现跨平台的野心。
漏洞触发之后,shellcode会解压出对应的nshwmpfs.dll,熟悉apt28的都知道,nshwmsf.dll是近年apt28组织漏洞触发之后用于常驻的木马,该木马改编自13年泄露源码的carberp木马,这也是paloalto将这个样本归属为apt28的有力证据。
之后会通过设置HKCUSoftwareMicrosoftOffice testSpecialPerf:来实现常驻自启动,这个键值会在用户打开office的时候实现该恶意dll的自动加载,和通常的开机加载有很大的区别,这样做的好处就是一般的沙盒无法直接跑这一类的样本,而这样的做法也是apt28在今年早些时候使用的一种技巧,这也是将样本归属为apt28的有力证据,
具体导致加载的dll为wwlib.dll,其会加载该键值下的dll,并调用该dll导出的函数_GetPerfhostHookVersion@0,_InitPerf,_PerfCodeMarker,_UnInitPerf,覆盖版本2007,2010,2013,2015,2016的word,ppt,excel,outlook,onenote。
当然在你的机器上可以通过创建HKCUSoftwareMicrosoftOffice test,并移除当前用户对此键值的写权限来避免此类攻击。
实际上该键值是微软开发时的一个类似调试使用的键值,正常安装的时候根本不会使用,结果被apt28使用了。。。。。。
目前来看apt28的该工具包还不够成熟,虽然使用的漏洞确实够了,但是对于样本的保护相比于成熟的exploitkit还有很大的差距,paloalto中提到的dealerschoice2,在该版本中将exp代码移到了服务端,但是具体还处于测试阶段,而这种做法也确实是很多成熟flash exploitkit使用的技巧,后期会持续关注这个exploitkit的成长。。。。。。。
参考自:http://researchcenter.paloaltonetworks.com/2016/10/unit42-dealerschoice-sofacys-flash-player-exploit-platform