关于Monomorph
Monomorph是一款功能强大的MD5单态Shellcode封装工具,在该工具的帮助下,广大研究人员可以轻松将所有的Payload都修改为相同的MD5哈希。
在很多情况下,研究人员通常使用“碰撞”的形式来判断目标代码的“好”与“坏”,但Monomorph的出现就是为了证明之前的这种方法已经不再可行。因为如果仍然坚持使用MD5来引用文件样本的话,一旦使用了Monomorph,那么最终的分析结果将会毫无意义。因为所有的Payload或代码文件都将拥有相同的MD5哈希。
工具运行机制
针对每一个需要编码的比特,我们都会使用FastColl来预先计算一个MD5冲突块。每一次冲突都会给我们返回一个冲突块对,这样我们就可以在不改变整个MD5哈希的情况下来交换这些冲突块。
如需对4KB数据进行编码,我们将需要生成4*1024*8个冲突块(这需要几个小时),并在最终文件中占用4MB的空间。
为了加快速度,我们对FastColl进行了一些小的调整,使其在实践中更快,使其能够并行运行。
由于本工具已经完成了预计算,因此我们可以立即对Payload进行重新配置,而交换预先计算的块状态是使用Ange Albertini实现的技术来完成的。
工具下载
由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好Python 3环境。接下来,广大研究人员可以使用下列命令将该项目源码克隆至本地:
git clone https://github.com/DavidBuchanan314/monomorph.git
工具使用
我们可以将高达4KB的压缩Shellcode封装成可执行的二进制文件,速度会非常快,而且输出文件将始终具有相同的MD5哈希:
3cebbe60d91ce760409bbe513593e401
当前版本的Monomorph仅支持在Linux x86-64设备上运行,下面给出的是该工具的一个简单使用样例:
$ python3 monomorph.py bin/monomorph.linux.x86-64.benign bin/monomorph.linux.x86-64.meterpreter sample_payloads/bin/linux.x64.meterpreter.bind_tcp.bin
工具运行截图
是否可检测?
可能很多研究人员会想问,这种方式处理的Payload以及MD5哈希是否可以被检测到?
没错,它确实可以被检测到,我们可以使用detectcoll工具来检测碰撞块。
许可证协议
本项目的开发与发布遵循MIT开源许可证协议。
项目地址
Monomorph:【GitHub传送门】
参考资料
https://www.mscs.dal.ca/~selinger/md5collision/
https://github.com/cr-marcstevens/hashclash/tree/collisiondetection/src/collisiondetection
https://github.com/cr-marcstevens/hashclash/tree/master/src/md5fastcoll
https://github.com/corkami/collisions/tree/master/hashquines#read-an-encoded-value
https://github.com/corkami/collisions/blob/master/hashquines/scripts/collisions.py