内容简介:“海莲花” APT组织(APT32),具备越南背景的APT攻击组织,以东亚国家为主要目标,以在越外企和目标国家特定机构为主要渗透对象。就目前的各家分析报告来看,“海莲花” 利用的网络工具和相关技术非常广泛多变,其中有高级的漏洞利用手段,也有非常简单的恶意工具,有自研的攻击组件,也有商业和开源的代码套装,如Mimikatz 和 Cobalt Strike。利用捆绑木马的文件为诱饵,从其中的 droppers或shellcode中释放或运行主要的恶意程序。经多个测试分析案例可见,“海莲花” 组织利用的木马程序和
本文中,CheckPoint研究人员基于对“海莲花” 木马程序的分析,编写了一段绕过其混淆技术的反混淆工具- APT32GraphDeobfuscator.py ,在逆向分析过程中,利用该工具,最终可以消除混淆指令,清晰地显示出“海莲花” 木马的运行调用流程,对木马分析和相关安全研究人员有借鉴帮助之用。
“海莲花” APT组织(APT32),具备越南背景的APT攻击组织,以东亚国家为主要目标,以在越外企和目标国家特定机构为主要渗透对象。就目前的各家分析报告来看,“海莲花” 利用的网络 工具 和相关技术非常广泛多变,其中有高级的漏洞利用手段,也有非常简单的恶意工具,有自研的攻击组件,也有商业和开源的代码套装,如Mimikatz 和 Cobalt Strike。利用捆绑木马的文件为诱饵,从其中的 droppers或shellcode中释放或运行主要的恶意程序。
经多个测试分析案例可见,“海莲花” 组织利用的木马程序和相关工具都经过了复杂的混淆编码,为了阻止或迷惑逆向分析人员,在其中添加了各种“障眼”的混淆技术,经验老道。
该反混淆工具需要基于开源逆向分析工具radare2的界面框架 Cutter,Cutter是跨平台工具,目的就是以界面方式直观友好地显示 radare2的分析原理。上个月,Cutter 官方引入了一个新的 Python 插件,CheckPoint也将在下面的反混淆工具编写中用到该工具。 (想查看该工具,请直接到以下“反混淆脚本”部份)
下载安装 Cutter
大家可以选择从 这里下载 最新版本的Cutter,如果你用的是 Linux 系统,可以使用应用镜像方式下载安装。Cutter最终的运行界面如下:
“海莲花” APT组织使用的木马
首先,我们来看看“海莲花” 组织使用的木马和相关程序样本,这里这个样本 486be6b1ec73d98fdd3999abe2fa04368933a2ec ,是木马感染链中的一个恶意程序,也是CheckPoint在最近才捕获发现的,其所有的运行特征和“海莲花”组织高度相似,尤其是和早期的恶意诱饵文档 115f3cb5bdfb2ffe5168ecb36b9aed54 非常接近。在早期的恶意诱饵文档中,“海莲花”组织在捆绑的木马中包含了一段VBA宏代码,用它来向受害者系统的rundll32.exe进程中注入了恶意shellcode,该shellcode中又包含了用于后续解码和向内存中反射加载dll文件的解码程序段,加载进内存的dll文件中就包含了木马的一个大概运行逻辑流程。
在后续感染阶段,木马会从相关文件资源中解码出一个配置文件,该配置文件存储了诸如C2服务器等木马运行反弹信息。接下来,相关程序段会尝试用定制的PE loader往内存中加载一个辅助DLL,该DLL名为HTTPProv.dll,能实现与C2服务器的通信。
“海莲花” 组织在其木马程序使用了大量的混淆技术,尤其是大堆大堆的花指令(Junk Code),这些花指令经常让木马分析人员迷失方向。另外由于逆向工具大多时候都只认栈指针,不能自动识别一些无关函数,所以也就造成了我们在逆向分析中的难度。
“海莲花” APT木马的混淆技术
在我们对“海莲花” 木马的逆向分析中可见,其中一个主要混淆技术就是,在相关运行函数中大量插入使用花指令(Junk Code)形成控制流混淆,这些插入的花指令基本都是毫无意义的代码块。如下:
在上图中,几乎整个代码块都充满了花指令,当然能完全忽略这些花指令块就好了,但是实际分析中还是相对较难。仔细分析这些花指令块,我们也能发现一些有意思的地方,这些混淆块都是由前一个块的失效跳转而来,且都是条件跳转。而且,每个混淆块都以一个条件跳转结束,这种条件跳转与前一个混淆块的跳转相反。比如说,上图代码块中的末尾跳转条件为 jo
基于上述分析判断,我们可以开始构建这些混淆块的特征,混淆的第一个特征是出现两个连续的块,而且,它们以相反的条件跳转到相同的目标地址而结束。另一个特性要求第二个块不包含有意义的指令,如字符串引用或调用。
当满足这两个特征时,我们可以说第二个块很有可能是混淆块。在这种情况下,我们希望第一个块跳过第二个混淆块,这样混淆块就会从我们的逆向分析流程图中消失。这种情况下,我们可以用无条件跳转,也就是简单的JMP指令,来替换其中的条件跳转实现混淆块绕过。如下:
反混淆脚本(Deobfuscator)
我们基于Cutter编写了反混淆脚本- APT32 Graph Deobfuscator ,它可以形成一个插件(Plugin)导入Cutter插件库,同时它可通过r2pipe方式与radare2进行命令行交互。
把该脚本形成插件导入Cutter插件库:
以APT32某恶意程序逆向过程中的fcn.00acc7e0函数为例,一开始逆向工具分析运行调用流程图中,混淆指令块为以下高亮红色部分:
用CheckPoint编写的APT32 Graph Deobfuscator进行反混淆之后,我们得到以下去混淆的运行调用流程图:
以下是去混淆前后的对比流程图,非常直观:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高效能程序员的修炼
[美]Jeff Atwood / 陆其明、张健 / 人民邮电出版社 / 2013-7 / 49
jeff atwood于2004年创办coding horror博客(http://www.codinghorror.com),记录其在软件开发经历中的所思所想、点点滴滴。时至今日,该博客每天都有近10万人次的访问量,读者纷纷参与评论,各种观点与智慧在那里不断激情碰撞。 《高效能程序员的修炼》是coding horror博客中精华文章的集合。全书分为12章,涉及迈入职业门槛、高效能编程、应聘......一起来看看 《高效能程序员的修炼》 这本书的介绍吧!