6.3 验证机制执行缺陷

由于在执行过程中存在错误,即使精心设计的验证机制也可能非常不安全。这些错误可能导致信息泄露、完全避开登录,或者使验证机制的总体安全弱化。与保密性不强的密码和可被蛮力攻击之类的设计缺陷相比,执行缺陷往往更加细微,更难以发现。由于大量威胁模型和渗透测试可能已经发现了最为注重安全的应用程序中的任何明显的执行缺陷,针对这类缺陷实施攻击通常会取得更大的成果。我们曾在某大型银行所采用的Web应用程序中发现以下所述的执行缺陷。

6.3.1 故障开放登录机制

故障开放逻辑是一种逻辑缺陷(将在第11章详细描述),如果验证机制中出现这种缺陷,就会造成十分严重的后果。

下面是一个精心设计的故障开放登录机制实例。如果由于某种原因,调用db.getUser()产生异常(例如,因为用户的请求中没有用户名或密码参数而出现空指针异常),用户仍然可以成功登录。虽然产生的会话可能并不属于某个特殊的用户,因此无法执行其全部功能,但攻击者仍然可以通过这种方法访问一些敏感数据或功能。

img157

img158

实际上,我们不能指望这样的代码通过即使是最简单的安全审查。但是,在更复杂的机制中很可能存在概念相同的缺陷。这些机制会产生大量分层方式调用,可能会出现许多潜在的错误并在不同的位置对它们进行处理,其中更复杂的确认逻辑可能需要维护重要的登录进展状态。