**Biba Integrity Model**: No Read Down, No Write Up
什么是 Biba 模型?
Biba 模型(1975)强制执行完整性:主体和对象具有完整性级别。规则:禁止向下读(不读取低完整性数据),禁止向上写(不写入高完整性数据)。因此,高完整性数据不会被低完整性来源破坏。
模型
[request_definition]
r = sub, sub_level, obj, obj_level, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = (r.act == "read" && r.sub_level <= r.obj_level) || (r.act == "write" && r.sub_level >= r.obj_level)
Policy
通常没有 p 规则;匹配器根据请求中的级别来实现 Biba:
- No Read Down (Simple Integrity Property): 主体不能读取完整性级别较低的对象
- No Write Up (Star Integrity Property): 主体不能写入完整性级别较高的对象
核心原则
Biba 的“向上读,向下写”方法反转了 Bell-LaPadula 模型的“向下读,向上写”。这确保了:
- Data Integrity Protection: 防止来自低完整性来源的高完整性数据损坏
- Controlled Information Flow: 限制写入仅从较高完整性级别流向较低完整性级别
- Trust Preservation: 保持每个完整性级别的数据可信度
示 例
请求示例
alice, 3, data1, 1, read # alice (level 3) reads data1 (level 1) - DENIED (No Read Down)
bob, 2, data2, 2, read # bob (level 2) reads data2 (level 2) - ALLOWED
charlie, 1, data1, 1, read # charlie (level 1) reads data1 (level 1) - ALLOWED
bob, 2, data3, 3, read # bob (level 2) reads data3 (level 3) - ALLOWED
charlie, 1, data2, 2, read # charlie (level 1) reads data2 (level 2) - ALLOWED
alice, 3, data3, 3, write # alice (level 3) writes data3 (level 3) - ALLOWED
bob, 2, data3, 3, write # bob (level 2) writes data3 (level 3) - DENIED (No Write Up)
charlie, 1, data2, 2, write # charlie (level 1) writes data2 (level 2) - DENIED (No Write Up)
alice, 3, data1, 1, write # alice (level 3) writes data1 (level 1) - ALLOWED
bob, 2, data1, 1, write # bob (level 2) writes data1 (level 1) - ALLOWED
完整性级别
Biba 将完整性级别表示为整数,其中较高的值表示更高的完整性:
- Level 1: Low integrity (public data, user-generated content)
- Level 2: Medium integrity (verified data, trusted sources)
- Level 3: High integrity (system data, administrative content)
- Level 4: Critical integrity (security policies, system configuration)
用例
常见的 Biba 模型应用场景:
- 需要数据准确性的金融系统
- 医疗记录管理
- 需要数据完整性的数据库系统
- 防止数据损坏比防止泄露更重要的环境
- 信息准确性和可靠性至关重要的系统
实现说明
- 强制执行专注于完整性的强制访问控制 (MAC)
- 系统管理员根据数据的可信度分配完整性级别
- 访问决策取决于完整性级别,而非用户身份
- 通过受控的读/写操作防止数据损坏
- 与 Bell-LaPadula 不同,大多数 Biba 实现使用的完整性级别较少
与 Bell-LaPadula 的比较
| 方面 | Bell-LaPadula | Biba |
|---|---|---|
| 主要关注点 | 机密性 | 完整性 |
| 读取规则 | 禁止向上读 | 禁止向下读 |
| 写入规则 | 禁止向下写 | 禁止向上写 |
| 口诀 | "向下读,向上写" | "向上读,向下写" |
FAQ
“禁止向下读,禁止向上写”是什么意思? 主体不能读取比自身完整性级别更低的数据(禁止向下读),也不能写入比自身完整性级别更高的数据(禁止向上写)。这两条规则旨在防止低完整性数据污染高完整性数据。
Biba 和 Bell-LaPadula 有什么区别? Bell-LaPadula 通过“禁止向上读,禁止向下写”来保护机密性;而 Biba 通过镜像规则来保护完整性。上表对两者进行了比较。
Casbin 是否内置了 Biba 模型? Casbin 没有名为 Biba 的内置模型。你可以像本页所示那样,将其编写为基于完整性级别的匹配器(matcher);同样的方法适用于任 何 Casbin 移植版本。
Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.