跳转至主要内容

LBAC

什么是 LBAC?​

LBAC(基于格的访问控制) 是一个形式化模型,可以在同一框架中同时保证 机密性 和 完整性。本页展示 Casbin 中的一种写法:主体和对象各有一个机密性级别和一个完整性级别,匹配器在两个维度上同时执行读 / 写规则。

模型​

[request_definition]
r = sub, subject_confidentiality, subject_integrity, obj, object_confidentiality, object_integrity, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = (r.act == "read" && r.subject_confidentiality >= r.object_confidentiality && r.subject_integrity >= r.object_integrity) || (r.act == "write" && r.subject_confidentiality <= r.object_confidentiality && r.subject_integrity <= r.object_integrity)

当主体的机密性和完整性都 ≥ 对象时允许读;都 ≤ 对象时允许写。也就是在同一个匹配器中,机密性遵循类似 BLP 的规则,完整性遵循类似 Biba 的规则。

请求示例​

下面的示例展示这个 LBAC 实现如何评估请求:

# Normal read operations (ALLOWED)
admin, 5, 5, file_topsecret, 3, 3, read # admin (conf:5, int:5) reads file_topsecret (conf:3, int:3) - ALLOWED
manager, 4, 4, file_secret, 4, 2, read # manager (conf:4, int:4) reads file_secret (conf:4, int:2) - ALLOWED
staff, 3, 3, file_internal, 2, 3, read # staff (conf:3, int:3) reads file_internal (conf:2, int:3) - ALLOWED
guest, 2, 2, file_public, 2, 2, read # guest (conf:2, int:2) reads file_public (conf:2, int:2) - ALLOWED

# Read operation violations (DENIED)
staff, 3, 3, file_secret, 4, 2, read # staff (conf:3, int:3) reads file_secret (conf:4, int:2) - DENIED (conf < obj.conf)
manager, 4, 4, file_sensitive, 3, 5, read # manager (conf:4, int:4) reads file_sensitive (conf:3, int:5) - DENIED (int < obj.int)
guest, 2, 2, file_internal, 3, 1, read # guest (conf:2, int:2) reads file_internal (conf:3, int:1) - DENIED (conf < obj.conf)
staff, 3, 3, file_protected, 1, 4, read # staff (conf:3, int:3) reads file_protected (conf:1, int:4) - DENIED (int < obj.int)

# Normal write operations (ALLOWED)
guest, 2, 2, file_public, 2, 2, write # guest (conf:2, int:2) writes file_public (conf:2, int:2) - ALLOWED
staff, 3, 3, file_internal, 5, 4, write # staff (conf:3, int:3) writes file_internal (conf:5, int:4) - ALLOWED
manager, 4, 4, file_secret, 4, 5, write # manager (conf:4, int:4) writes file_secret (conf:4, int:5) - ALLOWED
admin, 5, 5, file_archive, 5, 5, write # admin (conf:5, int:5) writes file_archive (conf:5, int:5) - ALLOWED

# Write operation violations (DENIED)
manager, 4, 4, file_internal, 3, 5, write # manager (conf:4, int:4) writes file_internal (conf:3, int:5) - DENIED (conf > obj.conf)
staff, 3, 3, file_public, 2, 2, write # staff (conf:3, int:3) writes file_public (conf:2, int:2) - DENIED (both > obj)
admin, 5, 5, file_secret, 5, 4, write # admin (conf:5, int:5) writes file_secret (conf:5, int:4) - DENIED (int > obj.int)
guest, 2, 2, file_private, 1, 3, write # guest (conf:2, int:2) writes file_private (conf:1, int:3) - DENIED (conf > obj.conf)

安全级别​

在这个实现中,机密性和完整性都用整数表示,数值越大安全级别越高:

机密性级别​

  • 级别 1:公开 / 非密
  • 级别 2:秘密
  • 级别 3:机密
  • 级别 4:绝密

完整性级别​

  • 级别 1:低完整性(例如公开数据、用户生成内容)
  • 级别 2:中完整性(例如已验证数据、可信来源)
  • 级别 3:高完整性(例如系统数据、管理内容)
  • 级别 4:关键完整性(例如安全策略、系统配置)

适用场景​

这个 LBAC 实现适用于:

  • 多级安全环境
  • 既要保护数据、又要保证数据准确的应用

实现说明​

  • 该模型实现了具有双重安全属性的强制访问控制(MAC)
  • 安全级别由系统管理员分配
  • 访问判定同时考虑机密性和完整性级别
  • 该模型同时防止信息泄露和数据被破坏

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.