天堂之门(Heaven’s Gate)技术的详细分析 – 作者:东巽科技2046Lab

天堂之门.gif

背 景

近日发现了一款特别的恶意软件加载器,该加载器使用了叫做天堂之门(Heaven’s Gate)的技术,可以通过注入内存来释放恶意软件,并且能够规避杀毒软件的检测。 

天堂之门并不是一项全新的技术,但是仍然被病毒制造者广泛的使用。该技术基于32位应用程序的基础上,向64位进程注入恶意代码,从而隐藏API调用,使其更加难以被检测到。

具体的行为流程如下:

QQ截图20190731151141.png注:PEB是Process Environment Block的缩写,其中存储了进程用户态重要的数据结构。

详细分析

在64位系统中,32位的应用程序运行在一个WoW64的子系统中,这个子系统为32位程序提供了一个类似沙箱的运行环境。事实上这个32位程序运行的环境也是一个64位的运行环境,系统在创建32位进程时,首先创建一个64位的进程,然后再在其中创建一个32位的子环境。32位程序所调用的系统函数,最终都要通过64位的动态链接库而实现。

通过下图我们可以看一下,一个32位的进程不仅加载了C:\Windows\SysWow64下的动态链接库,也加载了C:\Windows\system32下的动态链接库。C:\Windows\SysWow64是提供给32位程序使用动态链接库;C:\Windows\system32是64位系统的动态链接库。

图片1.png

在这个基础上,代码如何从32位转向64位是一个关键问题。Winodws系统中,CS段寄存器用来标识目前所运行的代码是32位的,还是64位的。

下图是32位进程中寄存器的状况,可以看到CS是0X23。

图片2.png

而下图是64位进程中寄存器的状况,可以看到CS是0X33图片3.png

在Windows中,通过改变段寄存器CS的值就可以实现32位代码和64位代码之间的转换。 

下面我们来看一下两种模式之间转换的代码:

图片4.png

在上面的代码中,我们重点要理解的是retf这个指令,retf指令和ret指令是不同的。 

ret指令是常用的函数返回指令,ret仅仅弹出栈顶到IP寄存器(指令寄存器)中。

ret指令返回前 ret指令返回后
IP(栈顶)
ARG1 ARG1(栈顶)
ARG2 ARG2


retf是不一样的,retf又叫做far ret,是带有段寄存器的返回。retf同时弹出两个值,一个弹出到CS(段寄存器),一个弹出到IP(指令寄存器)。

retf指令返回前 retf指令返回后
IP(栈顶)
CS
ARG1 ARG1(栈顶)
ARG2 ARG2


现在我们再看上面的模式转换代码就容易理解了:

push _cs 把0X23或0X33压栈
call  $+5add  dword [esp], 5 把一个代码地址入栈
retf 模式转换


让我们从调试器中查看一下运行状况:

图片5.png

从上面的图中可以看到,retf指令的地址是0X706F124C。而此时栈顶的两个值是IP()X706F124D)和CS(0X33)。IP指向的是retf之后的指令。代码将从retf之后按照64位模式继续执行。 

上面的运行示例是从32位转向64模式的情况,要想反过来转换,只要把CS的0X33换成0X23就可以了。 

在完成了模式的转换之后,后面的一切就会变得简单起来。从PEB中获取进程所加载的动态链接库是shellcode中一个常用的技巧。本篇文章只简单的说明一下,不对这个技巧做过多的描述了。 

要获取进程PEB结构,首先要获得当前线程的TEB结构。可以通过R12寄存器或者FS寄存器获取TEB结构,TEB偏移0X30处就是指向PEB的指针。PEB->Ldr->InMemoryOrderModuleList保存了进程加载的模块列表。整个过程的重要部分大致如此。

下面是一个运用了此技术的32位的恶意软件NGay,但是它创建了64位进程,并完成了向64位进程的注入。

图片6.png


防护措施

1、不要轻易打开可疑文件,如电子邮件、可疑链接、可疑文档等等;

2、及时安装系统补丁,使用最新版本的软件;

3、安装杀毒软件,及时更新病毒库;

4、使用“铁穹高级持续性威胁预警系统”(简称“铁穹”)发现潜在的攻击行为,及时响应和阻断,避免造成业务中断或经济损失。

来源:freebuf.com 2019-07-31 15:32:04 by: 东巽科技2046Lab

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论