角色矩阵是帮助授权审计进程的一个有用工具。角色矩阵包含一个应用程序中所有用户(或者用户类型)及其对应访问权限的列表。角色矩阵能够帮助图解应用中访问令牌和ACL之间的关系。这种矩阵的思路不一定要全面地分类每一种允许的操作,而是记录操作的执行方式以及所需的会话令牌或者其他参数。表5-5是一个矩阵的示例。
表5-5 角色矩阵实例
角色矩阵类似于功能地图。当我们包含每个用户访问特定功能的URI时,模式就会显现出来。注意表5-5中显示了一个管理员通过添加EUID参数查看另一个用户的简档。这个矩阵还能帮助识别会话信息以及授权方法在哪里进行处理。例如,一个应用可能只依靠cookie值,这种情况下矩阵可能填入cookie名称和值,如AppRole=manager,UID=12345或IsAdmin=false。其他应用可能在URL中放置这些信息,这种情况下这些值出现在参数中。当然,这只是不安全的应用根据用户提供数据来做出授权决策的例子。毕竟,当一个应用期望用户告诉它重要的授权相关信息(如他是否管理用户)时,授权组件的实现就存在某种相当严重的问题。像IsAdmin这样的布尔标志,AppRole这种角色名参数以及顺序的用户ID应该始终被看作嫌疑。安全的应用一般在授权cookie中加密这些信息以避免篡改,或者完全不在客户端存储角色相关的数据。实际上,不在客户端存储角色相关数据往往是最安全的方法,因为它能避免篡改和重放攻击。
角色矩阵在应用不使用直接的变量名时更有帮助。例如,应用可能简单地为每个变量指派一个字母,但是并不阻碍你修改变量值绕过授权。最终,你将能合并各种攻击场景——在应用包含许多用户类型层次时特别有用。
接下来,我们将转向阐述一些针对Web应用授权机制的攻击实例。