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

恶意软件如何将External C2和IE COM对象用于命令和控制

2019-03-08 12:20

背景

在Cobalt Strike 3.6中,引入了一项名为External C2(外部C&C)的强大功能,为自定义命令和控制(C&C)通道提供了一个有用的接口。

作为一个擅长于利用自定义C&C通道的红方队员,我立即着手探索External C2。在这篇文章中,我将简要介绍External C2规范、IE COM对象,以及它们如何用于命令和控制,最后将介绍如何实际使用。

External C2概述

如前所述,External C2允许第三方程序作为Cobalt Strike与其信标植入之间的通信信道。

External C2共包含如下组件:

1、External C2服务器:Cobalt Strike团队服务器提供的服务,允许第三方控制器向团队服务器发送和接收数据。

2、第三方控制器:自定义C2的“服务器端”元素。该组件负责与第三方客户端通信,并将数据中继传输到External C2服务器。

3、第三方客户端:自定义C2通道的“客户端”。该组件负责产生信标(Beacon),使用命名管道连接到该信标,并将数据中继到第三方控制器。

下图展示了External C2规范的高级概述。

1.png

现在,我们已经对External C2如何工作有了基本的了解。接下来,我们要深入了解一下具体的实现,也就是Browser-C2(浏览器C&C)。

Browser-C2架构

Browser-C2是一个External C2的实现,允许信标与团队服务器通过合法的浏览器进行通信。

下图展示了Browser-C2的体系结构:

2.png

第三方客户端本地HTTP服务器具有以下终端,这些终端可以在被攻陷的工作站上使用:

· /inject – 在当前进程中执行ShellCode

· /send – 将数据发送到本地信标

· /receive – 从本地信标接收数据

· /relay – 提供HTML文件,通过Internet Explorer将数据从第三方客户端中继到第三方控制器

· /ping – 用于检查HTTP Server的状态

第三方HTTP服务器具有如下终端:

· /arch/{architecture} – 提供架构编写者特定的信标ShellCode

· /send – 将数据发送到External C2服务器

· /receive – 从External C2服务器接收数据

在下表中,总结了Browser-C2体系结构中每个组件的实现。

Browser-C2组建流程:

3.png

第三方客户端是初始化Browser-C2通信通道的组件。首先,它创建一个Internet Explorer实例,然后启动本地HTTP服务器来处理来自浏览器的通信。第三方控制器和第三方客户端之间的所有通信都是通过Internet Explorer执行的,如上表所示。

尽管这种体系结构最初看起来可能会过于复杂,但实际上它具有许多优点,并且优于注入正在运行的iexplorer.exe进程的传统方法。这一点,我们在此前的文章中已经进行过描述。接下来,我们将更加详细的研究这些优点,并说明其对运营者带来的帮助。

父流程创建

我们在之前的文章中,描述了流程派生关系如何帮助蓝队判断可疑行为。假如chrome.exe派生了powershell,那么可能就意味着存在不良行为。我们还描述了在某些情况下,如何使用父流程欺骗来逃避这些检测。

这种技术的好处在于,当iexplorer.exe派生时,它是通过COM完成的,也因此其父进程并非winword.exe、wscript.exe或者其他同类程序。实际上,它是使用svchost.exe派生的,如下所示。我们建议威胁研究人员考虑将这一点添加到他们的检测规则之中。

4.png

除了检测的方式,使用Microsoft ASR(Attack Surface Reduction,攻击面减少)规则配置的环境也可能会阻碍子进程的创建过程。如果我们使用了面向Office系列的Payload(例如:宏),那么ASR可能会出现问题。ASR能够阻止子进程执行、注入其他进程以及更多进程的规则,如下图所示:

5.png

要测试ASR是否会阻止派生出来的Internet Explorer,我们使用PowerShell启用以下规则:

(阻止所有Office应用程序创建子进程)

Block all Office applications from creating child processes    - d4f940ab-401b-4efc-aadc-ad5f3c50688a
Add-MpPreference -AttackSurfaceReductionRules_Ids d4f940ab-401b-4efc-aadc-ad5f3c50688a -AttackSurfaceReductionRules_Actions Enabled

启用此规则后,我们可以通过尝试从Office内部运行进程,来验证它是否正在执行。该过程会失败,如下所示:

6.png

使用COM对象时,Internet Explorer将在DCOM服务进程(svchost.exe)下启动,如前所述,因此将绕过此规则。

进程注入

进程注入受到安全社区的密切关注,许多EDR(终端检测与响应)和反病毒解决方案目前都会阻止尝试注入其他进程的行为,或在发生相应行为时弹出警告。

为了解决这个问题,我们使用COM生成浏览器对象,并避免产生注入行为。通过引用InternetControl COM对象,我们可以创建与第三方客户端通信的iexplorer.exe实例。示例代码如下所示:

7.png

当我们运行上述代码时,将启动一个Internet Explorer实例,该实例将导航到我们选择的网站,在本例中为https://google.com/

考虑到这一点,我们在我们的实现中,使用IE COM对象导航到第三方客户端本地HTTP服务器上的/relay终端,IE将开始在第三方客户端和控制器之间中继数据,提供启动和通信的方法Cobalt Strike信标没有任何形式的进程注入。

设置Browser-C2

Browser-C2的源代码可以在MDSec ActiveBreach GitHub上获得。

将Browser-C2项目加载到Virsual Studio后,使用URL编辑ControllerURL变量。在此示例中,我们将使用运行控制器的内部实验室IP:

8.png

加载Aggressor脚本后,外部C2服务器将在端口2222上启动:

9.png

下一步是运行server.py脚本,这是第三方控制器。在一切就绪之后,就可以准备让信标连接了。

视频:https://vimeo.com/317289354

总结

本文主要介绍了如何使用External C2,以及如何解决可能会增加红方被检测风险的一些问题。需要注意的是,当前的实现仅支持单个信标,但实际上它不应该太过复杂,并且也不应该超过概念证明的范畴。

参考资料

[1] https://www.cobaltstrike.com/downloads/externalc2spec.pdf

[2] https://www.cobaltstrike.com/help-externalc2

[3] https://blog.xpnsec.com/exploring-cobalt-strikes-externalc2-framework/

[4] https://github.com/ryhanson/ExternalC2

[5] https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-exploit-guard/enable-attack-surface-reduction

本文翻译自:https://www.mdsec.co.uk/2019/02/external-c2-ie-com-objects-and-how-to-use-them-for-command-and-control/如若转载,请注明原文地址: http://www.hackdig.com/03/hack-54515.htm
知识来源: https://www.4hou.com/technology/16215.html

阅读:39691 | 评论:0 | 标签:技术 恶意软件

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

“恶意软件如何将External C2和IE COM对象用于命令和控制”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

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

推广

工具

标签云

本页关键词