内容简介:“海莲花” 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进行反混淆之后,我们得到以下去混淆的运行调用流程图:
以下是去混淆前后的对比流程图,非常直观:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
软件测试经验与教训
Cem Kaner、James Bach、Bret Pettichord / 机械工业出版社 / 2004-1 / 35.00
本书汇总了293条来自软件测试界顶尖专家的经验与建议,阐述了如何做好测试工作、如何管理测试,以及如何澄清有关软件测试的常见误解,读者可直接将这些建议用于自己的测试项目工作中。这些经验中的每一条都是与软件测试有关的一个观点,观点后面是针对运用该测试经验的方法、时机和原因的解释或例子。 本书还提供了有关如何将本书提供的经验有选择性地运用到读者实际项目环境中的建议,在所有关键问题上所积累的经验,以......一起来看看 《软件测试经验与教训》 这本书的介绍吧!