为权限系统建模

您将如何建模一个系统,该系统处理在应用程序内执行某些操作的权限?

18818 次浏览

安全模型是一个很大的(开放的)研究领域。有大量的模型可供选择,从简单的:

  • 兰普森的存取控制矩阵 列出了系统中的每个域对象和每个主体,以及主体被允许对该对象执行的操作。它非常冗长,如果实际以这种方式实现,则需要非常大的内存。

  • 访问控制列表 是 Lampson 矩阵的简化: 考虑它类似于稀疏矩阵实现,列出对象和主体以及允许的操作,并且不对 Lampson 矩阵中的所有“ null”条目进行编码。为方便起见,访问控制列表可以包含“组”,并且列表可以通过对象或通过主体(有时,通过程序,如在 装甲朋友盖子中)存储。

  • 能力系统 基于拥有对象引用或指针的想法; 进程可以访问一组初始能力,并且只能通过从系统上的其他对象接收这些能力来获得更多的能力。这听起来很遥远,但是想想 Unix 文件描述符: 它们是对特定打开文件的不可伪造的引用,文件描述符可以移交给其他进程,也可以不移交。如果您将描述符提供给另一个进程,它将有权访问该文件。整个操作系统都是围绕这个想法编写的。(最著名的可能是 KeyKOS 和 EROS,但我肯定这是一个有争议的 点:)

... 到更复杂的,有分配给对象和主体的安全标签:

  • 安全环 ,例如在 Multics 和 x86 CPU 中实现的,并提供安全陷阱或门,允许进程在环之间转换,每个环有一组不同的特权和对象。

  • Denning 的 Lattice 是一个允许主体以非常层次化的方式与安全标签交互的模型。

  • Bell-LaPadula 类似于 Denning 的晶格,它提供了防止绝密数据泄露到非机密级别的规则,通用扩展提供了进一步的防火分区和分类,以更好地提供军事式的“需要知道”支持。

  • 比巴模特与 Bell-LaPadula 类似,但是“完全相反”——贝尔-拉帕杜拉致力于保密,但是没有为诚信做任何事情,而 Biba 致力于诚信,但是没有为保密做任何事情。(Bell-LaPadula 禁止别人阅读《所有间谍的名单》 ,但是很乐意允许任何人把任何东西写进去。比巴很乐意允许任何人阅读《所有间谍名单》 ,但禁止几乎所有人都写进去。)

  • 类型实施 (及其兄弟域类型实施)为主体和对象提供标签,并指定允许的 object-version-subject (class)表。这是我们熟悉的 SELinux 和 SMACK。

. . 还有一些包含了时间的流逝:

Matt Bishop 的“计算机安全: 艺术与科学”绝对值得一读,如果你想对已发表的模型有更深入的了解的话。

我更喜欢 RBAC。虽然,你可以发现它非常类似于 前十字韧带,但他们 语义不同