许多网站经营者只希望将复杂的安全工作外包,特别是验证。市场在20世纪90年代末很快地出现这一现象,Microsoft收购了Firefly Network并且采用其技术,成为互联网上的第一个验证服务——Microsoft Passport(现称Windows Live ID),这一服务可以供其他网站使用以管理客户身份。开始,Windows Live ID计划用于处理Microsoft之外网站的验证,一度甚至吹嘘像eBay.com这样的重量级网站也成为其成员。但是,这个服务从未在Microsoft之外的网站上得到广泛采用,现在主要限于Microsoft管理的或者与Microsoft服务紧密集成的Web应用使用。为了弥补Microsoft撤出留下的空白,2005年LiveJournal的创立者Brad Fitzpatrick的工作得到了成果,一组相对新颖的规范出现,定义了一种开放而分散的验证服务。这种服务最早称作Yadis,现在名为OpenID,多年以来已经流行起来,号称拥有超过10亿个OpenID,有900万个网站消费这些ID。本小节将从较高的层次介绍这两种技术,以及它们与验证安全的相关性。
Windows Live ID
Windows Live ID是Microsoft Passport服务革新的最新阶段,用于验证Microsoft的核心Web应用,包括MSN、Hotmail、Messenger、Xbox Live、Channel9等。Windows Live ID是一种包含用于在Windows Live ID服务上验证用户的一个或者多个声明组成的数字身份。这些声明可能由用户电子邮件、所属组织和用户所关联的角色、关系和其他授权相关数据组成。验证通过使用用户名/密码配对、强密码和安全PIN组合、智能卡或者自发行的Windows CardSpace卡实现。Windows Live ID也支持特殊的机制如RADIUS协议以验证非标准设备,包括手机和Xbox360。
Windows Live ID验证的基本后台过程是:首先,用户试图得到依赖Windows Live ID验证服务的网站的验证。假定用户尚未验证,他将被重定向到Windows Live ID验证网站,重定向中携带关于他试图验证的网站(例如Channel9.msdn.com)的信息。提示用户输入Windows Live ID验证凭据,一般是用户名和密码,如果验证尝试成功,一些验证令牌将在响应中的一个表单里返回。该表单将指向用户试图验证的网站(Channel9),响应中的JavaScript将成功地完成验证过程。传输验证令牌的表单方法对于从Windows Live ID服务所在的live.com到Channel9所在的Channel9.msdn.com域交流验证令牌来说是必要的。
当目标应用也位于live.com域之下时(像Hotmail),验证令牌一般设置在响应HTTP首部之中的cookie。但是,当目标域(例如channel9.mdsn.com)与Windows Live域(例如live.com)不同时,基于表单的令牌存储是必需的,因为浏览器强制的同源策略阻止一个域访问在另一个域中设置的cookie值。
许多分析中的常见主题暗示,使用Windows Live ID验证中最大的危险之一是使用可信任用户的计算机上盗取的验证cookie进行的重放攻击。当然,如果攻击者能够窃取验证凭据,那么就可以击垮大部分验证系统,正如本章较早对安全令牌重放攻击的讨论中所提到的那样。
和许多其他验证系统相似,Windows Live ID也容易遭到密码猜测攻击(最小的密码长度为6个字符,没有要求不同的大小写、数字或者特殊字符)。尽管没有固定的账户锁定功能,但是在一定次数的失败登录尝试之后,账户将被暂时禁止登录(错误信息中提出的是“一会儿”)。这种设计使在线密码猜测攻击的时间显著延长。
Windows Live Delegated Authentication: Windows Delegated Authentication服务使应用开发人员能够利用外部暴露的Windows Live验证Web服务于特定的Windows Live ID和服务交互并且读取相关数据。例如,开发人员可以创建一个应用连接和读取Windows Live Contacts数据(用于Hotmail、Messenger和Mobile),用于他自己的应用。在Microsoft术语中,提供Contact数据访问的Windows Live Contacts API被称作资源提供者(Resource provider),连接到它的应用称作应用提供者(Application provider)。为了访问尝试的成功,用户必须通过许可用户界面(Consent user interface)允许这一操作。许可的寿命和有效性以及允许数据访问的范围可在任何时候由最终用户调整。
当用户通过许可用户界面为应用提供者提供访问资源提供者的权限时,返回一个许可令牌(Consent token)和授权令牌(Delegation token)给应用提供者,用于后续的操作。这两个令牌的组合对于应用提供者验证对资源提供者保护的数据的后续访问来说是必需的。许可令牌包含定义用户允许应用提供者访问的“提供物”和“操作”,以及其他应用提供者所需要的重要数据。授权令牌是包含在许可令牌中的加密数据块,在执行读取或者操纵验证过的用户数据的操作时必须传递给资源提供者。重要的是,授权令牌可以用于验证资源提供者,即使对应的用户已经注销了Windows Live。但是,许可和授权令牌的寿命由最终用户定义。
虽然Delegated Authentication为开发人员提供了创建集成于Microsoft资源提供者所需的灵活性,但是对于最终用户有额外的安全风险。首先,应用提供者始终有遭到入侵的风险,导致活动的验证令牌泄露给未授权方以及对来自资源提供者的本地缓冲数据的访问。这种可能的泄露增加了通过资源提供者访问的数据的整体攻击面。
当然,恶意用户可能注册邪恶的应用提供者诱惑轻信和容易受骗的用户(我们面对过很多),使他们提供资源提供者的访问授权,这种风险始终存在。尽管这种风险值得考虑,但是与常规的钓鱼攻击没有显著的不同。
OpenID
OpenID是一种以用户为中心的分散验证系统,提供与Windows Live ID相同的服务。关键的不同是在OpenID中没有中心验证提供者。提供者可以是任意数量的组织,带来了更好的选择和灵活性。
对一个依赖方(以前称为OpenID消费者)网站验证的过程很简单。首先,未验证的用户访问支持OpenID的网站——比如slashdot.com——选择OpenID作为验证方法。接着提示用户提供一个指定其选定提供者的一个唯一身份URL。例如,一个流行的提供者MyOpenID(www.myopenid.com)创建<用户名>.myopenid.com形式的URL,这里的<用户名>是创建MyOpenID用户时选择的名称。当试图向依赖方(Slashdot)验证的用户提供这一URL时,就被重定向到提供网站(MyOpenID)的登录页面,提示输入账户创建时选择的密码。如果用户提供了正确的密码,他将从OpenID提供者被重定向回原始网站,成为已验证用户。从这时起,如果他是第一次验证到该网站,可能会被要求完成与简档相关的信息。
这个示例使用密码作为必需的验证凭据,但是这对于OpenID规范不是强制的。不强制使用凭据类型使验证提供者可以支持任何数量的凭据类型,例如客户端证书、生物特征测定设备或者智能卡。
使用OpenID最大的缺点是,OpenID账户凭据的一次泄露,就将导致受害用户到这时为止使用的每个OpenID Web应用都受到危害。虽然攻击者可能不知道它们是什么应用,但是很容易列举流行的网站直到碰到自己感兴趣的网站。这种风险可以通过实施强密码、定时修改密码或者简单地选择更强的验证方法如客户端证书和其他数据身份系统(如Windows CardSpace)来缓解。
攻击者很容易诱骗用户在恶意的OpenID钓鱼网站上提供凭据,这增大了凭据盗窃的风险。谈到OpenID安全性时,这个问题通常最先被提起。例如,很容易创建一个网站,看上去接受常规的OpenID提供者URL,但是在后端将验证用户重定向到一个类似所选择的提供者但由攻击者控制的网站。除非用户很小心地注意到他们被重定向到其他网站,否则等他们注意到攻击就为时太晚了。其他安全性考虑已经在OpenID2.0验证规范中列出,链接可以在本章结尾处的“参考与延伸阅读”中找到。
2007年2月,Microsoft宣布与JanRain、Sxip和VeriSign合作,将Microsoft Windows CardSpace数字身份平台技术集成到OpenID中,成为OpenID的抗仿冒验证解决方案的一部分。因为CardSpace依赖于加密技术支持的数字身份,攻击者将很难在没有直接侵害客户机器上存储的数字身份的情况下假扮客户。更多关于Microsoft Windows CardSpace的信息在下一小节中提供。
虽然与安全不相关,但OpenID的另一个缺点是,它尚未被许多在线社区的主要成员采用。虽然Microsoft、Google和Yahoo!现在都已经成为OpenID提供者,但是这些组织目前都没有将这些凭据用于它们最流行的网络资产上。换句话说,用户将不会很快使用基于Google的OpenID用户登录到Hotmail。
Windows CardSpace
Windows CardSpace是一种身份选择器技术,用于为应用的最终用户提供身份和验证服务。经常用来说明这种技术的一个比喻是钱包。在我们的日常生活中,我们使用各种卡向相关的组织证明自己的身份,这些卡包括信用卡、健康保险、驾照和健身会员卡。有些身份卡片如信用卡需要高级的安全和保证,确认持有该卡的人是真正的所有者。其他卡片如健身会员卡或者借书卡,需要的保证较少,假造和盗窃卡片的后果也不太严重。Windows CardSpace是一种数字钱包应用,用户可以用它管理他们拥有的各种服务的数字身份(称作信息卡)。这些身份可能是第三方受信任的身份提供者签发的官方卡,也可能是用户自己签署的个人信息卡。需要高级安全的应用可能要求特定组织签发的信息卡,而其他应用可能接受任何自行签署的身份。
2008年3月,德国波鸿大学的研究人员们描述了一种针对CardSpace技术的攻击,可以用于在安全验证令牌的寿命期内对一个攻击者指定的网站假冒受害用户的身份。这种攻击的成功依赖于客户端DNS项目的恶意修改,以及客户对攻击者提供的服务器端证书的轻信。虽然没有超出可能的范围,但是如果攻击在毒害客户端DNS和使用户信任恶意的服务器证书中都获得成功,那么不管是否使用验证技术都无济于事。描述这种攻击和所使用方法的合法评论的链接(包括Microsoft首席身份架构师Kim Cameron的回复)可以在本章结尾处的“参考与延伸阅读”中找到。