MD5投毒绕过安全软件检测

MD5 被证明不安全已经超过十年了,在 2006 年就出现了实用攻击方法,自那时起公共碰撞发生工具也出现了。碰撞攻击的风险被学术界和白帽子们都证实了,但是从 Flame 的案例来看,恶意软件团伙仍然在利用真实世界的弱点。

虽然大部分公司已经抛弃了 MD5,但是仍然有很多公司仍然在用这种过时的算法,尤其是安全厂商。似乎在安全行业中,MD5 变成了恶意样本指纹的实施标准,而且行业内并没有更替这种技术的动力。我们的朋友 Zoltán Balázs 收集了长期使用 MD5 的安全厂商名单,令人震惊的是其中不乏业界的领头羊。

名单中甚至包括卡巴斯基,作为 Flame 的发现者,前不久卡巴斯基还提醒人们 MD5 已死,但是他们最近发布的报告仍然只包含了 MD5 的指纹,讽刺的是,他们内部使用 SHA-1 来分析恶意软件。

MD5投毒绕过安全软件检测

如果你认为 MD5 在恶意软件识别上足够优秀,让我们看一个例子。下面显示了 FireEye 的 MAS 控制台,直观的显示了 MD5 哈希值、时延和状态指示灯。

下载示例文件:https://blog.silentsignal.eu/wp-content/uploads/2015/06/727dc36c6a87d3e25e51ba1f7ee85ce8.zip

正如你所见,提交分析的文件用它们的 MD5 校验和来判定,并且没有沙盒执行记录。这意味着,如果你可以创建两个具有相同 MD5 校验和的文件,其中一个是恶意的,另一个则不是,你就可以给反病毒软件的数据库“投毒”了!它们再遇到恶意样本时甚至都不会进行检测。

阅读过 Nat McHugh 关于创建碰撞文件的文章后,我决定建立一个 Poc 来验证此类攻击。尽管 Nat 演示了在 ELF 文件上的案例,但是安全产品大多数瞄准的平台还是 Windows。虽然基本原理相同,但是 Windows(PE) 仍然有细微的差别。最初的例子基于两个字符串常量的比较来改变程序的执行流程。碰撞是调整这些常量以便可以匹配其中一种,而不是其他的。

我的目标是创建两个 MD5 校验和完全一致的文件,一个可以执行我的 Shellcode(狼),另一个则完全无害(羊)。我的实现基于早期 Peter Selinger 的工作(Nat 的 PHP 脚本被证明是不可靠的跨平台),所以添加了一些有用的补充:

隐藏与执行 Shellcode 的通用模板

对 Shellcode 进行 RC4 加密,确保真正的 payload 只能在“狼”的机器上出现,而不会出现在“羊”的机器上

对于 Windows 的简化工具链,使用Marc Stevens fastcoll(可以将碰撞时间从几小时降低到几分钟)

该方法在对付那些为了避免浪费资源而跳过相同文件的传统反病毒软件同样有效,不需要其使用 MD5,就算是其他算法也是可以的(虽然经过 RC4 加密后在 VT 上的结果是 0/57)。看看所谓的威胁情报和信誉数据库是否能被这种投毒攻击所污染?

代码可以在 GitHub 上得到,你可以用来测试你部署的安全解决方案,并且劝说安全厂商在下次发布它们的营销 APT 报告之前更新一下算法。

对于受影响的安全厂商,请立即停止使用 MD5。如果报告中非要使用,请不要仅仅依赖 MD5 一种哈希。

去年我们公布了 PoC 来证明依赖过时的 MD5 哈希方法的安全产品是可以被绕过的。

这种方法允许通过创建两个 MD5 校验和完全相同的可执行程序来绕过恶意软件检测和白名单。其中“羊”是无害的,甚至还可以完成一些有用的任务,可能会被受害者认定为安全的软件。“羊”被受害者接受后,“狼”就被发送出去了。由于那些完全依赖 MD5 指纹识别的安全产品已经扫描过“羊”了,“狼”也会被列入白名单,“狼”就可以正常运行。

尽管研究在大多数情况下会得到积极评价,但也有一小部分人怀疑这个问题的严重性和有效性。所幸在此期间我们又得到了更多受影响的产品的信息, NDA 进一步证明了我们是正确的,这个问题不仅存在而且有着不小的影响面。

今天,我们用 Panda Adaptive Defense 360来演示这个问题的影响。我们在产品更严格的“锁定模式”下验证可行,锁定模式意味着 Panda 将只允许已知安全的可执行程序运行(应用程序白名单)。为了视频的效果,我们手动解锁了无害版本的可执行程序(sheep4.exe)否则分析过程可能会持续数小时才能完成(在不通过手工解锁时,可执行程序“羊”也不会被云扫描器判定为恶意程序,这一点已经被证实了)。

演示视频

如果你对策略升级不感兴趣,你可以跳过视频的 01:00-01:55 段。

我们通过它们在匈牙利的合作伙伴通知了 Panda 安全公司这个问题,Panda 回复说这是一个已知的问题,预计在下个主要版本进行修复,但没有提供 ETA。Panda 表示使用 MD5 是出于性能考虑,不过我们告知 Panda:使用 BLAKE2 哈希算法可以提供比 MD5 更好的性能表现的同事提供更好的安全性(感谢 Tony Arcieri 提供这个信息)。

总结

我们想强调的是,这个不安全的做法不是个别厂商的问题,而是整个行业的普遍性为。我们现在知道至少有四家安全厂商存在此问题,还有其他一些厂商在它们的工具和报告中只提供 MD5 指纹。在逐步淘汰 SHA-1 时安全行业仍然在广泛使用 MD5,这对于安全行业是可耻的,甚至已有利用这种漏洞进行攻击的案例。我们知道,逃避检测有更多直截了当的方法,但这个问题是一个衡量安全产品开发是否跟得上形势的良好指标。

来源:安全客

上一篇:30秒攻破任意密码保护的电脑

下一篇:Mirai变种中的DGA