很明显,在当今Web上居于统治地位的基于用户名/密码的验证机制有其缺点。有什么备用的方案吗?这些备用方案是否也有弱点?
密码仅仅是单因素的——用户所知的某件事情。密码一般也是非常低信息量的凭据,使得密码猜测成为可能。更糟的是,这些密码往往在多个不同的应用中重用。因此,降低基于密码验证风险的主要方法是转移到多因素验证,更好地使用较高信息量的凭据。我们将讨论一些经典的和正在进入当今市场的新方法。这些新方法标志着Web验证的革新,具有更强的功能对抗日益兴起的网络诈骗风险(如网络仿冒,关于网络仿冒的更多信息参见第9章)。
数字证书
证书验证强于任何我们目前讨论过的验证方法。证书验证使用公钥加密和数字证书来验证用户,可以用在其他基于密码的验证方案上,提供更强大的安全性。证书的使用被看作是双因素验证的一种实现。除了你所知道的某种事物(你的密码)之外,你必须用你所拥有的某种事物(你的证书)进行验证。证书可以存储在硬件(如智能卡)中来提供更高级的安全性——访问以这种方式保护的网站必须拥有物理令牌和合适的智能卡阅读器。
客户证书提供更强的安全性,但是需要成本。获得证书、分发证书和管理客户证书的难度使得这种方法对于大网站来说非常昂贵。但是,拥有非常敏感数据或者有限用户基础的网站,比如常见的企业间(B2B)应用,将从证书的使用中大大获益。
目前没有已知的针对基于证书验证的攻击,使得私有证书仍能得到保护。但是,如果系统无法根据证书吊销列表(CRL)检查证书有效性,就可能错误地允许撤销的被盗证书的使用。当然,如果攻击者能够侵入PKI基础架构本身,那么绕过常规证书验证控制是有可能的。正如在第1章中所见,许多Web入侵工具(如Paros和Burp客户端代理)支持基于证书的验证。
SiteKey
PassMark Security公司创立于2004年,关注金融服务市场中的强验证,在2005年年底,他们声称有1500万客户受到他们的PassMark技术的保护。这个结果可能几乎完全归功于2005年中期美国银行(Bank of America)实施PassMark技术来保护他们的1300万网上银行客户。BofA将他们的实现称为“SiteKey”。2006年RSA Data Security收购了PassMark。
PassMark/SiteKey基于双因素、“双向”的验证。它使用由用户密码和关于用户验证所在设备信息组成的双因素验证(可以登记多个设备)。为了实现双向验证,用户在登录过程中得到用于验证网站的秘密信息。
下面是这种验证的实际工作原理:在登录时,用户的设备被动地使用账户注册时创建的特殊设备ID验证,为服务器-客户验证做准备。用户输入其用户名,然后在输入密码之前被要求识别一个图像和相关的短语。这些图像/短语用于提供简单的网站视觉/文本验证,以缓解恶意网站对合法网站的仿冒(和网络钓鱼相同)。输入正确的密码之后,用户像平常一样验证。PassMark/SiteKey的进一步演示的链接可以参见本章结尾处的“参考与延伸阅读”。
PassMark/SiteKey提供了比简单的基于用户名/密码系统更好的安全性,但是好多少呢?我们在咨询工作中已经测试了一些PassMark保护的应用,下面是我们的一些发现,结合了互联网社区的大致评论。
早期的断言之一——PassMark容易受到中间人(MITM)攻击似乎并不确定。PassMark使用安全的cookie,只在SSL连接上发送。除非用户接受失败的SSL握手,否则安全cookie不会发送。所以PassMark似乎不会比SSL本身更容易遭到MITM攻击。
但是,当美国银行的SiteKey实现不能识别你验证所用的设备时(因为它未被登记),它将要求你回答一个秘密的问题。这可能遭到MITM攻击,因为攻击者可以在用户/网站之间代理这次问答。
除此之外,PassMark显示一个唯一的图像/短语来验证用户的设计导致了一个用户名枚举漏洞,使攻击者很容易确定一个账户是否有效。在本章一开始用户名枚举的讨论中提到过,这一般不是严重的漏洞,因为攻击者还必须猜测账户相关的密码。
一些更广泛的社区中对PassMark和SiteKey的评论包括断言PassMark仅仅是用添加的设备ID拖累现有的用户名/密码系统,在用户不可避免地尝试从各种设备(其他计算机、公用电话、电话、PDA等)验证时会提示许多秘密问题,加剧了可用性问题。
最严重的可能是,一些评论已经提出了PassMark导致对不断发展的消费者设备ID信息(必须由可靠的企业存储)机密性的广泛依赖问题。如果一个实施者出现设备ID信息的安全缺口,所有PassMark实施者都可能丢失它所提供的双因素验证的好处。更多的PassMark和SiteKey链接参见本章结尾处的“参考与延伸阅读”。
一次性密码
一次性密码(OTP)已经出现许多年了。从名字中你可能猜到,OTP协议包括服务器和客户端预先确定的一组秘密(也就是一系列密码),在验证事务中只使用一次。继续密码列表的示例,第一次验证时,客户端提供列表中的第一个密码,服务器和客户端接着从列表中删除这个密码,使其在未来的验证中失效。OTP的基本思路是减少密码本身的大部分敏感度,这样用户就不必忍受保持密码安全的复杂性。更多关于OTP的信息可以在本章结尾处的“参考与延伸阅读”中找到。
本书编写时最流行的商业OTP实现是RSA Security的SecureID系统。和共享密码列表不同,SecureID在客户端和服务器之间实施一种异步协议,这样密码(实际上是数字序列或者PIN码)只能在一个小的时间窗口(如30秒)之内使用。这种OTP的精巧变种提供了高的安全性,因为密码只在30秒内对攻击者有价值。在每个时间窗口过期时,客户端与服务器同步生成一个新的密码。客户端一般是个实施OTP协议并且在每个时间间隔后生成新密码的小硬件设备(有时称为软件狗或Fob)。
OTP系统历史上已经证明是抗攻击的(至少,像SecureID这样很好地实现的协议是如此),对于规模有限、较高安全性的应用如通过VPN访问公司网络来说仍然很流行。主要的缺点是,对于大型的面向客户的部署,存在客户端设备、分发和管理的成本,每个客户、每个设备可能花费100美元。企业和客户对这些成本的态度由于近来不断增长的对网络欺诈的注意而开始改变,企业开始转向OTP处理客户对这一领域的担心。
这种转向的早期证据是网上金融机构E*Trade在2005年3月份宣布,为精选的客户实施SecureID(链接参见本章结尾处的“参考与延伸阅读”)。E*Trade称之为“具有可选数字Security ID的完整安全系统”,并且为给定期间保持某个最小余额和业务量的客户免费提供这一服务。E*Trade在使用条款中声明每个附加或者替换的SecureID fob可能课以25美元的罚金,并且在将来可能对此服务收费或者停止服务,以此保护其投资。
和所有安全措施一样,OTP也不完美。加密专家Bruce Schneier发表了一篇文章指出,仍然可以通过建立一个欺诈网站简单地代理与合法网站的OTP交换,或者在用户计算机上安装劫持已验证会话来绕过OTP。当然,如果密码重用窗口设置得太宽,就总是有可能进行重放。但是,OTP明显提升了安全门槛,Schneier提出的攻击对于任何验证系统都是通用的,在某种程度上需要个别处理。