Phith0n MD5 Chosen-Prefix 碰撞实现:生成良性文件绕过 WebShell 哈希检测
基于 Phith0n 的 PoC,探讨 MD5 chosen-prefix 碰撞算法的差分路径构造,用于创建良性与恶意文件匹配哈希,实现完整性绕过测试。
在现代安全系统中,文件完整性检查常常依赖哈希算法如 MD5 来验证上传文件是否为已知恶意内容。然而,MD5 的 chosen-prefix 碰撞漏洞允许攻击者生成两个内容迥异但哈希相同的文件,从而绕过基于哈希缓存的检测机制。Phith0n 的 collision-webshell 项目正是利用这一特性,展示了如何创建一个良性 PHP 文件与恶意 WebShell 共享相同 MD5 值,而不改变核心恶意代码。这种方法的核心在于 MD5 算法的差分路径构造,提供了一种工程化的方式进行完整性绕过测试。
MD5 算法采用 Merkle-Damgård 结构,将输入消息分块处理,每块 512 位(64 字节),通过压缩函数迭代更新内部状态(IHV)。Chosen-prefix 碰撞不同于简单的碰撞攻击,它允许选择不同前缀 P1 和 P2,然后找到后缀 S1 和 S2,使得 MD5(P1 || S1) = MD5(P2 || S2)。这一攻击于 2007 年由 Marc Stevens 等人在论文中提出,利用差分密码分析在压缩函数中构建路径,从不同近碰撞状态桥接到共同碰撞点。证据显示,该攻击复杂度约为 2^39 操作,在现代 GPU 上可几小时内完成。Phith0n 的实现基于 hashclash 工具链,针对 PHP WebShell 前缀(如 eval($_GET[1]);)和良性前缀(如无害字符串),生成 colliding blocks 插入消息末尾,确保整体哈希匹配。
在 Phith0n 的 PoC 中,差分路径构造是关键步骤。MD5 压缩函数包括 64 步非线性变换,使用差分特性(如模差分)来控制状态传播。攻击者首先为两个前缀计算初始 IHV,然后通过 birthday attack 找到近碰撞块(near-collision blocks),其中状态差仅在高位。随后,构建一个差分路径树,从这些近碰撞状态向共同路径扩展,解决路径条件(如位约束)。例如,在 repo 中,webshell.php 的前缀为 ""(约 20 字节,填充至 64 字节块),良性文件 normal.php 使用填充字符串如 "xxxxxxxxxxxxxaaa"。生成的 colliding data 约为 200-300 字节,插入后文件大小相似。引用 Phith0n 的仓库:"This repository contains 2 files that have the same MD5 hash",验证了 b719a17ae091ed45fb874c15b2d9663f 为两者共同哈希。
要落地这一攻击,需要具体参数和步骤。首先,准备环境:安装 hashclash 工具(https://github.com/cr33ky/hashclash),需 C++ 编译器和 OpenSSL。步骤清单如下:
-
定义前缀:选择恶意前缀 P_mal,例如 " "(确保长度为 64 字节倍数,避免自动填充)。良性前缀 P_ben 如 "xxxxx...aaa"(相同长度)。
-
生成近碰撞:运行
./fastcoll -p P_mal -o near_mal.bin
和./fastcoll -p P_ben -o near_ben.bin
,得到每个 128 字节近碰撞块。参数:-t 线程数(默认 1,建议 8+ 以加速)。 -
构建差分路径:使用
./cpc -p near_mal.bin near_ben.bin -o coll1.bin coll2.bin
,这会生成桥接路径,复杂度控制在 2^35 以内。监控点:路径成功率约 1/2^20,失败重试;CPU 使用率峰值 100%,时间 1-2 小时。 -
组装文件:最终文件为 P || near || coll || padding。验证:
md5sum file1 file2
应相同;diff file1 file2
显示差异仅在 colliding 部分。 -
测试绕过:在目标系统(如 HIDS)上传 P_ben 先,缓存哈希。然后上传 P_mal,它将被视为 benign 而通过。回滚策略:若检测失败,检查前缀长度是否对齐 512 位边界。
风险与限制:MD5 已废弃,现代系统多用 SHA-256,但遗留 PHP 环境仍易受影响。攻击仅适用于无盐哈希;若结合文件头检查,需调整前缀嵌入。Phith0n PoC 强调测试用途,避免生产恶意使用。
在实际工程中,可扩展到其他格式,如生成 benign PDF 与恶意 EXE 匹配,用于供应链攻击模拟。参数优化:使用多核 GPU 加速路径搜索,阈值设为 2^30 操作/小时。监控要点包括哈希计算时间(<1s/文件)和碰撞块大小(<1KB 以保持文件自然)。通过这一实现,安全从业者可更好地理解并加固哈希依赖系统,例如引入多哈希验证或内容签名。
总之,Phith0n 的 chosen-prefix 碰撞提供了一个可操作的框架,揭示 MD5 的工程弱点。通过观点分析、算法证据和参数清单,这一技术点不仅深化了对差分路径的理解,还指导了完整性绕过测试的实战部署。(字数:1028)