freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

逆向分析“海莲花” APT木马的花指令反混淆工具
2019-05-13 13:00:00

“海莲花” APT木马本文中,CheckPoint研究人员基于对“海莲花” 木马程序的分析,编写了一段绕过其混淆技术的反混淆工具-APT32GraphDeobfuscator.py,在逆向分析过程中,利用该工具,最终可以消除混淆指令,清晰地显示出“海莲花” 木马的运行调用流程,对木马分析和相关安全研究人员有借鉴帮助之用。

“海莲花” APT组织(APT32),具备越南背景的APT攻击组织,以东亚国家为主要目标,以在越外企和目标国家特定机构为主要渗透对象。就目前的各家分析报告来看,“海莲花” 利用的网络工具和相关技术非常广泛多变,其中有高级的漏洞利用手段,也有非常简单的恶意工具,有自研的攻击组件,也有商业和开源的代码套装,如Mimikatz 和 Cobalt Strike。利用捆绑木马的文件为诱饵,从其中的 droppers或shellcode中释放或运行主要的恶意程序。

经多个测试分析案例可见,“海莲花” 组织利用的木马程序和相关工具都经过了复杂的混淆编码,为了阻止或迷惑逆向分析人员,在其中添加了各种“障眼”的混淆技术,经验老道。

该反混淆工具需要基于开源逆向分析工具radare2的界面框架 Cutter,Cutter是跨平台工具,目的就是以界面方式直观友好地显示 radare2的分析原理。上个月,Cutter 官方引入了一个新的Python插件,CheckPoint也将在下面的反混淆工具编写中用到该工具。(想查看该工具,请直接到以下“反混淆脚本”部份)

下载安装 Cutter

大家可以选择从这里下载最新版本的Cutter,如果你用的是Linux系统,可以使用应用镜像方式下载安装。Cutter最终的运行界面如下:

“海莲花” APT木马

“海莲花” APT组织使用的木马

首先,我们来看看“海莲花” 组织使用的木马和相关程序样本,这里这个样本486be6b1ec73d98fdd3999abe2fa04368933a2ec,是木马感染链中的一个恶意程序,也是CheckPoint在最近才捕获发现的,其所有的运行特征和“海莲花”组织高度相似,尤其是和早期的恶意诱饵文档115f3cb5bdfb2ffe5168ecb36b9aed54非常接近。在早期的恶意诱饵文档中,“海莲花”组织在捆绑的木马中包含了一段VBA宏代码,用它来向受害者系统的rundll32.exe进程中注入了恶意shellcode,该shellcode中又包含了用于后续解码和向内存中反射加载dll文件的解码程序段,加载进内存的dll文件中就包含了木马的一个大概运行逻辑流程。

在后续感染阶段,木马会从相关文件资源中解码出一个配置文件,该配置文件存储了诸如C2服务器等木马运行反弹信息。接下来,相关程序段会尝试用定制的PE loader往内存中加载一个辅助DLL,该DLL名为HTTPProv.dll,能实现与C2服务器的通信。

“海莲花” 组织在其木马程序使用了大量的混淆技术,尤其是大堆大堆的花指令(Junk Code),这些花指令经常让木马分析人员迷失方向。另外由于逆向工具大多时候都只认栈指针,不能自动识别一些无关函数,所以也就造成了我们在逆向分析中的难度。

“海莲花” APT木马的混淆技术

在我们对“海莲花” 木马的逆向分析中可见,其中一个主要混淆技术就是,在相关运行函数中大量插入使用花指令(Junk Code)形成控制流混淆,这些插入的花指令基本都是毫无意义的代码块。如下:

“海莲花” APT木马在上图中,几乎整个代码块都充满了花指令,当然能完全忽略这些花指令块就好了,但是实际分析中还是相对较难。仔细分析这些花指令块,我们也能发现一些有意思的地方,这些混淆块都是由前一个块的失效跳转而来,且都是条件跳转。而且,每个混淆块都以一个条件跳转结束,这种条件跳转与前一个混淆块的跳转相反。比如说,上图代码块中的末尾跳转条件为 jo <some_addr>,则其混淆块就会以 jno <some_addr>结尾;如果上图代码块以 jne <another_addr> 结尾,则其接下来的混淆块就会是以 je <another_addr>结尾。示例如下:

“海莲花” APT木马基于上述分析判断,我们可以开始构建这些混淆块的特征,混淆的第一个特征是出现两个连续的块,而且,它们以相反的条件跳转到相同的目标地址而结束。另一个特性要求第二个块不包含有意义的指令,如字符串引用或调用。

当满足这两个特征时,我们可以说第二个块很有可能是混淆块。在这种情况下,我们希望第一个块跳过第二个混淆块,这样混淆块就会从我们的逆向分析流程图中消失。这种情况下,我们可以用无条件跳转,也就是简单的JMP指令,来替换其中的条件跳转实现混淆块绕过。如下:

“海莲花” APT木马

反混淆脚本(Deobfuscator)

我们基于Cutter编写了反混淆脚本- APT32 Graph Deobfuscator ,它可以形成一个插件(Plugin)导入Cutter插件库,同时它可通过r2pipe方式与radare2进行命令行交互。

把该脚本形成插件导入Cutter插件库:

“海莲花” APT木马“海莲花” APT木马以APT32某恶意程序逆向过程中的fcn.00acc7e0函数为例,一开始逆向工具分析运行调用流程图中,混淆指令块为以下高亮红色部分:

“海莲花” APT木马用CheckPoint编写的APT32 Graph Deobfuscator进行反混淆之后,我们得到以下去混淆的运行调用流程图:

“海莲花” APT木马以下是去混淆前后的对比流程图,非常直观:

“海莲花” APT木马

总结

“海莲花” APT组织使用的木马混淆技术并不是非常复杂难以破解的,本文中CheckPoint基于样本分析,提出了一种反混淆解决方案,以Cutter和Radare2为框架,利用Python脚本,最终成功实现了对“海莲花” APT木马的反混淆,大大方便了逆向分析人员进一步对“海莲花” APT木马的深入剖析。

*参考来源:checkpoint,clouds编译,转载请注明来自FreeBuf.COM

# apt # “海莲花”
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者