Cobalt Strike 分析:CS元数据编码和解码

admin 2022年5月18日03:09:55安全文章评论22 views7331字阅读24分26秒阅读模式

关键词

Cobalt Strike, 逃逸, 后漏洞利用阶段,元数据

1. 概述


Cobalt Strike是一款商业的威胁模拟软件,可在网络中模拟一个安静的、长期嵌入的Beacon。它能与外部的服务器通信以模拟命令和控制(C2)流量。由于其多功能性,Cobalt Strike通常被红队使用,但也被攻击者广泛用于现实世界的攻击活动中。Cobalt Strike的多功能性体现于其多样化的组件,包括对发送到C2服务器的元数据进行混淆的编码算法。
攻击者或红队可以在Malleable C2配置文件中为HTTP传输定义元数据编码标准。当Cobalt Strike进行C2流量通信时,它会将元数据(有关受感染系统的信息)编码,并与HTTP请求一起发送到Cobalt StrikeTeamServer

接下来,本文将详细介绍编码算法,描述Cobalt Strike框架中使用的编码类型的定义和差异,并涵盖一些常见的恶意攻击。具体地,演示了编码和解码算法如何在C2流量通信期间工作的,以及为什么Cobalt Strike的这种多功能性,使其难以被传统的防火墙防御。

2.

元数据编码算法




Cobalt Strike支持五种编码方案。RSA加密后的元数据经过编码处理后,可以方便地在网络协议中传输。

1 Cobalt Strike配置文件中的编码方案

Base64

Base64编码

Base64解码

Base64url

URL-safe Base64编码

URL-safe Base64解码

Mask

XOR Mask(使用随机密钥)

XOR Mask(使用随机密钥)

NetBIOS

NetBIOS +a’编码

NetBIOS -a’解码

NetBIOSU

NetBIOS+A’编码

NetBIOS -A’解码

3. Base64 编码和解码


Base64编码和解码是一种标准的RFC算法实现。下面是用于编码和解码数据的字符集列表。

[ 'A', 'B', 'C',   'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',   'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',   'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',   'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+',   '/' ]

接下来解释说明Base64算法的Malleable配置文件的使用。

3.1配置文件

在发送有关被感染系统的元数据信息之前,Havex.profile使用Base64编码对其进行编码转换。如下图所示,Base64编码算法对元数据进行编码,并将编码结果放在Cookie中。

Cobalt Strike 分析:CS元数据编码和解码
1 Havex配置文件中的元数据编码选项

3.2 HTTP C2流量

2显示了由配置文件生成的HTTP C2流量。突出显示的部分是Base64编码后的有关受感染机器的元数据。

Cobalt Strike 分析:CS元数据编码和解码

2 使用Havex配置文件的HTTP C2流量

3.3 Base64解码

  • 很多工具都可以解码加密的元数据,比如,使用PythonBase64库来解码。图3显示了一个示例脚本,用于解码数据并以十六进制格式打印。

  • 这是脚本中的解码数据,是RSA加密后的关于被感染系统的元数据:

751990bee317e74e4f2aa6f13078ef22dd884e065b738f8373f49dee401a069d5dfd1d3e39e94cc637e21364e1fd71ab3322fb9c7a987fc6aa27dfab981f077e7ddc2f20aba8e9d841250adc4edd4d15082445869278f2bbcf66e145aa74152a22b85c9b6c5f15d69f7d8b3708b33deea7198683d6468bd0424f537617f759b5”

Cobalt Strike 分析:CS元数据编码和解码

3 用于解码Base64数据的Python脚本示例

4. Base64URL编码和解码


Base64URLBase64编码算法的修改版本。其使用URL和文件名的安全字符进行编码和解码。
这是字符集:

[ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',   'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',   'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',   'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0',   '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_' ]

与标准的Base64字符集相比,修改后的版本将“+”替换为“-”,将“/”替换为“_”。填充字符“=”从编码数据中被跳过,因为它通常在URI中按百分比编码。
下面通过一个例子来介绍Base64URL算法在Malleable配置文件中的使用。

4.1配置文件

Cnnvideo_getonly.profile使用Base64URL编码来转换元数据信息。(注意,此配置文件是模拟合法CNN HTTP流量的示例,与该组织没有任何联系)图4显示了使用Base64URL编码算法对元数据进行编码并将数据附加到参数g。

Cobalt Strike 分析:CS元数据编码和解码

4 CNN视频配置文件中的元数据编码

4.2 HTTP C2流量

5显示了Beacon生成的HTTP C2流量。参数值是Base64URL编码的受害者信息元数据。

Cobalt Strike 分析:CS元数据编码和解码

5 使用CNN视频配置文件生成的HTTP C2流量

4.3 Base64URL解码

用户有以下选项来解码数据。
  • 用户可以将“-”替换为“+”,将“_”替换为“/”,同时添加填充字符“=”。被替换的字符串成为标准的Base64编码数据。然后可以使用任何Base64解码工具来获取解码后的元数据。

  • 使用脚本语言来完成这项工作。图6显示了用于解码数据的Python脚本。在示例中,添加了“=”以使输出与Base64编码兼容。

  • 脚本的输出是RSA加密的元数据。

“60495dff002eddaa0c409aaaae0fda592810993ae0ae319c87d62b65c54d92447daf2c1bc84930c5d90ed3a023227e254d3a2c28763be372bb7444ef5719d5948b99d33ede3775f51c216bba97bc5fd4777e819517e89a737284c784bdc30b1d6b3b7debe2448c1dc28b00e3ac611fd5a8fd070502f3f7f672786f6b5787af51”

Cobalt Strike 分析:CS元数据编码和解码

6 解码Base64URLPython脚本

5. NetBIOS编码和解码


NetBIOS编码用于对NetBIOS服务名称进行编码。Cobalt Strike工具在C2通信中传输受害者元数据时使用相同的算法对其进行编码。
NetBIOS编码算法中,每个字节由两个字节的ASCII字符表示。输入字节的每4位(半字节)通过向右调整并经过高位填0后,被视为一个单独的字节。然后再加上ASCII字符“a”,结果存储为单独的字节。以下是用于编码的字符集:

['a', 'b', 'c', 'd', 'e', 'f', 'g',   'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']

7演示了编码过程:

Cobalt Strike 分析:CS元数据编码和解码

7 NetBIOS的编码过程

让我们通过一个例子来了解NetBIOS算法如何配置Malleable

5.1配置文件

Ocsp.profile使用NetBIOS编码来转换受害者的元数据。图8显示了使用NetBIOS编码算法对元数据进行编码。结果数据将附加到URI

Cobalt Strike 分析:CS元数据编码和解码

8 OCSP配置文件中的元数据编码

5.2 HTTP C2流量

9显示了Beacon使用OCSP配置文件生成的HTTP流量。

Cobalt Strike 分析:CS元数据编码和解码

9 使用OCSP配置文件生成的HTTP C2流量

5.3 NetBIOS解码

10实现了Python脚本解码NetBIOS编码的元数据。
脚本输出的是受害者的RSA加密的元数据:

“5725245edcb589b305e33e02da1cda208ed083bed8a1ae0b3a87da0f9d6ebe31025ab67c58572acb9757288cc2e78bea414249fa8cb0783485a1b5a3c0863501fc1c89c6ac59b7129c51cacbfa197cc64eea31ec8ac204cbcdbefaecf19762f9efcc56280f3e9b183c37f98f371f5e1c08b645524646d7010af4408f4ebb8a2f”

Cobalt Strike 分析:CS元数据编码和解码

10 解码NetBIOS编码的Python脚本实现

6. NetBIOSU编码和解码


NetBIOSU算法是上面讨论的NetBIOS算法的改进版本。细微的变化体现于编码算法的字符集。在该算法中,字符集是NetBIOS算法中使用的字符集的大写版本。

[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’,   ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’]

NetBIOSU使用与NetBIOS算法相同的编码过程。有关详细信息,请参阅图8
让我们通过一个例子来了解NetBIOSU算法在Malleable配置文件中的使用。

6.1 配置文件

Asprox.profile使用NetBIOSU编码来转换受害者的元数据。图11显示了使用NetBIOSU编码算法对元数据进行编码。结果数据将附加到URI

Cobalt Strike 分析:CS元数据编码和解码

11 asprox配置文件中的元数据编码

6.2 HTTP C2流量

12显示了Beacon使用asprox配置文件生成的HTTP流量,突出显示的部分是有关受害者的元数据。

Cobalt Strike 分析:CS元数据编码和解码

12 使用asprox配置文件生成的HTTP C2流量

6.3 NetBIOSU解码

13为使用Python脚本实现解码NetBIOSU编码的元数据的例子。
脚本的输出是关于受害者的RSA加密元数据。

“722676e535f86ffc29ba1cafb9856d98d1f697a83b0afc5bb143e2cf2242152a351081fb837192da3e3b2d9021fab75ce32677b6299a24d15e28db883adb36c5fe448d5eb47014f6d2e72eff389f0176efced60380450c87e2015a8c5de6aa90dc8f105683ac5fd96dc33d4d63da62818facda595910cf9aee10f36fe54d4a6a”

Cobalt Strike 分析:CS元数据编码和解码

13 解码NetBIOSU编码的Python脚本

7. Mask编码和解码


Mask编码算法可以在Malleable C2配置文件中进行设置,并与其他编码算法组合,可以由TeamServer加载用作C2通信。Beacon会生成随机的四个字节作为MaskXOR密钥,然后使用Mask密钥对加密后的128字节元数据进行XOR操作,并将Mask密钥和编码数据发送到TeamServer进行C2通信。

7.1 配置文件

14是带有由MaskBase64URL编码的元数据的部分配置文件。配置文件将URI和元数据编码算法定义为MaskBase64URL,编码后的元数据将附加到URI

Cobalt Strike 分析:CS元数据编码和解码

14 随机化的配置文件中的元数据编码选项

7.2 HTTP C2流量

15是基于图14配置的C2流量,可以通过以下步骤还原编码数据。
  • 从捕获的流量中,获取整个URI:/zChN7QMDhftv10Li9Cu-fm_T_3qDQawT-Z1GzNg1FWfAfSILT-u_rKLvXP-RE0ac-pxJTlGFCUIm4Aw9rGHPCIJVl0zNdCbM_G2VkYXJ5GGGtVh8S0LWMM4YLGZD9okLcFBc402j5zESK71HaR_owJb-AVBfFvAo8q0I2J74rmfGyIROyg

  • 删除前缀/zC,其余由Base64URL编码hN7QMDhftv10Li9Cu-fm_T_3qDQawT-Z1GzNg1FWfAfSILT-u_rKLvXP-RE0ac-pxJTlGFCUIm4Aw9rGHPCIJVl0zNdCbM_G2VkYXJ5GGGtVh8S0LWMM4YLGZD9okLcFBc402j5zESK71HaR_owJb-AVBfFvAo8q0I2J74rmfGyIROyg

Cobalt Strike 分析:CS元数据编码和解码

15 随机化的配置文件的C2流量

7.3 数据的编码与解码

  • Base64URL编码

hN7QMDhftv10Li9Cu-fm_T_3qDQawT-Z1GzNg1FWfAfSILT-u_rKLvXP-RE0ac-pxJTlGFCUIm4Aw9rGHPCIJVl0zNdCbM_G2VkYXJ5GGGtVh8S0LWMM4YLGZD9okLcFBc402j5zESK71HaR_owJb-AVBfFvAo8q0I2J74rmfGyIROyg

  • Base64URL解码

84ded030385fb6fd742e2f42bbe7e6fd3ff7a8341ac13f99d46ccd8351567c07d220b4febbfaca2ef5cff9113469cfa9c494e5185094226e00c3dac61cf088255974ccd7426ccfc6d959185c9e46186b5587c4b42d630ce182c6643f6890b70505ce34da3e731122bbd47691fe8c096fe01505f16f028f2ad08d89ef8ae67c6c8844eca0

如图16中的代码所示,使用PythonBase64Base64URL编码的数据进行解码,解码后的十六进制数据长度为132,前四个字节84ded030MaskXOR秘钥。剩下的128个字节是以Mask为密钥的XOR算法编码的元数据。

Cobalt Strike 分析:CS元数据编码和解码

16 Base64URL解码的Python3代码

  • Mask编码

385fb6fd742e2f42bbe7e6fd3ff7a8341ac13f99d46ccd8351567c07d220b4febbfaca2ef5cff9113469cfa9c494e5185094226e00c3dac61cf088255974ccd7426ccfc6d959185c9e46186b5587c4b42d630ce182c6643f6890b70505ce34da3e731122bbd47691fe8c096fe01505f16f028f2ad08d89ef8ae67c6c8844eca0

  • Mask解码

bc8166cdf0f0ff723f3936cdbb2978049e1fefa950b21db3d588ac3756fe64ce3f241a1e71112921b0b71f99404a3528d44af25e841d0af6982e5815ddaa1ce7c6b21ff65d87c86c1a98c85bd1591484a9bddcd10618b40fec4e67358110e4eabaadc1123f0aa6a17a52d95f64cbd5c1ebdc5f1a545359df0e38ac5c0c9a3c90

使用图17中的Python代码对Mask编码的数据进行解码,解码后的数据长度为128字节。

Cobalt Strike 分析:CS元数据编码和解码

17 Mask解码的Python3代码

8. 案例


接下来,展示了恶意软件使用的两种不同的Cobalt Strike有效载荷案例。一种使用Base64,另一种使用Base64URL编码。

8.1 Base64编码

SHA2566b6413a059a9f12d849c007055685d981ddb0ff308d6e3c2638d197e6d3e8802

Cobalt Strike 分析:CS元数据编码和解码

18 Base64编码

8.2 Base64URL编码

SHA256f6e75c20ddcbe3bc09e1d803a8268a00bf5f7e66b7dbd221a36ed5ead079e093

Cobalt Strike 分析:CS元数据编码和解码

19 Base64URL编码

9. 结论


Cobalt Strike是一个强大的后漏洞利用攻击模拟器。上面详述的五种编码算法是精心设计的,旨在逃避安全检测。单一安全设备无法阻止Cobalt Strike攻击,只有安全解决方案的组合——防火墙、沙箱、端点和集成所有这些组件的软件——才能帮助防止这种攻击。
10. 攻击指标


2 攻击指标列表

攻击指标

标签

6b6413a059a9f12d849c007055685d981ddb0ff308d6e3c2638d197e6d3e8802

CS 样本

f6e75c20ddcbe3bc09e1d803a8268a00bf5f7e66b7dbd221a36ed5ead079e093

CS 样本

fc95e7f4c8ec810646c16c8b6075b0b9e2cc686153cdad46e82d6cca099b19e7

/n9Rd

11b8beaa53353f5f52607e994849c3086733dfa01cc57fea2dae42eb7a6ee972

/flas

80.255.3[.]109

CS TeamServer IP

143.244.178[.]247

CS TeamServer IP



END

参考链接:https://unit42.paloaltonetworks.com/cobalt-strike-metadata-encoding-decoding/


编辑|延俊杰

审校|何双泽、金矢

本文为CNTIC编译整理,不代表本公众号观点,转载请保留出处与链接。联系信息进入公众号后点击“关于我们”可见。

Cobalt Strike 分析:CS元数据编码和解码

原文始发于微信公众号(国家网络威胁情报共享开放平台):Cobalt Strike 分析:CS元数据编码和解码

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月18日03:09:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Cobalt Strike 分析:CS元数据编码和解码 http://cn-sec.com/archives/1015293.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: