SHA-1碰撞攻击将会对我们产生怎样的现实影响。近期,Google和荷兰国家数学和计算机中心(Centrum Wiskunde & Informatica,CWI)的研究人员完成了针对第一例SHA-1的碰撞攻击,创造了两个hash值完全相同但内容截然不同的文件。然而,在真实的信息安全世界中,这种攻击又会怎样对个人和组织机构造成何种威胁呢?
对SHA-1算法不安全的担心由来已早。在2015年荷兰国家数学和计算中心和新加坡南洋理工大学研究员联合发表的论文中,描述了SHA-1碰撞攻击的各种理论性可能。同时,在RSA 2016的密码学家研讨会上,该篇论文得到了很多关注,参会的著名密码学专家Adi Shamir也预测,真实的SHA-1碰撞攻击在未来几个月将会成功实现。在此次会议之后,一些安全公司正式对外宣布SHA-1机制可能存在缺陷;与此同时,因为没有真实的攻击成功案例,这种攻击也带来了诸多质疑。更多请参考CodeSec百科《深度:为什么Google急着杀死加密算法SHA-1》。
Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

但为了防止任何理论攻击可能,去年开始,一些安全公司开始反对继续使用SHA-1算法。尽管谷歌、Facebook、微软和Mozilla等公司已采取措施替换SHA-1算法,但哈希函数仍在广泛使用。当Google和CWI的实验成功之后,SHA-1碰撞攻击再次受到关注。这种攻击已经成为现实,所以,我们应该如何去防范和修复呢?
影响分析
几年前,针对MD5算法存在“构造前缀碰撞攻击”(chosen-prefix collisions),而真实案例中,Flame(火焰)病毒就使用了此种攻击方法。SHA-1碰撞攻击实现后,恶意软件开发者将会创造什么样的病毒,值得想像。
在此,我们就针对一些利用微软签名校验的恶意程序,结合SHA-1碰撞作一些攻击可能的探讨。为了说明SHA-1碰撞攻击的现实威胁,我们找到了一例很有趣的例子:微软内核模式代码签名策略,攻击针对目标是加载的内核模式驱动程序签名认证,以下是包括WIN 10在内的该类签名规范和要求:
Image may be NSFW.
Clik here to view.

我们可以看到,其中列出的哈希机制就包括SHA-1,所以,毫无疑问,SHA-1碰撞攻击将会产生驱动签名滥用情况,为恶意内核代码程序的利用传播敞开大门。事实上,SHA-1签名校验的驱动程序并不少见,以下就是一些我们发现的实例:
Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

在Win 10系统中,这类存在“风险隐患”的驱动程序是不是就非常少呢?但由于存在很多第三方驱动,所以,情况让你超乎想像。虽然微软在最新的系统适配产品中明确反对SHA-1机制认证程序,但很多第三方驱动依然大范围存在此种情况。另外,在一些之前的操作系统版本(Win 7\Win 8)中,还存在着大量且多年未更新的此类驱动。例如:
Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

从这里就可以看出,SHA-1将会成为很多组织机构和相关系统的一个心头大患。受影响的系统和服务包括:数字证书签名、邮件、PGP/GPG 签名、软件发布签名、备份系统、冗余热备份系统、Git……等等,除了网络安全之外,影响将会波及很多使用传统操作系统的大型组织机构。这种很多第三方软件公司持续使用的,运行机制本身就存在的问题,将会成为一个严重的信息安全问题。要保证安全,只有从核心和本质上进行处理,但对很多软件公司来说,这又会成为一个“牵一发动全身”的棘手问题。
深入研究之后,我们甚至发现一些固件和硬件也受到此问题影响。例如,普遍使用的仅支持SHA-1验证的TPM 1.2芯片,SHA-1碰撞攻击将会直接对一些使用SHA-1算法的固件可信启动机制造成影响。在这方面,微软在Win10系统中已经作了一些限制,如其加密方式不支持TPM1.2芯片。
SHA-1碰撞攻击的恶梦才刚刚开始,我们应该尽快结束使用SHA-1的时代。谷歌将在接下来的90天内公布SHA-1碰撞攻击的测试工具。
SHA-1碰撞会被用到一些野生攻击中吗?
证据表明,攻击者必须在拥有原始文件和已知哈希的情况下才能完成碰撞攻击,另外,由于攻击利用了定向编辑,不是每次编辑都会有效。换句话说,即使是破解了SSH或TLS的认证证书,也都不可能实现,需要对原始文件进行一些非常细微的定向更改才能保证碰撞攻击成功。
虽然在某种程度上来说,更改签名验证很容易实现,但如果要进行伪装式的SHA-1碰撞攻击,想要让受害者迷惑,完全对看不出马脚,这就需要对利用文档进行破坏性的改造,而不只是通常性修改。后续可能会有一些针对SHA-1碰撞攻击的检测研究。
总体上来说,要实现该项攻击需要很大的代价成本。如果攻击者使用类似于比特币挖矿的专业装备和技能,攻击可能将会变得更加便捷。Google和CWI声称,该攻击实现需要大量的CPU和GPU计算,同时还需高效的分布式操作,攻击第一阶段攻击是在Google的异质CPU集群上进行的,并扩展至8个物理地址;第二阶段攻击代价更高,是在Google的K20、K40和K80异质GPU集群上进行的。经相关研究人员计算得出,使用亚马逊云服务AWS进行第二阶段的攻击,耗资约56万美元。但是,若攻击者足够耐心并利用现场参考案例,成本可降至11万美元。
如何修复和预防这种攻击呢?
作为安全和开发团队来说,最好的方法就是使用SHA-256等更复杂的算法,或使用两个独立的加密算法。当然,对于攻击检测来说,仍然可以使用Google发布的开源检测代码。