freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Cobalt Strike: 解密混淆过的流量-Part 4
2022-04-17 21:05:46

didiernvisocyber threats, ForensicsNovember 17, 2021 6 Minutes

  • Cobalt Strike: 使用已知的私钥解密流量 - Part 2
  • Cobalt Strike: 使用进程内存解密流量 - Part 3
  • Cobalt Strike:使用已知的私钥解密流量-Part 1
  • Cobalt Steike: 解密被掩盖的流量 - Part 4(当前部分)
  • Cobalt Strike: 解密DNS流量 - Part 5

加密的Cobalt Strike C2通信流量可以通过可塑的C2数据转换进行混淆。我们展现如何进行混淆这些流量。

本系列博客文章描述如何使用不同的方法解密Cobalt Strike流量。在Part 1中,我们在Cobalt Strike恶意文件包中找到了用来加密的私钥。在Part 2 中,我们使用RSA私钥来解密Cobalt Strike流量。在Part 2和Part 3中,我们解释了如何在没有RSA私钥的,但是有进程内存转储文件的情况下如何解密Cobalt Strike流量。

在前3部分中, 我们的关注点在包含未被改变的加密的数据的流量:以队列返回的数据和发送到服务器的数据就是加密了的数据。



加密的数据经过可塑的C2数据转换之后变成看不出任何恶意的流量。在本文的例子中,加密数据隐藏在JavaScript的代码当中。

但是我们从何得知beacon是否是用这种方式将流量进行混淆了呢?在最近版本的1768.py工具的分析结果中能看到。我们来查看下Part 1中beacon的配置内容。

image

图1:默认配置可塑C2指令的beacon



我们再0x000b字段(可塑C2指令)发现只有一个指令:打印。这是默认的,这意味着beacon接收的加密数据是原封不动的:在解密之前不需要任何转换

在字段0x000d(HTTP的POST请求头), 我们看到,构建输出也只有一条指令:打印。这是默认的,这意味着beacon将原封不动的传输加密的数据:加密之后不需要做任何转换。

我们看一下修改过的可塑C2数据转换的例子:

image

图2:带有自定义的可塑C2指令的beacon

这里我们能看到不只有打印这个指令:“从尾部删除1522字节”,“从头部删除84字节”,。。。

这些指令用来对后面的流量进行转换(去模糊化),这样就可以进行解密。为了更加详细的解释他是如何工作的,我们将使用CyberChef工具手动进行转换。需要注意的是cs-parse-http-traffic.py工具能够自动的进行这些转换。

如下是单次从beacon发送GET请求得到团队服务器回复所抓到的包。

image

图3:返回信息经过可塑C2指令转换后看似像是JavaScript代码

从这里我们能发现的是,一个从beacon发送到C2的GET请求(注意到Cookie是经过元数据加密的)。这个回复看起来像是JavaScript代码,因为可塑的C2数据转换让数据看起来像是JavaScript代码。

我们复制回复内容到CyberChef的输入框:

image

图4:带有混淆输入的CyberChef

在1768.py工具的输出框中显示的是我们用来逆混淆这些返回数据需要遵循的指令

image

图5:反编码指令

现在开始,首先我们需要从回复包末尾删除1522字节。我们可以使用CyberChef工具的丢弃选项和长度负数(负表示从尾部开始丢弃)选项来完成这个操作。

image

图6:从尾部丢弃1522字节

然后,我们要从头部开始删除84字节的内容:

image

图7:从起始删除84字节内容

然后再从起始部分删除3931字节

image

图8:从起始部分删除3931字节

现在剩余的输出内容看起来似乎是BASE64编码的内容。确实。接下来就是使用BASE64解码指令(准确地说:URL的BASE64编码)。
image

图9:解码BASE64/URL数据

下一个指令是对数据进行异或运算。而进行这个步骤需要异或运算的钥匙。异或的可塑性C2指令,使用一个4字节长的随机密钥,它被预置在XOR的数据中。所以为了恢复这个密钥,我们把二进制输出转换为十六进制。

image

图10:转换后的数据的十六进制表示

起始位的4字节为异或运算的钥匙:b7 85 71 17

我们将其与CyberChef的XOR命令一起使用。

image

