http://mdsec.net/auth/300/
一些应用程序使用精心设计的多阶段登录机制,例如:
输入用户名和密码;
提交在不断变化的物理令牌上显示的某个值。
多阶段登录机制旨在提高基于用户名和密码的简单登录模型的安全性。通常,多阶段登录机制首先要求用户通过用户名或类似数据项确认自己的身份;随后,登录阶段再执行各种验证检查。这种机制常常存在安全漏洞,特别是各种逻辑缺陷(请参阅第11章了解相关内容)。
错误观点
人们常常认为多阶段登录机制比标准的用户名/密码验证的安全漏洞更少。这种看法是错误的。执行多次验证检查可能会显著提高登录机制的安全性。但相应地,这个过程也存在更多的执行缺陷。如果一个多阶段登录机制存在多个执行缺陷,它甚至还没有基于用户名和密码的正常登录安全。
在执行过程中,一些多阶段登录机制对用户与早先阶段的交互做出潜在不安全的假设,如下所示。
应用程序可能认为访问第三阶段的用户已经完成第一、二阶段的验证。因此,它可能允许直接由第一阶段进入第三阶段并且提供正确证书的攻击者通过验证,使仅拥有部分正常登录所需的各种证书的攻击者能够成功登录。
应用程序可能会信任由第二阶段处理的一些数据,因为这些数据已经在第一阶段得到确认。但是,攻击者能够在第二阶段操控这些数据,提供一个不同于第一阶段的值。例如,在第一阶段,应用程序会判定用户的账户是否已经过期、被锁定或者属于管理用户,或者是否需要完成第二阶段以外的其他登录阶段。如果攻击者能在不同登录阶段的转换过程中干扰这些标记,他们就可以更改应用程序的行为,让他们只需部分证书即可通过验证,或者提升其权限。
应用程序可能认为每个阶段的用户身份不会发生变化,因此,它并不在每个阶段明确确认用户身份。例如,第一阶段可能需要提交一个有效的用户名和密码,第二阶段需要重新提交用户名(此时保存在隐藏表单字段中)和不断变化的物理令牌上的一个值。如果攻击者在每个阶段提交有效的数据对,但这些数据属于两个不同的用户,那么应用程序可能会允许该用户通过验证,认为他是两名用户中的任意一名用户。这就允许拥有自己物理令牌并发现其他用户密码的攻击者能够以该用户的身份登录(反之亦然)。虽然不对其他信息加以利用,攻击者无法完全攻破登录机制,但它的总体安全状态已严重削弱,应用程序为执行二元机制所投入的大量开支和努力并未取得预期的效果。