BLP模型

本篇文章是调研了许多资料后对 BLP 模型的一个总结
首发公号:Rand_cs

MLS,Multi-level Security,主要关心的是数据机密性

D. Elliott Bell 和 Leonard J. LaPadula 在 1996 年提出了基本的 BLP 模型,主要有两个性质:

  1. The Simple Security Property states that a subject at a given security level may not read an object at a higher security level.

即 no read up,主体不能够“读”比自己安全级别高的客体,可以向下读以及平级读

  1. The * (Star) Security Property states that a subject at a given security level may not write to any object at a lower security level.

​ 即 no write down,主体不能够“写”比自己安全级别低的客体,可以向上写或平级写

(据说第二条性质叫做 *-property 是因为最开始不知道取什么名字,然后随手写下 *-property,后来也没找到更好的名字,于是这个名字就这样被草率的保留下来)

在这里插入图片描述

MIC,mandatory integrity control,关心的数据的完整性

相关理论模型为 Biba Model,一般来说写操作我们认为是可能会破坏数据的完整性,所以从数据完整性的角度来看,客体只信任级别比它高的主体对它进行写操作,模型中举了一个现实中的例子:将军可以给士兵下达命令,但是反过来不行。

Biba Model 同样也定义了两条规则,与 BLP 完全相反:

  1. The Simple Integrity Property states that a subject at a given level of integrity must not read data at a lower integrity level (no read down).
  2. The * (star) Integrity Property states that a subject at a given level of integrity must not write to data at a higher level of integrity (no write up).

对于 完整性级别和安全性级别的关系,在 PitBull 系统中,完整性级别 = 安全性级别

在这里插入图片描述

后来 BLP 模型也考虑一定的数据完整性,对 *-property 这条性质加强,提出 Strong Star Property:主体只能对同级别的客体进行写操作,不再允许向上写。

在这里插入图片描述

而 SELinux 里,没有实现 MIC,但是实现的 MLS 中满足此 Strong Star Property。

上述都是理论模型,想要落地到实践,具体在某个操作系统上实现,只有上述概念不够。最明显的一个例子就是调度器这样的主体,它的功能是分发调度进程,调度需要换出换进所有其他进程的上下文,相当于说调度器需要读写所有安全级别的进程,那么应该给调度器什么安全级别?如果只有上述的概念,给什么级别都不行,给高安全级别,但是它要写低安全级别信息,给低安全级别但它又要读取高安全级别的信息。再者,在现实的系统中,安全级别可能需要动态的变化来保证一定的灵活性,比如说不同级别的用户先后从同一个 tty 登录,那相应的 tty 文件的级别应该也是不一样的,这就需要 tty 的级别动态的变化。

为此,BLP 模型又做了改进,引入了可信主体的概念,就相当于给某个主体开个后门,开放所有权限。

但是又有问题,这个后门开的太大了,直接就放开所有权限,认为此主体完全可信,这是有悖于 principle of least privilege 最小特权原则。在 Linux 的 DAC 模型中,如果需要特权操作直接给 root 权限,也是有悖于最小特权原则,所以有了 capability 将能力细分,有了 MAC 更加精细的进行访问控制。

因此,现实中对一个实体的信任只能在一定范围内,一个可信实体能同时获取所有的特权是不合理的。所以后来对 BLP 模型再做改进,一些需要特权操作的主体只有在指定的范围内是可信的,这样可以把权利非常集中的可信主体变换成权利相对分散的多个部分可信主体,符合最小特权原理。

对于如何实现特权分散,一些官方(Bell 等人、SELinux 等等) 后来一直都没有提出明确公开的理论模型,至少从目前公开的资料来看是这样。但是有相应的概念提出,在 GEMSOS 和 DG/UX 系统的一些手册和论文当中,明确提出了单级实体,多级实体的概念。这里的单级实体就是说主体和客体就一个安全级别标签,多级实体表示主体和客体有多个安全级别标签,可以看做是安全级别范围。网上也有一部分人提出了有关多级实体的理论模型,并提供了相应的数学证明。

总的来说,提出的方案便是多级实体。每个实体的有一个安全级别范围,主体访问客体时安全级别比较有了更大的灵活性。比如说对于某些主体想要进行特权操作(违反 BLP 的两条规则),现在就可以不用给它完全可信主体的属性,放开所有权限。因为有了级别范围,可以在级别比较时多增加一些判断条件来达到 信任只保证在一定范围内的目的。

(另外使用安全级别范围的形式,还可以用来实现 MIC 来保证数据完整性,具体怎么操作待调研)

具体以 SELinux 中对 BLP 模型的实现来说明:

SELinux 中安全上下文的格式如下:

在这里插入图片描述

其中第四部分为安全级别范围,低安全级别表示当前有效的安全级别,高安全级别只有进行特权操作时才会用到。

SELinux 中使用 mlsconstrain 语句检查主体客体的安全级别是否符合 BLP 模型,语法格式如下:

mlsconstrain  class_set  perm_set  expression ;
#expression部分为u r t l h的布尔表达式
#u1, r1, t1, l1, h1 – source user, role and type, low security level, high security level; 
#u2, r2, t2, l2, h2 – target user, role and type, low security level, high security level;