图11:异或运算之后的数据

注意,其实部位的4字节数据现在是NULL:这就是预期的结果,将字节与自身进行异或运算之后得到NULL字节。

最终,我们舍去这四个字节内容:

image

图12:完全转换过后的数据

最后我们的到加密数据是包含了需要beacon执行的C2指令。这是通过对可塑C2指令数据进行逆混淆之后的到的结果。现在,我们可以进行解密步骤,和part 3中的内容一样,使用进程内存转储文件来进行解密。

image

图13:从进程内存中提取解密密钥

cs-extract-key.py工具用来从进程内从转储文件中提取AES和HMAC密钥:查找失败了,没有能够从进程内存转储文件中找到密钥。

密钥没有能够找到的一种可能的原因是:进程内存是经过编码了,Cobalt Strike 支持的一个功能称为睡眠面具,在这个功能被启用的情况下,当beacon在睡眠状态,beacon中的特定进程内存数据(包括密钥)是经过异或运算的。因此,只有在当beacon被激活的时候(在数据交互或者是执行命令的情况下)数据才会是明文表示。

我们可以尝试解码这些进程内存转储文件内容。工具cs-analyze-processdump.py是一个能够解码具有活动睡眠掩码功能的信标的进程内存转储的工具。我们在我们的进程内存转储上运行它。

image

图14:分析进程内存转储文件(截图1)

image

图15:分析进程内存转储文件(截图2)

这个工具确实找到了一个14字节长的异或密码,然后将解码的部分作为文件写入到硬盘,文件后缀为.bin。

这个文件现在可以用cs-extract-key.py来使用,它和之前的命令完全一样,但用解码部分代替了编码的.dmp文件。

![img](C:\Users\airhao3‘s PC\Desktop\攻击ip汇总\攻击ip分析image\20211113-110838.png)

图16:从解码部分提取密钥

而现在我们已经恢复了密钥。

注意在图16中,工具报告发现sha256\x00字符串,然而在第一个命令中(图13中),并没有发现。这部分的确实可以当作是个beacon是否使用睡眠面罩的指示器,cs-analyze-processdump.py工具应该在提取要是之前使用。

现在,我们有了密钥,我们可以使用cs-parse-http-traffic.py工具对网络流量进行解码:

image

图17:流量解密失败

失败原因:是C2数据转换的可塑性强。cs-parse-http-traffic.py工具需要知道哪个指令用于在解密前应用哪些指令对流量进行逆混淆。就像我们用CyberChef手动做的那样,工具cs-parse-http-traffic.py需要自动做这个。这可以通过选项-t来完成。

注意工具1768.py工具的输出包含了一个执行指令(方括号里)简称记号

image

图18:可塑C2指令的简称记号

需要执行的指令(输入),记号为:

7:Input,4,1:1522,2:84,2:3931,13,15

展示执行结果(输出),记号为:

7:Output,15,13,4

这些指令可以放在一起(使用分号进行分割)通过选项-t 带入工具cs-parse-http-traffic.py:

image

图19:解密流量

现在,我们终于获得了解密的流量。在这部分流量中没有真正需要执行的命令,只是数据抖动:也就是一些随机长度的随机数据,用于对流量进行更多的混淆。

结论

我们了解了如何将可塑C2数据转换用于混淆网络流量,以及如何使用如下的指令对网络流量进行逆混淆。

我们使用CyberChef手动操作,确实,这样肯定不实际(手动只是为了解释这个概念)。我们也可以使用cs-parse-http-traffic.py工具得到加密命令解码后的结果。就如Part 3中一样,我们使用未知的密钥,在这里也是一样,区别在于这里我们需要提供解码后的指令:

image

图20:提取并解码加密过的数据

这时,我们可以使用这三个加密数据中的一个来回复密钥。

后面的步骤就和Part 3中的内容一模一样了,除了-t 选项必须要包括可塑C2数据转换结果。

本文作者:, 转载请注明来自FreeBuf.COM

# Cobalt strike # 系统安全
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
评论 按热度排序

登录/注册后在FreeBuf发布内容哦

相关推荐
\
  • 0 文章数
  • 0 评论数
  • 0 关注者
登录 / 注册后在FreeBuf发布内容哦
收入专辑