【51CTO.com快译】您还记得过去在用双因素身份验证之前,只使用一个用户名和密码就能被认为是安全的好时光吗?事实上,其实从来都不是那样的。在少年时的朱利安·阿桑奇(Julian Assange)闯入五角大楼之前,甚至在互联网广为传播到世界各地之前,人们就在使用暴力密码攻击去攻破了一个个系统。美剧《黑客军团》里的Mr. Robot就运用社交工程破解了其视为目标的大多数人的账户。
使用2FA(双因素身份认证)曾被视为是对此的补救方法,但其方法已被发现有着黑客可利用的漏洞,而应对此挑战的办法则比较昂贵的。幸运的是,还有一个双因素身份认证的替代方案:通用第二要素认证,或称U2F,它正是应用程序开发人员所需一个的开源方案。
双因素身份认证的问题
在转为使用双因素身份认证之前,通过检查各种单因素身份认证的基线挑战来做好准备是很重要的。根据对主要服务提供商,如Adobe、Twitter、Linkedin和雅虎的攻击上升趋势所显示,仅用密码和安全问题的方式会将用户暴露于黑客面前。
由于用户不断重复使用某个秘密这一事实,密码本身成了一个最大问题。黑客们深谙这一点,所以一旦他们破解并窃取了一个帐户的身份验证凭证,他们则会尝试着以此潜入受害者的其他服务。如果用户选择使用了弱的密码机制,则黑客完全可以使用到Kali Linux的Crunch工具或是其它现成的密码破解工具。
既然单因素身份认证是不安全的,那么2FA(双因素身份认证)一定可靠吗?实际上,2FA的实施也有其自身局限性。例如,当您的双因素身份认证依赖于通过短信方式发送的一个验证码的话,骗子则可以通过利用社会工程学骗取用户的电话以获取之。而如果通过使用智能手机来作为第二种认证因素的话,也会有其它的风险。例如我们需要保护应用程序在逻辑上远离各种恶意软件。
实施双因素身份认证的另一个挑战在于价格方面。像谷歌或Facebook这样拥有数十亿用户的公司是无法实施昂贵且复杂的解决方案的。例如为它们所服务的每个用户提供一个唯一的令牌或智能卡,这都将是一笔非常昂贵的开销。那么,如何才能有效且划算的实施2FA呢?我们可以考虑“通用第二要素认证”,或称U2F。
U2F是如何工作的
由谷歌和Yubico所共同创建的U2F(通用第二要素认证)开启了认证的新标准。它允许用户安全且即时地使用一个设备去访问多个在线服务,而不需要安装特殊的设备驱动程序或客户端软件。通过使用U2F,您可以使用一个令牌来认证许多个服务。
U2F要求用户使用一个支持U2F标准的钥匙令牌(如USB类型)设备和浏览器。而钥匙设备的功能是作为一个安全令牌,让用户登录到多个支持U2F的在线服务上,那些服务包括了定制的应用程序。目前Chrome和Firefox都已支持U2F。
U2F标准协议的初探
Yubico定义U2F为:“一个具有挑战-响应协议的扩展,它提供网络钓鱼和MitM(中间人攻击)保护,特定应用程序的密钥,设备克隆检测和设备认证功能。”该协议的控制旨在对已知的和新的攻击予以防护。它使用的是非对称加密,也称公钥加密算法,其中私钥驻留在Yubikey设备之中。客户端上的浏览器内也开启了对挑战、处理和应用程序ID之类的适当控制(如下图所示)。
如何在您的网站上实现U2F
想让您的网站访问者以U2F的方式进行双因素身份认证相对来说是比较容易的,另外Yubico也提供了开发人员指南。您有三种选择,其中最简单的路径是使用Yubico的U2F的验证服务器(u2fval)。它通过一个简单的基于JSON的REST API提供了U2F的注册和认证,所以您不需要对应用程序的代码做太多的修改。此外,它还能对例如Wordpress这样流行的内容管理系统平台,以插件的形式提供“开箱即用”式的支持。所有的代码都是开源的,并且能在Github上获取到。
如何用u2fval来进行U2F的实施
如前所述,采用带有U2F的双因素身份认证的最简单方法是使用Yubico的U2F验证服务器(u2fval)。如果您正在Linux或Mac OS系统上做开发,其安装是很容易的。您只需使用如下这个pip命令:
sudo pip install u2fval
您还可以使用其它的Python或Github安装命令。
简单的配置是需要的,但是服务器并不需要一个数据库。您还必须配置每一个客户端,以及它所进行的身份认证方式。不幸的是,这已经超出了u2fval的范畴,所以您需要独立地实现它。
U2F的潜在安全问题
既然U2F式的双因素身份认证协议依赖于浏览器上客户端级别的验证,那么潜在的攻击就可能来自驻留于浏览器本身的安全漏洞。所以U2F的安全性取决于谷歌、Mozilla等其它公司在其浏览器上应用该协议的良好程度。
此外,如果您使用的是U2F验证服务器,那么请记住,REST API的调用需要进行服务器级别的强验证控制。如果API的验证不能被安全地开发和验证,您可以会受到服务器端的攻击。同时,由于U2F依赖于一个数据库,因此所有通过路径/etc/yubico/u2fval/u2fval.conf这一配置文件的访问都应该受到限制。而且,因为在Apache服务器上部署u2val服务器时,有一个选项是使用mod_wsgi,那么在Apache中监控将来可能出现的漏洞,对于防护未来出现的攻击来说是至关重要的。
鉴于身份验证的控制完全掌握在开发人员的手中,我建议大家应该保持谨慎的态度。要知道,一个对于U2F的劣质应用实施将会导致客户端身份认证上的各种安全错误。
U2F的未来
U2F式的双因素身份认证协议是建立在强安全的理念之上的。它在通过诸如Gmail、Github和Facebook等服务传播双因素身份认证的方面有着非常有希望的未来。当然组织要想采用之,则必须首先有一个适当的安全软件开发生命周期。
它的成功实施取决于您是如何编程与集成其它所需组件的。这包括您验证客户的方式,和对数据库的访问设置。运用安全的DevOps的方法,并遵循OWASP指南可以帮助您创建出各种牢固的应用程序,并能防御未来出现的各种验证方面的攻击。
原文标题:Beyond two-factor: How to use U2F to improve app security,作者:Johanna Curiel
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】