其中 l1 表示主体的低安全级别,h1 表示主体的高安全级别,l2 表示客体的低安全级别,h2 表示客体的高安全级别,t1、t2 分别为主体客体的类型,也可以看做是属性,给主体一个 “部分可信属性” 就是在此部分实现。

在 SELinux 当中,对于安全级别之间的比较有 4 情况,l1 dom l2,表示主体的安全级别大于等于客体的安全级别, l1 domby l2 表示小于等于,l1 eq l2 表示相等,l1 incom l2 表示不相关(本文不涉及)

SELinux 当中对于“读”操作的限制:

mlsconstrain { dir file lnk_file chr_file blk_file sock_file fifo_file } { read getattr execute }(( l1 dom l2 ) or(( t1 == mlsfilereadtoclr ) and ( h1 dom l2 )) or( t1 == mlsfileread ) or( t2 == mlstrustedobject ));

如果 l1 和 l2 表示主体和客体当前有效的安全级别,如果 l1 dom l2,说明主体安全级别高于或等于客体,可以读

否则说明主体安全级别小于客体,表明主体想要进行特权操作了,那么需要客体当前有效的安全级别落在主体的安全级别范围内,即 l1 <= l2 <= h1,另外这个主体还需要 “部分可信主体属性” t1 = mlsfilereadtoclr

上面两条都不满足,如果主体具有 “完整的可信主体读属性”,或者 客体具有 “可信客体属性”,那么也允许读。(可信客体这个概念应该是 SELinux 中使用的,其他地方暂时为看见)

SELinux 当中对 “写” 操作的限制:

mlsconstrain { file lnk_file fifo_file dir chr_file blk_file sock_file } { write create setattr relabelfrom append unlink link rename mounton }(( l1 eq l2 ) or(( t1 == mlsfilewritetoclr ) and ( h1 dom l2 ) and ( l1 domby l2 )) or(( t2 == mlsfilewriteinrange ) and ( l1 dom l2 ) and ( h1 domby h2 )) or( t1 == mlsfilewrite ) or( t2 == mlstrustedobject ));

如果 l1 = l2,说明主体和客体的低安全级别相等,允许写。这里便是实现 strong *-property 的地方,按照最初的 BLP 模型,这里应该是 l1 domby l2 的时候都允许写,但现在加强了,只有主体和客体的安全级别相等的时候才允许写。

如果低安全级别主体想要往高安全级别客体写,即 l1 domby l2(这里其实就是 l1 < l2,没有等于,应为如果有等于,则在 l1 eq l2 的时候便会判断通过了),说明想要违反 strong *-property,违反完整性规则,那么需要额外条件 h1 dom l2,可以这样理解:因为在完整性规则描述中,高级别可以向低级别进行写操作,所以既然主体的低安全级别已经小于了客体的低安全级别,那么就必须要满足主体的高安全级别大于客体的低安全级别(主体的安全级别范围里至少有一个要大于等于客体的安全级别)。另外,该主体还需要有 “部分可信主体属性” t1=mlsfilewritetoclr

如果高级别主体想要往低级别客体进行写操作,即 l1 dom l2(这里其实就是 l1 > l2,没有等于,应为如果有等于,则在 l1 eq l2 的时候便会判断通过了),这是在最初的 BLP 模型中就是禁止的。想要进行此操作需要额外条件 h1 domby h2,可以这样理解:最初的 BLP 模型中所说 低级别主体可以向高级别主体写,所以虽然现在主体的低安全级别大于了客体的低安全级别,那么只要主体的高安全级别小于客体的高安全级别那也可以放行(客体的安全级别范围中至少有一个要大于等于主体的安全级别)。另外,该客体还需要有 “部分可信客体属性”,这里因为向下写是将信息泄露到下级客体,所以需要客体可信。

上面两条都不满足的话,如果主体具有 “完整的可信主体写属性”,或者客体具有 “可信客体属性”,那么也允许写。

从上面可以看出如果主体想要进行特权操作,仍然需要安全级别范围满足一定条件,并且具有“部分可信”的属性,满足最小特权原则。

相关文献:

Bell Padula 提出的 BLP 数学模型

https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.20.6361&rep=rep1&type=pdf

https://web.archive.org/web/20060618092351/http://www.albany.edu/acc/courses/ia/classics/belllapadula1.pdf

BLP Model Wiki

https://en.wikipedia.org/wiki/Bell%E2%80%93LaPadula_model

对 BLP 模型做了很好的阐释

https://www.acsac.org/2005/papers/Bell.pdf

Biba Model Wiki

https://en.wikipedia.org/wiki/Biba_Model

PitBull and SELinux Mandatory Access Control Systems

https://gdmissionsystems.com/-/media/General-Dynamics/Cyber-and-Electronic-Warfare-Systems/PDF/Brochures/PitBull-SELinux-MAC_-ystems-FINAL-Public_Release-18-1683.ashx?la=en&hash=0568ADEE99640F62C6982C35B0D23CDFF7B4CC0C

