最近沸沸扬扬的黑色绿洲(BlackOasis) APT 利用了Adobe Flash 的漏洞CVE-2017-11292。最近,我们发现除了黑色绿洲 APT 外,还有另外一个APT 攻击也利用了CVE-2017-11292这个漏洞。
这个APT 样本是一个大小为14K左右的.doc 文件,文件名为”World War3.doc”,这文件名就吓死本宝宝了。双击运行的话,会发现Word 一闪而后退出,同时产生一个新的Word进程。
显示的内容如下。大意是关于朝鲜核武器的评论。
浓浓的APT 攻击味道啊。
解压这个doc文件,发现有个activeX1.bin文件很可疑。
喂到十六进制编辑工具里面瞅瞅,
果然,是个doc文件!
把这个doc文件扫描一下,
发现里面嵌套了2个 3.8K大小的SWF文件, 事实上这两个SWF文件一模一样。估计这里攻击者犯了一个小错误,同一个文件嵌入了2次。
把SWF文件喂到反编译工具里,
代码非常简单,将binaryData里的数据解压缩,然后通过Loader.loadBytes() 加载。解压后数据如下图所示。
哦,卖高得,头上3个字节是C1 3B 69 这是个神马文件格式。Loader.loadBytes()怎么能加载呢?
仔细看一下init代码,发现下面这3行,
原来悟空你又调皮了,偷偷把SWF的文件头给替换了。把’CWS’文件头补回去。再次喂给反编译器,就可以看到第二层的真面目了。关键代码如下图
这段代码非常清晰:
首先去服务器“/p99uvs0.php”下载一个配置文件:配置文件内容如下:
k1=77wn6p1cl1k4&k2=3q1htxrk0ocm6uax&k3=131&k4=177
参数定义如下表:
k1 | 漏洞利用的 URL |
---|---|
k2 | 有效载荷(Payload)的URL |
k3 | 漏洞利用模块解密的密钥 |
k4 | 有效载荷(Payload)的解密的密钥 |
获取到配置文件后,将从配置k2中指定的 URL去下载漏洞利用程序。这个漏洞利用程序是经过压缩和加密的。
解密算法较为简单,如下图所示
写个python脚本,可以解密出 漏洞利用程序。
解密后的漏洞利用程序是个混淆过的SWF程序。小样的,你以为你加个花我就认不出你来了?
反混淆后再反编译,发现如下代码:
这段代码,正是CVE-2017-11292的漏洞利用代码。在windbg中下断点,我们可以看到控制转移时发生的一幕。
在地址5e1c699f 处,控制通过call edx指令转移到了shellcode,地址0c0b0008处。
仔细分析该处指令不难发现,这种攻击方法是Hacking Team 使用的破坏
MethodInfo._implGPR() 虚函数指针的方法。这个函数是进入JIT 生成代码的函数,这种攻击的方法好处是可以绕过CFG的保护(这个函数并没有被CFG保护)。
在 0c0b0008 处,即为shellcode的开始。Shellcode代码并不复杂:
1) 首先在内存中找到传入的解密后的的有效载荷。它是个PE文件,在shellcode的后面,可以通过搜索PE文件头的方式定位到。
2) 然后通过ZwAllocateVirtualMemory()分配一块内存
3) 在2)分配的内存中加载PE文件,并将控制转移到PE文件入口点。
在这个攻击中,有效载荷为一个137K左右的后门,具体功能将在后续篇章中继续分析。
此APT 攻击应该发生在今年10月份左右。既然是APT 攻击,溯源分析必不可少。那么攻击者来自哪个组织呢。
无论从攻击手法,还是攻击中使用到的一些代码的细节,比如k1,k2,k3,k4的配置,还有解密方式,甚至是有效载荷,种种迹象都表明,这个攻击应该出自APT28 之手。此APT攻击和去年的一个APT28攻击手法极为相似。
在我们的分析中还发现,CVE-2017-11292这个漏洞利用程序,包含有很多冗余代码。为什么会出现这种情形呢?我们不妨大胆的假设,(这个漏洞利用在攻击时很有可能是 0 day), 这个攻击代码很有可能是从 0 day 军火商那里购买后集成进来的。
那么至于此次攻击究竟针对哪个国家呢? 想想APT28来自于哪个国家,而样本中doc文件中提到的内容,我想聪明的读者心里一定已经有了答案了。
*本文作者:兰云科技银河实验室,转载请注明FreeBuf.COM