要查看最新版本的 Mangle 或提交问题,请参考 https://github.com/Tylous/Mangle。
作者:Tyl0us
在 Source Zero Con 2022 上展示
Mangle 是一款用于操作已编译可执行文件(.exe 或 DLL)的工具。它可以移除基于已知入侵指标(IoC)的字符串并用随机字符替换,通过增加文件大小来规避 EDR 检测,以及从合法文件中克隆代码签名证书。通过这种方式,Mangle 帮助加载器规避磁盘和内存扫描器。
Mangle 使用 Golang 开发。
首先,克隆仓库。在编译 Mangle 之前,你需要安装依赖项。要安装它们,请运行以下命令:
go get github.com/Binject/debug/pe
然后构建它:
go build Mangle.go
虽然 Mangle 是用 Golang 编写的,但其许多功能旨在适用于其他语言的可执行文件。在发布时,唯一特定于 Golang 的功能是字符串操作部分。
./mangle -h
_____ .__
/ \ _____ ____ ____ | | ____
/ \ / \\__ \ / \ / ___\| | _/ __ \
/ Y \/ __ \| | \/ /_/ > |_\ ___/
\____|__ (____ /___| /\___ /|____/\___ >
\/ \/ \//_____/ \/
(@Tyl0us)
./Mangle 的用法:
-C 字符串
包含要克隆的证书的文件的路径
-I 字符串
原始文件的路径
-M 编辑 PE 文件以移除 Go 指标
-O 字符串
新文件名
-S 整数
将文件增大的 MB 数
Mangle 接收输入的可执行文件并查找安全产品已知会检测或告警的字符串。这些字符串本身并不是唯一的检测点,通常它们会与其他数据点和遥测信息结合用于检测和防御。Mangle 找到这些已知字符串并用随机值替换它们的十六进制值以移除它们。重要:Mangle 恰好替换它所操作的字符串的原始大小,不会多也不会少,因为增减会导致文件对齐错误和不稳定。Mangle 通过 -M 命令行选项实现这一点。
目前,Mangle 仅适用于 Golang 文件,但随着时间的推移,将添加对其他语言的支持。如果你知道其他语言的此类字符串,请提交问题工单。
处理前
处理后
几乎所有 EDR 都无法扫描超过一定大小的磁盘或内存文件。这主要是因为大文件需要更长时间来审查、扫描或监控。EDR 不希望因降低用户生产力而影响性能。Mangle 通过在文件末尾添加空字节(零)填充来膨胀文件。这确保文件内部内容不受影响。要膨胀可执行文件,请使用 -S 命令行选项并指定要添加的字节数(以 MB 为单位)。考虑到当前互联网速度,大负载已不再是问题,但即便如此,不建议生成 2GB 的文件。
基于对众多用户态和内核态 EDR 的测试案例,建议将文件增大 95-100 兆字节。由于供应商不检查大文件,相关活动不会被注意到,从而导致 shellcode 成功执行。
Mangle 还能够从合法文件的代码签名证书中提取完整链和所有属性,并将其复制到另一个文件上。这包括签名日期、副署签名和其他可度量属性。
虽然此功能可能与我开发的另一款工具 Limelighter 相似,但两者之间的主要区别在于:Limelighter 基于域名生成伪造证书并使用当前日期和时间签名,而 Mangle 使用来自原始文件的有效属性,时间戳取自原始文件。此选项可以使用 -C 命令行选项并指定要复制证书的文件路径来复制 DLL 或 .exe 文件的证书。