您将如何建模一个系统,该系统处理在应用程序内执行某些操作的权限?
请浏览以下连结:
安全模型是一个很大的(开放的)研究领域。有大量的模型可供选择,从简单的:
兰普森的存取控制矩阵 列出了系统中的每个域对象和每个主体,以及主体被允许对该对象执行的操作。它非常冗长,如果实际以这种方式实现,则需要非常大的内存。
访问控制列表 是 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。
. . 还有一些包含了时间的流逝:
“中国墙”是在商业环境下开发的,目的是在一个为特定市场中的竞争对手提供服务的组织中将员工隔离开来: 例如,一旦约翰逊开始为埃克森-美孚(Exxon-Mobil)账户工作,他就不能使用英国石油(BP)的账户。如果约翰逊先开始为英国石油公司工作,他将被拒绝访问埃克森美孚的数据。
LOMAC 和 高水位线是两种动态的方法: LOMAC 在进程逐步访问更高级别的数据时修改进程的特权,并禁止向更低级别写入(进程向“顶级安全”迁移) ,而高水印在更高级别的进程访问数据时修改数据的标签(数据向“顶级安全”迁移)。
Clark-Wilson 模型是非常开放的; 它们包括不变量和规则,以确保每个状态转换不违反不变量。(这可以像 复式记帐会计复式记帐会计一样简单,也可以像 HIPPA一样复杂。)考虑数据库事务和约束。
Matt Bishop 的“计算机安全: 艺术与科学”绝对值得一读,如果你想对已发表的模型有更深入的了解的话。
我更喜欢 RBAC。虽然,你可以发现它非常类似于 前十字韧带,但他们 语义不同。