您将如何为处理在应用程序内执行某些操作的权限的系统建模?
安全模型是一个庞大(且开放)的研究领域。有大量模型可供选择,从简单的:
Lampson's Access control matrix 列出了系统中的每个域对象和每个主体,以及主体可以在该对象上执行的操作。它非常冗长,如果以这种方式实际实现,则非常占用内存。 Access control lists 是 Lampson 矩阵的简化:将其视为类似于列出对象和主体以及允许操作的稀疏矩阵实现的东西,并且不会对来自 Lampson 矩阵的所有“空”条目进行编码。为方便起见,访问控制列表可以包括“组”,并且可以通过对象或主体(有时,通过程序,如 AppArmor 或 TOMOYO 或 LIDS )存储列表。 Capability systems 基于对象的引用或指针的想法;一个进程可以访问一组初始的能力,并且只有通过从系统上的其他对象接收它们才能获得更多的能力。这听起来很遥远,但想想 Unix 文件描述符:它们是对特定打开文件的不可伪造的引用,并且文件描述符可以传递给或不传递给其他进程。如果您将描述符提供给另一个进程,它就可以访问该文件。整个操作系统都是围绕这个想法编写的。 (最著名的可能是 KeyKOS 和 EROS,但我相信这是一个值得商榷的
点。 :) ... 更复杂的,其中有分配给对象和主体的安全标签:
Security Rings ,例如在 Multics 和 x86 CPU 等中实现,并提供安全陷阱或门以允许进程在环之间转换;每个环都有一组不同的权限和对象。 Denning's Lattice 是一个模型,允许主体以非常分层的方式与哪些安全标签进行交互。 Bell-LaPadula 类似于 Denning 的 Lattice,并提供规则以防止将绝密数据泄露到非 secret 级别,通用扩展提供进一步的划分和分类,以更好地提供军事风格的“需要知道”支持。 Biba Model 与 Bell-LaPadula 类似,但“转过头来”——Bell-LaPadula 专注于 secret 性,但不为完整性做任何事情,而 Biba 专注于完整性,但不为 secret 性做任何事情。 (Bell-LaPadula 阻止某人阅读所有 spy 名单,但很乐意允许任何人在其中写入任何内容。Biba 很乐意允许任何人阅读所有 spy 名单,但几乎禁止所有人写入其中。) Type Enforcement(及其同级域类型强制实现)提供主体和对象的标签,并指定允许的对象-动词-主体(类)表。这就是大家熟悉的 SELinux 和 SMACK。 ..然后有一些融入了时间的流逝:
Chinese Wall 是在商业环境中开发的,目的是在为特定市场的竞争对手提供服务的组织内将员工分开:例如,一旦 Johnson 开始使用 Exxon-Mobil 帐户,他就不能访问 BP 帐户。如果约翰逊首先开始为 BP 工作,他将被拒绝访问埃克森美孚的数据。 LOMAC 和 high-watermark 是两种动态方法:LOMAC 在进程访问更高级别的数据时修改其权限,并禁止向更低级别写入(进程迁移到“最高安全性”),以及高水印修改数据上的标签随着更高级别的进程访问它(数据迁移到“最高安全性”)。 Clark-Wilson 模型非常开放;它们包括不变量和规则,以确保每个状态转换都不会违反不变量。 (这可以像 double-entry accounting 一样简单,也可以像 HIPPA 一样复杂。)想想数据库事务和约束。 如果您想更深入地了解已发布的模型,Matt Bishop 的“计算机安全:艺术与科学”绝对值得一读。