利用WebSockets实现隐蔽命令控制:WSC2技术解析

本文深入探讨如何利用WebSocket协议构建隐蔽的命令与控制通道,详细介绍WSC2工具的工作原理、配置方法及实战应用,包括通过IE/COM对象实现EDR规避的技术细节,为渗透测试和防御策略提供新思路。

命令与控制与WebSockets:WSC2

Craig Vincent

这一切始于我与几位BHIS测试人员的讨论。当时我正在测试一个使用WebSockets的Web应用程序,该应用让我头疼不已,我正在发泄我的挫败感。渗透测试人员、红队和攻击者总是在寻找新的方法来绕过防御。因此,讨论转向如何将这些挑战用于进攻能力也就不足为奇了。有人提到,拥有一个使用WebSockets的命令与控制(C2)通道会非常酷。在我们深入探讨为什么这很酷之前,我们应该仔细看看WebSocket协议。

WebSocket并不是那么新。该协议最初在2000年代中后期出现在HTML5中。它获得了开发者的青睐,开始随浏览器一起发布,并于2011年最终确定了规范(RFC 6455)。WebSocket协议通过TCP在服务器和客户端之间促进全双工通信通道。这使得客户端和服务器之间能够实现真正的异步通信。这与HTTP协议的请求/响应性质大不相同。在WebSocket之前,实现“异步”通信最流行的方法是使用AJAX。但AJAX仍然依赖于客户端轮询服务器,因此它实际上只是半双工的。WebSockets允许服务器随意向客户端发送消息,反之亦然。

跟踪异步通信的流比跟踪传统HTTP请求和响应的流要困难一些。此外,使用WebSockets发送的数据格式几乎完全由应用程序开发者指定。正如我所发现的,这些因素使得测试使用WebSockets的应用程序更具挑战性。这也意味着防御者需要检查Web流量时要做更多的工作!因此,我们的想法是,我们可以使用WebSockets建立一个可能不会受到太多审查的命令与控制通道。

幸运的是,@Arno0x0x在这方面远远领先于我们,并编写了一个名为WSC2的工具,该工具可在GitHub上获取:https://github.com/Arno0x/WSC2。还有一篇很棒的博客文章介绍了该工具:https://arno0x0x.wordpress.com/2017/11/10/using-websockets-and-ie-edge-for-c2-communications/。

那么,让我们来试试WSC2吧!该工具几乎在克隆到攻击服务器上后即可使用。像C2服务器的IP地址这样的细节在一个名为config.py的配置文件中管理。我对此文件做了一些修改,比如配置回调指向我的命令与控制服务器,并设置新密码。

一旦启动,我发现WSC2的控制器组件直观且类似于我过去使用的其他C2应用程序。WSC2附带几个stager payload,但我决定使用PowerShell一行stager在我的Windows 10受害机器上启动一个代理。由于回调配置已经在单独的文件中处理,生成payload就像启动WSC2控制器并输入“genStager psoneliner”一样快。剩下的就是在我的受害机器上运行PowerShell一行命令。我立即得到了代理回调的回报!以下截图从控制器的角度显示了整个过程。

WSC2代理本身并没有包含大量功能。它确实允许你从受害机器上传和下载文件,以及进入shell并在远程主机上执行命令。

WSC2代理的一个有趣之处是,它通过Internet Explorer/Edge使用COM对象与C2服务器通信。@Arno0x0x为了规避EDR而加入了这一点,我认为这很酷。为了演示目的,我在受害机器上运行了Process Monitor(Windows Sysinternals Suite的一部分)来观察代理运行时参与网络通信的进程。果然,我所有的代理流量都显示为IEXPLORE.EXE。

我将Internet Explorer配置为通过受害端的Burp Suite代理流量。这使我能够看到从HTTP到WebSocket的连接升级。

我们还可以使用Burp Suite来查看向代理发出命令时生成的WebSocket流量。

使用WebSockets进行命令与控制应该是渗透测试人员、红队和防御者 alike 考虑的事情。WSC2使得在你的环境中建立WebSocket命令与控制通道以测试你的监控和防御解决方案快速而简单。

准备好了解更多吗? 通过Antisyphon的实惠课程提升你的技能! 随付随训培训 提供实时/虚拟和点播方式。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计