Bell 第一次在文献中提出安全级别范围,也是一堆数学证明

https://gfbix45521e79b0484907s5ukov9oqbb0065kvfiiz.eds.tju.edu.cn/stamp/stamp.jsp?tp=&arnumber=8113

DG/UX Unix 系统安全手册,它的 MAC 机制就是 MLS,其中用到的是多级实体

GEMSOS 系统安全方面的论文,明确提出了单级主体,多级主体,单级客体,多级客体的概念

https://www.nist.gov/system/files/documents/2016/09/15/aesec_rfi_mls-rtos.pdf
首发公号:Rand_cs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/313992.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【形式语言与自动机/编译原理】CFG-->Greibach-->NPDA(2)

本文将详细讲解《形式语言与自动机》&#xff08;研究生课程&#xff09;或《编译原理》&#xff08;本科生课程&#xff09;中的上下文无关文法&#xff08;CFG&#xff09;转换成Greibach范式&#xff0c;再转成下推自动机&#xff08;NPDA&#xff09;识别语言是否可以被接受…

机器学习部分相关概念

数据集(Data Set)即数据的集合&#xff0c;每一条单独的数据被称为样本(Sample)。 对于每个样本&#xff0c;它通常具有一些属性(Attribute)或者特征(Feature)&#xff0c; 特征所具体取得值被称为特征值(Feature Value)。 西瓜数据集 色泽根蒂纹理青绿稍蜷模糊乌黑蜷缩清晰 …

基于JavaWeb实验室预约管理系统(源码+数据库+文档)

一、项目简介 本项目是一套基于JavaWeb实验室预约管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;e…

C++程序编译

GCC编译器 文章目录 GCC编译器 源文件 为 Main.cpp 注意cpp文件 一定要用g命令 否则没办法执行 预处理&#xff08;Pre-Processing&#xff09;&#xff1a;首先会经过预处理器将程序中的预编译指令进行处理&#xff0c;然后把源文件中的注释这些没用的东西都给扬了。 g -E Mai…

redis 三主六从高可用docker(不固定ip)

redis集群(cluster)笔记 redis 三主三从高可用集群docker swarm redis 三主六从高可用docker(不固定ip) 此博客解决&#xff0c;redis加入集群后&#xff0c;是用于停掉后重启&#xff0c;将nodes.conf中的旧的Ip替换为新的IP&#xff0c;从而达到不会因为IP变化导致集群无法…

《VulnHub》DC:1

title: 《VulnHub》DC&#xff1a;1 date: 2024-01-01 12:46:49 updated: 2024-01-01 12:46:50 categories: WriteUp&#xff1a;Cyber-Range excerpt: 主机发现、目标信息扫描、漏洞扫描、网站指纹信息识别、网站目录扫描、drupal CMS 漏洞利用&#xff08;CVE 2014-3704&…

爱思唯尔的KBS——模板、投稿、返修、接收的总结

第二篇论文终于是接受了QAQ&#xff0c;被审稿人疯狂拖时间&#xff0c;KBS是真难绷啊 由于之前发布过关于爱思唯尔旗下的ESWA博客&#xff0c;KBS和ESWA是类似的&#xff0c;因此本篇博客主要说下区别以及期间碰到的各种情况&#xff0c;有疑问依然可以在评论区说&#xff0c;…

5个用于构建Web应用程序的Go Web框架

探索高效Web开发的顶级Go框架 Go&#xff08;或称为Golang&#xff09;以其简洁性、高效性和出色的标准库而闻名。然而&#xff0c;有几个流行的Go Web框架和库为构建Web应用程序提供了额外的功能。以下是五个最值得注意的Go框架&#xff1a; 1. Gin&#xff1a; Gin是一个高…

Impala4.x源码阅读笔记(三)——Impala如何管理Iceberg表元数据

前言 本文为笔者个人阅读Apache Impala源码时的笔记&#xff0c;仅代表我个人对代码的理解&#xff0c;个人水平有限&#xff0c;文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解&#xff0c;欢迎指正。 上一篇文章Impala4.x源码阅读笔记&#xff0…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切(ROI)功能(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切&#xff08;ROI&#xff09;功能&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的图像剪切&#xff08;ROI&#xff09;功能的技术背景CameraExplorer如何使用图像剪切&#xff08;ROI&#xff09;功…

mysql基础-字段类型及几点讨论事项

目录 1.主要字段类型 1.1整数 1.2.浮点数类型 1.3.文本类型 1.4.日期与时间类型 2.讨论几点有关字段类型的事 2.1 时间类型字段用字符还是datetime&#xff1f; 2.2 时间类型字段如何设置随时间更新&#xff1f; 2.3 字段长度够用即可 2.4 小数的字段类型选择&#xf…

错题总结五

一. 操作访问字节个数问题 这道题考察的是指针有关的知识&#xff0c;而这种指针的知识我们提到过 指针相关知识(入门)-CSDN博客 指针相关知识(进阶)-CSDN博客 在这里&#xff0c;我们复习一下。在指针里&#xff0c;int有4个字节&#xff0c;short有2个字节&#xff0c;换句…