基于模型的安全权限运行时检查
1. 引言
在系统安全领域,基于权限的访问控制是一种常用的安全概念。它将系统中的实体(如用户或对象)与权限相关联,只有当实体拥有必要的权限时,才允许其对其他实体执行特定操作。然而,设计和实施一个正确的基于权限的访问控制策略是一项极具挑战性的任务,这主要是因为系统实体之间存在复杂的交互,而且权限还可以被委托给其他对象。
Java自JDK 1.2安全架构以来提供的动态访问控制机制,如GuardedObjects,虽然功能强大,但管理起来却十分困难,因为很容易忘记进行访问检查。一旦没有执行适当的访问控制,整个系统的安全性就可能受到威胁。此外,通过授予对包含签名密钥的对象的访问权限,可能会间接且无意地授予对其他对象的访问权限。
为了解决这些问题,我们提出了一种将运行时检查集成到早期设计模型中的方法,特别是针对使用UML进行的面向对象设计。该方法涵盖了静态建模和动态建模两个方面。静态建模主要涉及在类图中引入拥有和所需的权限以及权限委托的能力;动态建模则侧重于系统对象交互过程中权限的使用和委托,通过序列图进行建模。为了确保基于权限的访问控制策略的正确性,我们还定义了静态和动态模型内部以及它们之间的权限相关方面的一致性检查。
2. 面向对象安全权限的运行时检查
2.1 对象交互与权限控制
在面向对象系统中,对象之间的交互通常表现为一个对象作为执行者对另一个被动对象执行操作。这些操作会改变或激活被动对象,使其也成为执行者,进而对其他实体执行操作。
在安全关键系统中,对操作执行的控制至关重要。为此,操作的执行由权限进行控制,只有当执行者拥有相关权限时,才允许其对特定对象发起操作。