建模权限系统

84

你如何对处理应用程序内执行某些操作的权限的系统进行建模?

3个回答

160

安全模型是一个广泛(且开放)的研究领域。有很多可供选择的模型,范围从简单到复杂:

  • Lampson的访问控制矩阵列出了系统中每个域对象和每个主体以及该主体被允许在该对象上执行的操作。它非常冗长,如果实际按照这种方式实现,会占用大量内存。

  • 访问控制列表是Lampson矩阵的简化版本:将其视为类似于稀疏矩阵实现的东西,列出对象和主体以及允许的操作,并且不编码Lampson矩阵中所有“null”条目。访问控制列表可以包括“组”作为方便,列表可以通过对象或主体(有时通过程序,例如AppArmorTOMOYOLIDS)进行存储。

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

...从简单的开始,到更复杂的,这些都会为对象和主体分配安全标签:

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

  • Denning's Lattice是一个模型,其中主体以非常分层的方式与哪些安全标签进行交互。

  • Bell-LaPadula类似于Denning's Lattice,并提供规则以防止泄露最高机密数据到未分类的级别,常见扩展提供更好的军事风格“需要知道”支持的隔离和分类。

  • Biba Model类似于Bell-LaPadula,但是“颠倒过来”-Bell-LaPadula专注于保密性,但对完整性没有任何作用,而Biba专注于完整性,但对保密性没有任何作用。(Bell-LaPadula防止某人阅读所有间谍名单,但会很乐意让任何人将任何内容写入其中。Biba会很乐意让任何人阅读所有间谍名单,但几乎不允许任何人向其中写入。)

  • 类型强制执行(及其姊妹,域类型强制执行)为主体和对象提供标签,并指定允许的对象-动词-主题(类)表。这是熟悉的SELinux和SMACK。

然后还有一些与时间流逝有关的技术:

  • Chinese Wall 是在商业环境中开发的,用于分离在给定市场上为竞争对手提供服务的组织内的员工:例如,一旦约翰逊开始为埃克森美孚账户工作,他将无法访问BP账户。如果约翰逊先从事BP工作,他将被拒绝访问埃克森美孚的数据。

  • LOMAChigh-watermark 是两种动态方法:LOMAC随着进程访问越来越高级别的数据而修改进程的权限,并禁止向较低级别写入(进程向“最高安全性”迁移),而high-watermark随着更高级别的进程访问数据而修改数据标签(数据向“最高安全性”迁移)。

  • Clark-Wilson 模型非常开放;它们包括不变量和规则,以确保每个状态转换不违反不变量。(这可以简单地是double-entry accounting或者像HIPPA一样复杂。)想象一下数据库事务和约束。

如果您想深入了解已发布的模型,Matt Bishop的《计算机安全:艺术与科学》绝对值得一读。


7
非常优秀的回答。阅读有趣。我想知道这个过于简单但并不罕见的系统在你的列表中属于哪一类:“默认情况下,访客级别为0,注册用户级别为5,系统管理员级别为9。每个操作都与一个级别相关联,并且只能由具有该级别或更高级别的人执行。” - Oddthinking
1
@Oddthinking,这个简单的模型可以有几种实现方式 :) 但最简单的“匹配”是Ring模型。在x86中实现时,它有四个级别,就像你的例子一样,每个级别都添加了只能由该级别或更高级别的代码执行的操作。(你给它们命名是一个正交问题。)我也可以很容易地想象ACL、Capability、Lattice、BLP和TE实现这个例子。我不会感到惊讶如果其他人也能够实现这个模型;但简单性是一个好品质。 :) - sarnold
@Frank,谢谢!我的拼写糟糕透顶,感谢你的指正。 - sarnold

9


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接