关键词
Cobalt Strike, 逃逸, 后漏洞利用阶段,元数据
接下来,本文将详细介绍编码算法,描述Cobalt Strike框架中使用的编码类型的定义和差异,并涵盖一些常见的恶意攻击。具体地,演示了编码和解码算法如何在C2流量通信期间工作的,以及为什么Cobalt Strike的这种多功能性,使其难以被传统的防火墙防御。
表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’解码 |
[ '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', '+', '/' ] |
3.1配置文件
在发送有关被感染系统的元数据信息之前,Havex.profile使用Base64编码对其进行编码转换。如下图所示,Base64编码算法对元数据进行编码,并将编码结果放在Cookie中。
图 1 Havex配置文件中的元数据编码选项
3.2 HTTP C2流量
图 2 使用Havex配置文件的HTTP C2流量
3.3 Base64解码
-
很多工具都可以解码加密的元数据,比如,使用Python的Base64库来解码。图3显示了一个示例脚本,用于解码数据并以十六进制格式打印。
-
这是脚本中的解码数据,是RSA加密后的关于被感染系统的元数据:
“751990bee317e74e4f2aa6f13078ef22dd884e065b738f8373f49dee401a069d5dfd1d3e39e94cc637e21364e1fd71ab3322fb9c7a987fc6aa27dfab981f077e7ddc2f20aba8e9d841250adc4edd4d15082445869278f2bbcf66e145aa74152a22b85c9b6c5f15d69f7d8b3708b33deea7198683d6468bd0424f537617f759b5” |
图 3 用于解码Base64数据的Python脚本示例
[ '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', '-', '_' ] |
4.1配置文件
图 4 CNN视频配置文件中的元数据编码
4.2 HTTP C2流量
图 5 使用CNN视频配置文件生成的HTTP C2流量
4.3 Base64URL解码
-
用户可以将“-”替换为“+”,将“_”替换为“/”,同时添加填充字符“=”。被替换的字符串成为标准的Base64编码数据。然后可以使用任何Base64解码工具来获取解码后的元数据。
-
使用脚本语言来完成这项工作。图6显示了用于解码数据的Python脚本。在示例中,添加了“=”以使输出与Base64编码兼容。
-
脚本的输出是RSA加密的元数据。
“60495dff002eddaa0c409aaaae0fda592810993ae0ae319c87d62b65c54d92447daf2c1bc84930c5d90ed3a023227e254d3a2c28763be372bb7444ef5719d5948b99d33ede3775f51c216bba97bc5fd4777e819517e89a737284c784bdc30b1d6b3b7debe2448c1dc28b00e3ac611fd5a8fd070502f3f7f672786f6b5787af51” |
图 6 解码Base64URL的Python脚本
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'] |
图 7 NetBIOS的编码过程
5.1配置文件
图 8 OCSP配置文件中的元数据编码
5.2 HTTP C2流量
图 9 使用OCSP配置文件生成的HTTP C2流量
5.3 NetBIOS解码
“5725245edcb589b305e33e02da1cda208ed083bed8a1ae0b3a87da0f9d6ebe31025ab67c58572acb9757288cc2e78bea414249fa8cb0783485a1b5a3c0863501fc1c89c6ac59b7129c51cacbfa197cc64eea31ec8ac204cbcdbefaecf19762f9efcc56280f3e9b183c37f98f371f5e1c08b645524646d7010af4408f4ebb8a2f” |
图 10 解码NetBIOS编码的Python脚本实现
[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’] |
6.1 配置文件
图 11 asprox配置文件中的元数据编码
6.2 HTTP C2流量
图 12 使用asprox配置文件生成的HTTP C2流量
6.3 NetBIOSU解码
“722676e535f86ffc29ba1cafb9856d98d1f697a83b0afc5bb143e2cf2242152a351081fb837192da3e3b2d9021fab75ce32677b6299a24d15e28db883adb36c5fe448d5eb47014f6d2e72eff389f0176efced60380450c87e2015a8c5de6aa90dc8f105683ac5fd96dc33d4d63da62818facda595910cf9aee10f36fe54d4a6a” |
图 13 解码NetBIOSU编码的Python脚本
7.1 配置文件
图 14 随机化的配置文件中的元数据编码选项
7.2 HTTP 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
图 15 随机化的配置文件的C2流量
7.3 数据的编码与解码
-
Base64URL编码
hN7QMDhftv10Li9Cu-fm_T_3qDQawT-Z1GzNg1FWfAfSILT-u_rKLvXP-RE0ac-pxJTlGFCUIm4Aw9rGHPCIJVl0zNdCbM_G2VkYXJ5GGGtVh8S0LWMM4YLGZD9okLcFBc402j5zESK71HaR_owJb-AVBfFvAo8q0I2J74rmfGyIROyg
-
Base64URL解码
84ded030385fb6fd742e2f42bbe7e6fd3ff7a8341ac13f99d46ccd8351567c07d220b4febbfaca2ef5cff9113469cfa9c494e5185094226e00c3dac61cf088255974ccd7426ccfc6d959185c9e46186b5587c4b42d630ce182c6643f6890b70505ce34da3e731122bbd47691fe8c096fe01505f16f028f2ad08d89ef8ae67c6c8844eca0
图 16 Base64URL解码的Python3代码
-
Mask编码
385fb6fd742e2f42bbe7e6fd3ff7a8341ac13f99d46ccd8351567c07d220b4febbfaca2ef5cff9113469cfa9c494e5185094226e00c3dac61cf088255974ccd7426ccfc6d959185c9e46186b5587c4b42d630ce182c6643f6890b70505ce34da3e731122bbd47691fe8c096fe01505f16f028f2ad08d89ef8ae67c6c8844eca0
-
Mask解码
bc8166cdf0f0ff723f3936cdbb2978049e1fefa950b21db3d588ac3756fe64ce3f241a1e71112921b0b71f99404a3528d44af25e841d0af6982e5815ddaa1ce7c6b21ff65d87c86c1a98c85bd1591484a9bddcd10618b40fec4e67358110e4eabaadc1123f0aa6a17a52d95f64cbd5c1ebdc5f1a545359df0e38ac5c0c9a3c90
图 17 Mask解码的Python3代码
8.1 Base64编码
图 18 Base64编码
8.2 Base64URL编码
图 19 Base64URL编码
表 2 攻击指标列表
攻击指标 |
标签 |
6b6413a059a9f12d849c007055685d981ddb0ff308d6e3c2638d197e6d3e8802 |
CS 样本 |
f6e75c20ddcbe3bc09e1d803a8268a00bf5f7e66b7dbd221a36ed5ead079e093 |
CS 样本 |
fc95e7f4c8ec810646c16c8b6075b0b9e2cc686153cdad46e82d6cca099b19e7 |
/n9Rd |
11b8beaa53353f5f52607e994849c3086733dfa01cc57fea2dae42eb7a6ee972 |
/flas |
80.255.3[.]109 |
CS TeamServer IP |
143.244.178[.]247 |
CS TeamServer IP |
编辑|延俊杰
审校|何双泽、金矢
本文为CNTIC编译整理,不代表本公众号观点,转载请保留出处与链接。联系信息进入公众号后点击“关于我们”可见。
原文始发于微信公众号(国家网络威胁情报共享开放平台):Cobalt Strike 分析:CS元数据编码和解码
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论