使用Skyhook实现规避性文件走私技术

本文介绍Skyhook工具如何通过混淆算法规避企业网络边界控制,实现文件的安全传输与提取。详细解析其双服务架构、混淆配置及实际应用场景,帮助理解现代网络渗透中的文件走私技术。

使用Skyhook实现规避性文件走私

引言

这篇博文向读者介绍了“混淆 hustle”,这是我喜欢使用的一个术语,用来描述将文件混淆并传输到由基于签名的边界控制保护的企业工作站的繁琐过程。然后介绍并演示了Skyhook,这是一个在GitHub上可用的新开源工具,作为一种可行的方法,消除了The Hustle的两个不可忽略的步骤,同时提供了混淆文件提取功能。

注意:Skyhook不是隐私工具

读者可能会因为使用加密算法来混淆数据而试图通过隐私眼镜来看待Skyhook。不要这样。加密算法的有效性取决于其实现,而这些实现是由一个白痴完成的。密钥在网络界面的各个点以明文显示,并且它们目前以明文形式存储在客户端的IndexedDB中。任何有权访问这些元素的人都可以轻松地从数据包捕获或暂存的文件块中恢复数据。

读者还应避免将Skyhook的往返混淆周期与端到端加密(E2EE)混淆。E2EE旨在确保只有拥有加密密钥的实体才能恢复数据,而Skyhook则相反:它混淆数据的时间足够长,以便走私过控制,然后在写入磁盘之前去混淆。明文进,明文出。

简而言之:Skyhook除了欺骗边界控制之外,不会增强传输文件的机密性。

背景与混淆 hustle

BHIS在妥协后场景中远程访问的方法通常涉及与客户合作,通过BHIS维护的VPN隧道建立到内部工作站的RDP访问。这种方法提供了安全可靠的网络访问方式以执行任务。

由于操作员在源自客户黄金镜像的工作站的标准用户上下文中操作,信标/ shell不会立即可用以促进加密文件传输。文件必须使用可能被TLS拦截入侵检测和预防系统(IDPS)审查的替代方法传输,这些系统旨在阻止可疑流量。这些条件导致操作员在传输之前对文件进行编码和/或加密,从而混淆其内容并规避检测。

虽然通常有效,但这种方法为操作员带来了繁重的开销。每个新检索的文件必须去混淆才能再次有用。更复杂的是,一旦在工作站上去混淆,文件可能会暴露给端点检测和响应(EDR),这取决于文件的内容,可能导致其被隔离,防御者收到警报。深度防御已进入聊天。

在这种情况下,对给定文件在传输之前进行两个阶段的混淆通常是有效的:一个用于EDR,另一个用于IDPS。受Sean Metcalf的Credential Shuffle的启发,我喜欢称之为“混淆 hustle”。例如,手动 hustle Snaffler二进制文件到企业工作站的过程可能大致如下流程图所示。请注意,Skyhook旨在自动化“网络过滤混淆”和“托管下载”阶段。

介绍Skyhook

Skyhook的开发是为了消除应用混淆以绕过基于网络的控制的手动 nonsense。使用HTTP(S)文件服务器无缝从磁盘读取明文文件,并以混淆块的形式提供给客户端。每个块通过一系列称为混淆器的管道算法,在传输过程中改变内容。除了文件内容外,文件列表和名称也通过相同的链传递以防止泄漏。

我们可以观察Skyhook方法如何混淆文件块,在以下截图中,该截图借自后续部分,概述了Skyhook的一般用法。如您所见,HTTP事务的每个关键元素都被加密和Base64编码(按此顺序)。

此外,请记住,Skyhook的网络界面也能够执行混淆文件上传。当发生这种情况时,JavaScript读取给定文件的切片,并在通过HTTP事务发送到服务器之前对每个切片进行混淆。然后,服务器接收每个块,去混淆,并插入到目标文件中。

Skyhook服务架构

在开发的早期规划阶段,我们决定使Skyhook尽可能可配置,同时最小化操作员的学习曲线。选择网络界面作为最佳方法,但我们也希望确保账户和混淆配置不能被轻易检查。为了适应这种方法,我们决定Skyhook二进制文件应同时运行两个通过React网络界面暴露的HTTPS服务。

管理服务

  • 用于管理账户和应用混淆配置。
  • 与传输界面不同,以确保秘密值不暴露给防御者。
  • 应仅从友好来源/设备访问,即那些没有防御者控制的设备。
  • 还生成到传输界面的链接,这很方便,因为路径通常是随机化的。

传输服务

  • 由操作员从非友好来源/设备访问,即那些被防御者监控的设备。
  • 应使用用户级凭据访问此服务。
  • 用于流式传输文件到服务器端网络根目录和从该目录流式传输文件。
  • 混淆算法在网络汇编中实现,允许以下用go编写的算法编译用于网络浏览器:
    • AES
    • Base64
    • Blowfish
    • Twofish
    • XOR
  • IndexedDB用于存储混淆的下载文件块。

以下图表说明了此架构的基本数据流。

