跳转到主要内容

LBAC

什么是 LBAC?​

LBAC(Lattice-Based Access Control,基于格的访问控制) 是一个形式化模型,可以在同一个框架内同时执行机密性(confidentiality)和完整性(integrity)。本页面给出一种 Casbin 表述方式:主体和客体各自拥有一个机密性级别和一个完整性级别;由 matcher 在这两个维度上执行读/写规则。

模型​

[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 规则,二者合并在一个 matcher 中实现。

请求示例​

下面的示例演示了该 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:公开/无密级(Public/Unclassified)
  • 级别 2:机密(Confidential)
  • 级别 3:秘密(Secret)
  • 级别 4:绝密(Top Secret)

完整性级别​

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

适用场景​

该 LBAC 实现适用于:

  • 多级安全环境
  • 数据保护和数据准确性都同样重要的应用

实现要点​

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