Txhollower使用Process Doppelgänging绕过检测
2019-11-29 11:09:17 Author: www.4hou.com(查看原文) 阅读量:203 收藏

背景

研究人员在分析GandCrab勒索软件过程中,发现一个有趣的行为:即在攻击链中使用了Process Hollowing技术。但这并不完全是一种Process Hollowing实现,而是一种包含了Process Doppelgänging的混合变种。

研究人员将该加载器命名为TxHollower,因为Transactional NTFS API的缩写就是TxF,而Malwarebytes研究人员将这种特定的实现方式称之为Transacted Hollowing。

研究人员通过分析获取的样本发现共有7个不同的版本,有超过20种不同的恶意软件家族在使用它。第一个样本就是几个月前的Osiris。本文将分析加载器的传播过程,以及开发者如何最大化效率并应对安全产品的检测。

技术细节

将GandCrab作为payload的样本与Osiris的第一阶段加载器是匹配的。

Bindiff of Osiris’s first stage loader (primary) main function to GandCrab’s loader (secondary)

图1:第一阶段加载器main函数和GANCRAB加载器的二进制文件差异分析

除了使用ntdll.dll的section重映射技术来绕过user-mode hook外,研究人员发现加载器还提供一种驻留机制,其中的功能是可以配置的。

几乎所有的可执行文件都是基于MFC库的应用,一些在编译时静态链接,一些负责动态加载。

加载器本身是一个shellcode,在二进制文件中XOR加密。执行时间接传递的,作为来自不同枚举函数的回调,比如EnumResourceTypesEnumWindowStationsEnumDesktopsEnumWindows。PE section中的payload和配置也是加密的,一般不使用。

Uncommon PE section names

图2: 不常见的PE SECTION NAMES

原来的Process Doppelgänging技术使用磁盘中现有的可执行文件,该变种技术在%TEMP%文件夹中创建了一个新的文件。加载器开发者选择的文件名Liebert.bmp可能是为了绕过根据文件扩展名的终端安全解决方案。

配置

不同版本的配置文件都有所不同,但配置文件的大部分是相同的。配置文件中有payload的解密密钥,payload的大小,加载器是否驻留以及用于hollowing的可执行文件名和id。

Hollowing target executable enum definition

图3: HOLLOWING目标可执行文件枚举定义

反分析技术

特定的可执行文件与运行的加载器进程有映射关系,目的是找到入口点地址。IDA动态分析显示,当新的PE模块加载时,当一个模块在不同基地址加载时,所有与之有关的信息都会重新计算地址。因为调试的PE是映射到模块,IDA认为它有新的基地址并移动所有的断点。新映射到模块并没有运行代码,因此调试器无法追踪指令。

版本变更

版本的编号是根据发现的时间或根据二进制文件中的标记的。V5版本的shellcode比v4要小很多,但是仍然比之前的版本大。

V1

V1版本的配置文件和payload都绑定在一起嵌入在二进制文件中。通过在内存中的PE中搜索一个特定的硬编码的值就可以找到。配置文件是base64编码的,payload是用对称密钥块加密算法Blowfish和384位密钥压缩加密的。

通过BITS COM对象来复制加载器到用户开始菜单文件夹来实现驻留。svchost.exe和wermgr.exe是Transacted Hollowing使用的硬编码的系统可执行文件,并使用Section Remapping技术来绕过ntdll.dll的hook。

V2 (OSIRIS LOADER)

loader shellcode中加入了解密操作。解码的配置文件用硬编码的密钥部分加密。V2版本中还引入了新的安全产品绕过技术。Shellcode中不同的点中使用了自定义的函数来将加载的模块名哈希操作,然后与固定值进行比较以确定加载器的动作:

加载器启动前会检查模块名,并创建一个新的窗口,然后在新线程中启动加载器shellcode。

如果存在UMEngx86.dll (Symantec SONAR),虚拟内存API就会用来执行hollowing,而不是transactions API。

V3

V3版本的payload和配置文件是分开保存的。配置文件只在特定PE的section中,用来标记该位置的值是通过PE header域中保持的值计算得来的。该版本中没有使用base64编码,配置都使用一种不同的算法来进行加密,用来标记位置的值作为密钥key。

Payload位于特定section中,可以通过硬编码的索引来通过PE section table直接访问。Transacted Hollowing将硬编码的系统可执行文件从wermgr.exe变成了WerFault.exe,并加入了对需要重定位的payload的支持。

Payload也可以在运行的加载器进程通过反射加载方法执行。该行为可以配置为Transacted Hollowing,但是很少使用。需要说明的是反射加载代码支持TLS回调,在一般实现中很少遇见。

V4

V4版本中改善了user-mode hook绕过来允许绕过WOW64层的hook,使用Section Remapping和64位的ntdll.dll。函数调用是通过修改版本的rewolf-wow64ext实现的。Hook绕过有一点点bug但是是为了防止加载器在32位的机器上运行,因为它使用的是64位的函数。

V5, V6

V5,和V6版本中修复了WOW64 user-mode hook绕过的漏洞。

V7

使用常规的Windows API函数来实现驻留。之前的实现作为回调雕作以防在初始化时找不到shell32.dll和kernel32.dll的必需函数。修复了防止支持32位机器的WOW64 user-mode hook绕过漏洞。

时间轴和统计数据

NetWire传播的加载器早期样本是来自于2018年10月3日。研究人员在多个GandCrab版本中都找到了加载器,包括v5和v5.2版本。加载器的最新版本也是最常用的,更多参见图4。最常见的payload是SmokeLoader, NetWire和Remcos RAT。

Distribution of TxHollower versions over time

图4: TXHOLLOWER版本的传播图

攻击者选择加载器自己的二进制文件或第二个硬编码的系统可执行文件作为hollowing的目标。有大量样本使用它来是在受害者机器上设置驻留。

Configuration usage in all samples

图5: 所有样本中使用的配置

虽然加载器支持反射加载,攻击者选择仍然使用了Transacted Hollowing,此外,攻击者还压缩了payload。

Configuration usage in samples newer than version 2

图6: v2版本之后的样本中使用的配置

其他联系

研究人员发现了一些样本,分析后怀疑其与TxHollower的下载器和释放器相关。这类文件包括PE可执行文件、JS和文档。文档都是RTF文件看起来包含了宏和一些针对office的漏洞利用。一般名字都与发票和收据相关。GandCrab是通过漏洞利用组件来传播的,SmokeLoader和AZORult都使用过相同的漏洞利用组件,其他恶意软件也直接或间接与CVE-2017-11882相关。

总的来说,大多数来自payload的恶意软件都与漏洞利用组件相关。可能TxHollower是其他第三方提供的,或者与其他套件绑定了。

总结

使用process doppelgänging这类技术的情况在不断增加,这也说明并不是所有的安全产品都能检测和预防这种技术。


文章来源: https://www.4hou.com/technology/19431.html
如有侵权请联系:admin#unsafe.sh