part1
点击上方蓝字关注我们
将二进制空间安全设为"星标⭐️"
第一时间收到文章更新
如果不是前面有shellcode变量名, 单纯看这一堆UUID, 估计很少有人能将这些UUID和恶意代码联系起来。
首先了解一下UUID:
UUID(通用唯一标识符)是一种128位的值,常用于软件系统中,用以提供几乎可以保证唯一性的引用。它通常以字符串形式表示,由十六进制数字组成,并被划分为五个部分。由于其结构和生成方式(基于时间戳或随机数),UUID发生冲突的可能性极低,因此非常适合在分布式系统中用于标识对象或记录,尤其是在缺乏中心化唯一性管理机制的场景下。
而该恶意脚本, 主要利用了微软提供的一个API函数:UuidFromStringA(), 该函数可以将UUID 字符串转换为二进制格式。
因此,上面的一堆UUID, 一旦解码为原始字节, 就会以shellcode的身份注入到内存中执行。
利用这种技术的恶意软件逃避追杀的概率极高, VT评分仅为:2/61。
上面的UUID数组可以通过以下代码注入到内存中执行:
for i in shellcode: io = ctypes.windll.Rpcrt4.UuidFromStringA(i, rwxpage1) rwxpage1 += 16
这段代码解出来是一个CobaltStrike HTTP x86 shellcode, 连接地址: hxxp://182.61.60.141:6666/tFl6。
下面看一下完整的恶意Python脚本:
下面来分析一下这种编码方式的原理。
分析要用到一款工具, 工具地址: https://github.com/DidierStevens/DidierStevensSuite/blob/master/re-search.py
使用re-search.py选择GUID:
接着利用另一款工具来解码十六进制数据, 需要使用选项-H 来忽略所有非十六进制字符。
Hex-to-bin.py工具地址:https://github.com/DidierStevens/DidierStevensSuite/blob/master/hex-to-bin.py
结果如下图:
注意,那些类似于用户代理字符串的文本被混淆了。这是因为GUID被编码为二进制数据的方式所导致。
比如以下这个GUID:
{00112233-4455-6677-8899-AABBCCDDEEFF}
33 22 11 00 55 44 77 66 88 99 AA BB CC DD EE FF
接下来将使用translate.py 来复现这种编码。
translate.py工具地址:https://github.com/DidierStevens/DidierStevensSuite/blob/master/translate.py
而在原始的恶意Python脚本中,是通过ctypes.windll.Rpcrt4.UuidFromStringA函数来完成的。
首先,使用Python列表推导式将字节流按16字节(GUID的长度)进行分割:
data[i:i+4][::-1] + data[i+4:i+6][::-1] + data[i+6:i+8][::-1] ([::-1]是 Python 中用于反转序列的表达式)
这里要用到一个脚本来分析shellcode,脚本地址:https://github.com/DidierStevens/DidierStevensSuite/blob/master/1768.py
分析结果如下图:
CobaltStrike 在合法购买时会分配一个唯一的许可证编号(LicenseID), 这个编号在生成 shellcode、payload、Beacon 等时会被自动嵌入其中(包括 shellcode 和通信流量里),就像是给每个 payload 打上了一个“用户指纹”或“水印”。
1768.py
就会检测到许可证ID:针对这个license-id, 说明一下:
-
高级攻击者会对 shellcode做 patch,专门修改或清除 license-id 。
-
有些攻击者用工具自动抹除或伪造 license-id,防止真实身份泄露。
-
修改软件容易破坏 shellcode 功能,操作不当会导致失效。
-
高级国家级APT组织几乎不会用正版CS,而是使用盗版并彻底去标识, 或者 直接开发自研 C2 框架,避免被追踪。
例如, APT29 使用自己的 “C2Matrix”,几乎不会碰 CS。
原文始发于微信公众号(二进制空间安全):逃避查杀概率极高! 一堆UUID凑一起就是恶意代码
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论