建模权限系统

Jam*_* P. 78 security permissions modeling action

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

sar*_*old 152

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

  • Lampson的访问控制矩阵列出了系统中的每个域对象和每个主体,以及允许委托人对该对象执行的操作.它非常冗长,如果以这种方式实际实现,则内存非常密集.

  • 访问控制列表是Lampson矩阵的简化:认为它类似于列出对象和主体以及允许动作的稀疏矩阵实现,并且不编码Lampson矩阵中的所有"空"条目.访问控制列表可以包括"组"作为方便,列表可以通过对象或通过委托人存储(有时,通过程序,如在AppArmorTOMOYOLIDS中).

  • 能力系统基于具有对象的引用或指针的想法; 进程可以访问一组初始功能,只有从系统上的其他对象接收它们才能获得更多功能.这听起来相当遥远,但想想Unix文件描述符:它们是对特定打开文件的不可伪造的引用,文件描述符可以传递给其他进程或不传递给其他进程.如果将描述符提供给另一个进程,它将可以访问该文件.围绕这个想法编写了整个操作系统.(最着名的可能是KeyKOS和EROS,但我确信这是一个值得商榷的问题.:)

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

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

  • Denning的莱迪思是一种模型,允许主体以非常分层的方式与哪些安全标签进行交互.

  • Bell-LaPadula类似于Denning的莱迪思,并提供了防止将绝密数据泄露到非分类级别的规则,并且通用扩展提供了进一步的划分和分类,以更好地提供军事风格的"需要知道"支持.

  • Biba模型类似于贝尔LaPadula,但"颠覆了" -贝尔LaPadula的重点是保密的,但什么都不做了完整,比芭专注于诚信,但什么都不做的保密性.(Bell-LaPadula阻止某人阅读所有间谍名单,但很乐意允许任何人写任何东西.Biba很乐意允许任何人阅读所有间谍名单,但禁止几乎所有人写入.)

  • 类型强制(及其同级,域类型强制)在主体和对象上提供标签,并指定允许的对象 - 动词 - 主题(类)表.这是熟悉的SELinux和SMACK.

..然后有一些包含时间的流逝:

  • 中国墙是在商业环境中开发的,旨在将组织内的员工分开,为给定市场中的竞争对手提供服务:例如,一旦约翰逊开始使用埃克森美孚帐户,他就不能访问BP帐户.如果约翰逊首先开始研究BP,他将被拒绝访问埃克森美孚的数据.

  • LOMAC高水印是两种动态方法:LOMAC在逐步访问更高级别的数据时修改进程的权限,禁止写入更低级别(进程向"顶级安全性"迁移),高水印修改标签数据作为更高级别的进程访问它(数据迁移到"最高安全性").

  • Clark-Wilson模型非常开放; 它们包括不变量和规则,以确保每个状态转换都不违反不变量.(这可以像复式会计一样简单,也可以像HIPPA一样复杂.)考虑数据库事务和约束.

Matt Bishop的"计算机安全:艺术与科学"绝对值得一读,如果你想更深入地了解已发布的模型.

  • 很好的答案.有趣的阅​​读.我想知道这个过于简单但不常见的系统在你的列表中的位置:"默认情况下,客户有0级,注册用户有5级,sys管理员有9级.每个操作都有一个与之关联的级别,并且只能由该级别或更高级别的人执行." (7认同)

Ser*_*nko 9

我更喜欢RBAC.虽然,您可以发现它与ACL非常相似,但它们在语义上有所不同.