我们建议在部署Skyhook时考虑“深度进攻”。在内部,我们将Skyhook部署到容器堆栈,并通过CDN暴露文件传输服务器。Skyhook的网络根目录在一对CICD管道中填充:一个动态混淆常见的C#工具,另一个消耗原始shellcode以生成增强的有效载荷。这种方法通过分隔能力和最小化手动键盘劳动为操作员提供价值。

管理服务

管理服务的存在是为了为操作员提供一种干净的方法来管理配置文件,而不必担心YAML的诡计。知道这只不过是一个美化的YAML编辑器。在这里进行的任何更改都会导致配置文件本身的更新。

操作员在身份验证后被带到“用户账户”功能,可用于根据需要添加和删除账户。

点击界面中的“混淆器”按钮显示当前的混淆配置。混淆器是配置的混淆算法。列表默认为空,但知道Skyhook在写入响应体之前总是应用一轮base64编码。这是一个安全机制,以确保混淆链不会产生可能破坏HTTP事务的任意字节序列。

可以通过点击“添加”按钮并选择所需算法来初始化混淆器。将出现一个接受必要输入的表单。调整配置后点击“保存”以实施它们。只需确保没有文件传输在进行中,否则失败是迫在眉睫的。

这是过度的,但我们总是可以选择通过相应地添加和重新排序算法来将它们链接在一起。只需知道每个阶段都会增加处理开销,因此从JavaScript恢复文件将是内存密集型且缓慢的。

管理界面的最终功能是一个简单的“快速复制按钮”,它生成到传输服务的链接。这些链接将包含当配置文件由Skyhook的创建命令派生时创建的动态生成路径,以及JS加载器的加密密钥(我们稍后会更多涉及)。

点击任何这些按钮将导致引用的链接被复制到剪贴板,以便操作员不必参考配置文件。方便!

文件传输服务

本节致力于演示Skyhook传输服务的一般用法,重点是如何将混淆应用于HTTP事务的各种元素。参见附录A:重新创建演示环境以访问可用于重新创建类似测试环境的演示Docker容器。

登录传输服务提供的网络界面会导致呈现网络根的列表。请记住,指向随机路径的链接在管理服务中可用。

身份验证后呈现网络根的文件列表,显示可交互的目录和文件。

切换到“demo-data”目录显示可以下载的文件。

使用Burp检查将界面加载到浏览器中的HTTP事务,我们可以清楚地看到到/login的身份验证POST请求和一个以base64编码参数结尾的较长URI的PATCH请求。后者有效地表示对列出网络根目录内容的REST调用。可以通过解码参数并观察“/demo-data”的真实值来确认。

注意:此事务未配置混淆器,因此仅应用了Base64编码。

单轮Base64编码并不是特别规避。幸运的是,Skyhook提供了四种可以以随机顺序链接在一起的附加混淆方法:AES、XOR、Blowfish、Twofish。添加XOR混淆器并将密钥设置为“secret”将加密上述内容以及文件数据。

客户端必须同步其混淆配置以继续与服务交互,否则将无法去混淆输出。检查应用XOR加密后的相同目录列表事务显示,数据不再能通过简单Base64解码值来恢复。

只需点击文件上的“下载”,界面将开始从服务器以块(默认1MB)检索它,如下所示当下载“100M.data”文件时。当所有块已存储且文件已重新组装时,浏览器将提示用户保存文件。

检查检索文件块的单个事务,我们可以看到HTTP请求的关键元素被混淆。

这是一个MD5哈希,以证明文件在分块和混淆下载过程后保持了完整性。每个文件名前缀的MD5指纹不是由Skyhook生成的。它是“skyhook-demo”容器的副产品。

上传大文件与下载它们一样简单有效。只需点击传输服务界面中的“浏览”按钮来选择并上传文件。检查分块上传请求允许我们确认所有值也被加密。

结论

Hustle是操作员在妥协后场景参与的早期阶段效率的令人沮丧的障碍。Skyhook已被引入作为一种潜在的方法,通过自动化过程的两个步骤来最小化hustle:应用混淆算法和文件托管。Skyhook的效用通过提供可用于促进混淆文件提取的上传功能进一步增强。

由于Skyhook在发布此博文前几天才向公众提供,很难确定底层混淆技术在面对良好配置的检测能力时的有效性。无论如何,BHIS操作员报告在少数使用它的任务中,零次被IDPS或其他基于网络的控制检测到的事件。如果Skyhook成为常规使用的实用程序,这预计会改变。

附录A:重新创建演示环境

我故意避免说明演示环境的配置以简洁,但有一个“演示容器”可用于快速演示Skyhook的功能。

假设Docker已安装,此命令应启动容器以供使用。可以配置Burp以检查各种请求进行检查,但知道大的响应体可能会使其陷入抽搐。此外,我建议现在使用基于Chrome的浏览器,因为Firefox在网络汇编中表现不稳定。

上述命令将在localhost上启动Skyhook服务:

  • 管理服务:https://127.1:65535
  • 传输服务:https://127.1:8443

注意在容器启动时从标准输出捕获管理凭据,否则管理界面将无法访问:

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