在计算机的大部分领域中技术发展是如此之快,以至于我们很容易就会忽略那些在几十年的时间里都还未有寸进的领域。基于口令的认证方式可能是现在我们所有人每天都在使用的最重要技术功能之一,但是自从首个多用户计算机系统问世以来它就一直没有过大的发展。甚至当更多的安全方法被开发出来之后,我们仍然继续使用着这一极为不便的陈旧认证方法。摩尔定律依然在被不断地验证着:为在更短的时间里破解口令数据库而提供更快运算速度的处理器。今年夏天,通过社交网络巨头LinkedIN、无线流媒体服务LastFM以及在线约会网站eHarmony所发生的口令泄漏事件,再一次地验证了这一继续轻安全重方便的糟糕后果。
这些泄漏事件表明在使用口令认证方法保护基于云的信息资产时是存在着一种潜在的致命缺陷的。在这些泄漏事件在消费者云服务中不断发生的同时,商业云供应商们通常也是使用着与之相同的技术。因此,众多公司都在寻找一家云服务供应商以便于能够安全地存储专有信息,这就要求云供应商不仅仅理解实际应用中的云认证,而且还需了解如何在幕后实施该认证任务。这一知识,以及对加密功能和攻击方法的深刻理解,将有助于一家公司真正地了解使用特定云供应商的风险。
测试云基于口令的认证
云供应商有很多安全存储口令信息的选择,但是其中大多数都使用相同的开源哈希库。这一点在LinkedIn、LastFM、eHarmony以及其他任何可能的网站都得到了证实。采用这一加密模式的云供应商将只能使用单向密码系统哈希来保存口令的加密版本。
有很多简单的测试方法可以验证云服务供应商正在使用口令加密方法是哪一种类型的。第一个测试方法就是要求进行口令重置。如果口令以明文方式通过电子邮件寄回,那么这就是一个明显的败笔,它表明供应商是以明文方式保存密码的而且没有采取任何加密措施。另一个测试方法则是简单地检查可用于创建口令的字符。如果系统限制在口令中使用某些特殊的字符,那么很有可能其口令是以明文方式保存的。做出这一推断的理由是,SQL数据库在解释某些特殊字符时并不将其视为简单的数据而将其解释为提供某些特殊功能,因此需对这类字符进行限制。一个在这些测试中露出某些不安全端倪的系统就无法得到客户的信任,也就不值得我们托付任何重要的秘密数据。
口令哈希散列
Linux系统的发行版中都包括了哈希工具,并提供了一个供了解口令加密机制的良好平台。对于那些不习惯于使用Linux命令用户界面行形式的用户来说,这些工具同样适用于Windows GUI。在你喜欢的Linux系统发行版的命令提示符下输入如下信息可产生一个MD5加密哈希:
echo –n 'asdfghj'|md5sum>password.txt
这个命令组合把文本字符串“asdfghj”通过md5sum命令发送出去,并将其发送至目标password.txt。这样,文本字符串“asdfghj”经过加密哈希处理就表现
为“c83b2d5bb1fb4d93d9d064593ed6eea2”的形式,这也就是口令在诸如eHarmony这样云供应商的数据库中存在的形式。云供应商并不知道原来的口令是什么,他们也不能执行解密恢复原来的口令。
这就是摩尔定律带来的负面影响,而不是积极因素。在处理器缺乏所需性能以便于在合理的时间内计算出所有可能组合的时代,就会产生单向加密哈希算法。在过去,攻击这些哈希加密方法的唯一途径就是历经数月或数年的时间进行暴力破解。现在,加密哈希算法涵盖的所有可能组合的预计算表(彩虹)都可在网络中下载得到。这样一来,针对基于口令认证方式的攻击就变成了在彩虹表和目标哈希散列之间进行简单的比对。对于现代计算机硬件来说,这只不过是一个简单的任务而已。
现代的密码破解程序使用了高端视频卡来提升CPU性能以便于进一步减少比对哈希散列所需的时间。这些图形处理单元(GPU)是专为完成高端运算任务(例如渲染现代3D视频游戏)而设计的。由于拥有更快的内存和更宽的I/O通道以实现快速运算,因此GPU在完成这些预定义任务方面,它的完成速度常常要高于CPU。这样的设计理念也就产生了一个意想不到的后果:这些GPU特别适用于加密破解任务。例如,一个单一的GeForce GTX 680包含了1536 个内核,就可以用于比对哈希散列和彩虹表的工作。
破解基于口令的认证
我曾经评估过一些使用GPU实现彩虹表哈希散列比对过程加速的工具。每个工具都有其长处和短处;有些擅长于破解SHA1 或 MD5 哈希散列,而其他的一些工具则重点关注破解用于企业网络的Microsoft Windows NTLM哈希散列。我则更关注Crytpohaze GRTCrack,因为它支持多种哈希散列算法以及两家GPU制造商,即AMD 和 NVIDIA。同样,它甚至还可在64位Windows或Linux操作系统上运行,并且相当易于建立相关彩虹表。如果合适的硬件不可用,它甚至还可以运行于Amazon EC2实例。
Cryptohaze GRTCrack使用了可供下载的彩虹表,但由于大小受限其长度是有限制的。口令长度决定了可能口令组合的数量;这些文件的大小相差很大,可从七字符表的41GB到八字附表的1.4TB。增加单个额外字符将增加3400%的文件容量,即34倍。文件容量的大幅增长这一现实恰恰佐证了使用基于云服务时口令长度的重要性;显而易见,评估41GB哈希散列的速度要比评估1.4TB要快地多得多。
现在,为了破解我之前生成的password.txt文件而运行Cryptohaze,我已做好了全部的准备工作。具体命令格式如下:
GRTCrack-OPenCL -h MD5 -f password.txt /pathtorainbowtables/rainbowtable.grt
在短短的15秒之后,我的验证试验就给出了加密的口令“asdfghj”。由此可以证明,即便使用低端硬件也一样能够轻松破解口令哈希散列。
加强基于口令的认证
有几种方法可以限制这些功能强大口令破解工具的有效性。首先就是使用Salted哈希。Salt是指在运行哈希算法程序之前添加到数据中的随机生成数据。采用这种方法就能够确保加密值是无法预计算的,从而形成彩虹表供破解口令使用。Salt也必须被保存在数据库中。但是,每个口令的Salt必须各不相同,这样就极大地增加了解密每个记录所需的时间。自从泄密事件发生后,LinkedIn就为所有账户在变更口令或生成口令时增加了Salt。
当认证基于云服务时,双重认证就是增加安全性的另一个认证方法。Google Authenticator是为Google账户增加双重认证的一个免费工具,它也可用于Linux系统。众多较新的Linux版已包括了使用Google Authenticator所需的代码。即便是在发生哈希口令泄漏时,这也是一个增加额外安全性以防止非授权访问的廉价方法。
有一件事是肯定的:技术将不断向前发展,云服务在未来使用基于口令的认证方法的可行性并不高。口令长度将变得越来越长,直到有一天太长的口令已变得难以管理。希望使用云服务的公司在评估候选云供应商时,需要好好研究一下所使用口令哈希的类型以及加Salt哈希的使用情况。安全专业人士需要更好地了解现在的口令哈希技术以及新的攻击方式,以便于更有效地管理这类不断变化中的风险。