记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

剖析NETWIRE网络钓鱼行动中对Process Hollowing的运用

2019-03-19 12:20

介绍

无文件攻击是当前较为常见的一种攻击手段,恶意软件通过其payload来逃避检测,而无需在磁盘上编写可执行文件。无文件执行最常见的技术之一是代码注入——攻击者不需要直接执行恶意软件,而是将恶意软件代码注入另一个进程的内存中去执行。

PowerShell在所有Windows 7及以上的版本中都含有,而且支持的特性非常多,因此PowerShell已经成为攻击者最常利用的工具之一。FireEye曾经在多个报告中提及过PowerShell用于恶意软件初始传递期间或后漏洞利用阶段的事迹。利用PowerShell,攻击者能方便地与其他Windows组件进行交互,进而隐秘快速地执行他们的活动。

本篇文章探讨的是在2019年2月观察到的钓鱼活动。它是一场无文件感染攻击,攻击者使用VBScript、PowerShell和.NET framework,利用process hollowing技术执行了代码注入攻击。通过利用.NET程序集会被直接加载到PowerShell内存中这一功能来执行恶意代码,而无需在磁盘上创建PE文件。

总结

图1展示了此次攻击中使用的钓鱼邮件,其内容是诱导用户打开存储在Google Drive上的文档。文件的名称表明参与者的目标是航空人员。我们注意到越来越多的攻击者选择使用云文件存储服务,为的是绕过防火墙限制来承载其payload。

1.png

图1.托管在Google Drive上的恶意脚本

图2展示了打开脚本时Internet Explorer发出的警告消息,说无法验证发布者。但根据我们的经验,许多用户会忽略警告并打开文档。

2.png

图2.Internet Explorer提示警告

执行期间。经过多层混淆之后,一个PowerShell脚本将被执行,该脚本会从远程URL加载. net程序集,并使用这些函数将最终payload(NETWIRE Trojan)注入到使用了process hollowing的良性Microsoft可执行文件中。这项动作是有可能绕过应用程序白名单的,因为攻击期间生成的所有进程都是合法的Microsoft可执行程序。

技术细节

初始文档里含有VBScript代码。当用户打开它时,iexplore会生成Wscript来执行此文件。该脚本使用了多层混淆来绕过静态扫描器,并最终运行一个PowerShell脚本来执行二进制payload。

图3和图4展示了在不同级别的脚本执行期间使用的混淆技术。

3.png

图3.第一类混淆技术,它使用log函数来解析宽字符

4.png

图4.第二类混淆技术,它使用分割和替换操作

然后,此脚本从paste.ee处下载一个编码的.vbs脚本并执行,如图5所示。Paste.ee是对Pastebin的一种较低规范的替代方案,我们在之前的许多攻击事件中也观察到过攻击者使用Paste.ee来承载其payload的案例。由于网站使用的是TLS(传输层安全协议),大多数防火墙解决方案无法检测通过网络下载的恶意内容。

5.png

图5.下载第二阶段脚本并创建调度任务

该脚本会将自身复制到Appdata / Roaming,并使用schtasks.exe创建一个VBScript的计划任务(每15分钟运行一次)来实现持久性。

在对下载的第二阶段VBScript进行进一步去混淆之后,我们获得了通过shell对象执行的PowerShell脚本,如图6所示。

6.png

图6.去混淆的PowerShell脚本

该PowerShell脚本会从paste.ee上下载两个Base64编码的payload,payload里包含了二进制可执行文件。文件中的字符串将被存储为PowerShell脚本变量,并且不在磁盘上创建任何文件。

微软在PowerShell中提供了多种与.NET framework交互的方式,用户可以通过自定义开发的方式来增进这种交互。由于传统安全监视工具在.NET进程运行时,对其行为的可见性是有限的,因此利用PowerShell与.NET的集成对攻击者而言十分具有吸引力。出于这个原因,诸如CobaltStrike和Metasploit之类的漏洞利用框架可以选择在.NET汇编代码中生成它们的植入。

在此例中,攻击者使用了System.Reflection.Assembly .NET Framework类中的Load方法。将程序集作为System.Reflection.Assembly的实例加载后,可以通过这个类似于C#对象访问成员,如图7所示。

7.png

图7:格式化的PowerShell代码

这段代码会标识计算机上已安装的.NET版本,并用它动态解析. net安装文件夹的路径。解码的dropper程序集作为参数传递给Load方法,生成的类实例将被存储为一个变量。

通过此变量能访问dropper的对象并调用方法R。.NET dropper的方法R负责执行最终的payload。

以下是方法R的参数:

· InstallUtil.exe(或其他.NET framework工具)的路径

· 解码的NETWIRE木马

当我们观察攻击期间产生的进程列表时(图8),并没有看到payload成为一个单独的进程。

8.png

图8.攻击期间产生的进程

我们注意到InstallUtil.exe进程是在挂起模式下创建的,通过对它执行时的内存构件与InstallUtil.exe的良性执行进行比较后可以得出结论,payload被注入了新生成的InstallUtil.exe进程的内存中。同时,我们还观察到没有任何参数传递给InstallUtil,这会在正常执行时导致错误,因为InstallUtil总是期望至少有一个参数。

从逃避检测的角度来看,攻击者选择了一种有趣的方法。即使PowerShell进程创建被检测到了,也能从其原始路径执行InstallUtil.exe。此外,InstallUtil.exe是内部自动化常用的良性文件,对于系统管理员来说这并不是恶意文件。

当分解了.net代码并消除混淆以理解代码注入的执行过程后,我们就能看到与process hollowing相关的Windows win32 API调用(图9)。

9.png

图9..NET dropper中用于process hollowing的Windows api

为了能从main处调用R,我们逆向并修改了c# dropper的代码。能够确认的是当方法R被调用时,InstallUtil.exe是在挂起模式下生成的。挂起进程的内存块没有被映射,并使用作为参数传递给方法R的payload程序部分进行重写。当process hollowing完成时,父PowerShell进程将终止。

Payload的深入分析

最终的Payload被FireEye Intelligence确认为是一个网络后门。后门接收来自命令与控制(C2)服务器的命令,执行侦察(包括收集用户数据),并将信息返回给C2服务器。

NETWIRE后门的功能包括密钥记录,反向shell和密码窃取。后门使用自定义加密算法加密数据,然后将其写入./LOGS目录中创建的文件。

该恶意软件还包含了一个自定义混淆算法,用于隐藏注册表项、api、DLL名称和其他字符串,使其不受静态分析的影响。图10提供了用于这些字符串的自定义解码算法的反编译版本。

10.png

图10:反编译的字符串解码算法

通过逆向和分析恶意软件,我们能够识别恶意软件具有以下行为:

· 记录鼠标和键盘事件

· 捕获会话登录详细信息

· 捕获系统详细信息

· 截图

· 监控CPU使用情况

· 创建虚假的HTTP代理

从已解码的字符串列表中,我们能够识别此示例的其他功能:

1.png

点击此处了解更多关于NETWIRE后门家族的更多信息。

Ioc

基于主机的指标:

image.png

基于网络的指标:

image.png

本文翻译自:https://www.fireeye.com/blog/threat-research/2019/03/dissecting-netwire-phishing-campaign-usage-of-process-hollowing.html如若转载,请注明原文地址: http://www.hackdig.com/03/hack-54616.htm
知识来源: https://www.4hou.com/web/16841.html

阅读:39516 | 评论:0 | 标签:Web安全 NETWIRE网络钓鱼

想收藏或者和大家分享这篇好文章→复制链接地址

“剖析NETWIRE网络钓鱼行动中对Process Hollowing的运用”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云