Bell-LaPadula model
最早的计算机私密性形式化模型之一,对计算机私密性技术的发展影响深远。
多级私密性模型(Multilevel Security Model),从低到高分‘UNCLASSIFIED’、‘CONFIDENTIAL’、‘SECRET’、‘TOP SECRET’四个密级。
对于客体Object,根据其敏感程度分配密级;对于主体Subject,根据其访问的客体分配密级。
如果主体在某密级有权限,则该密级称为此主体的‘安全准入级别(Security Clearance)’,记作level(s) ;
如果客体被划分到某密级,则该密级称为此客体的‘安全分级(Security Classification)’,记作level(o) ,安全分级的值又称为label,如:客体o的安全性分级是TOP SECRET,则称客体o的label是TOP SECRET。
定义1. ** The simple security property says that a subject s can read an object o if
and only if level(o) ≤ level(s). 主体不能访问自己安全准入级别不到的客体。又称为no-reads-up规则(主体不能向上读客体),该规则是*强制访问控制***。
定义1的规则不能防止信息的**‘Flowing Downward’**.
Flowing Downward: 例如冯广健的安全准入级别是CONFIDENTIAL,根据定义1,由于level(《绿色兵团》) = SECRET > CONFIDENTIAL = level(冯广健) ,冯广健不能访问《绿色兵团》,但谢丹青可以访问《绿色兵团》,谢丹青把《绿色兵团》写进了《大象历险记》专辑,同时,冯广健有《大象历险记》的访问权限,这时,属于SECRET的《绿色兵团》就泄露到了CONFIDENTIAL的安全准入级别。
由此引出定义2:
定义2. The ∗-property says that a subject s can write an object o if and only if
level(s) ≤ level(o). 又称为no-writes-down规则(主体不能向下写客体),该规则是***强制访问控制***。
根据该规则,因为level(谢丹青) = SECRET > level(《大象历险记》) ,所以谢丹青不能把《绿色兵团》写入到《大象历险记》,从而防止了Flowing Downward。
客体的所有者(owners of objects )可以自主访问控制:
定义3. The discretionary security property says that a subject s can read an
object o only if the access-control matrix entry for s and o contains the read right. 自主访问控制。
对于‘读’权限,需要检查定义1和定义3。
例如:只有 level(《大象历险记》) ≤ level(谢丹青) 且 在系统访问控制矩阵中,谢丹青有《大象历险记》的读权限,即满足定义1和3,则谢丹青可以读《大象历险记》。
对于‘写’权限,需要检查定义2.
基本安全性定理(Basic Security Theorem). Let a system Σ have a secure initial state 𝜎0. Further, let every command in this system obey the simple security property, the ∗-property, and the discretionary security property. Then every state 𝜎i, i ≥ 0, is also secure. 如果系统的每条命令都满足定义1、定义2、定义3的约束,并且系统的初态s0是安全的,则系统的可达状态si也是安全的。
可以将基本安全性定理推广到有数量更多的递增密级的情况。
问题:
Erin为政府部门的欧洲分部European Department(EUR)工作,Don为该部门的亚洲分部Asia Department(ASIA)工作,Erin和Don的安全准入级别都是SECRET。Erin能看的文件,Don也必须看到,反之亦然。
要满足这种需求,只是增加更多的安全级别的不行的。
解决:
一个可选方法是“将安全密级level进行扩展”,增加一个分类category,这样,一个**安全级别(security compartment)**是二元组(level, category)。
这样,Erin的安全级别是(SECRET, {EUR}) ,Don的安全级别是(SECRET, {ASIA}) 。文件同样处理,文件EurDoc的密级是(CONFIDENTIAL, {EUR}) ,文件AsiaDoc的密级是(SECRET, {ASIA}),文件EurAsiaDoc的密级是(SECRET, {EUR, ASIA})。有level(Erin) = (SECRET, {EUR}), level(EurDoc) = (CONFIDENTIAL, {EUR}), 且 level(EurAsiaDoc)= (SECRET, {EUR, ASIA}) 。
为了对安全级别进行对比,引入关系’dom’,表示‘大于等于’。
定义:令L和L’是安全级别,C和C’是分类,则:
(
L
,
C
)
d
o
m
(
L
′
,
C
′
)
当
且
仅
当
L
′
=
L
且
C
′
⊆
C
(L, C)dom(L′, C′) 当且仅当L′ = L且C′ ⊆ C
(L,C)dom(L′,C′)当且仅当L′=L且C′⊆C
根据该定义,对比主体和客体的安全级别:
l
e
v
e
l
(
E
r
i
n
)
=
(
S
E
C
R
E
T
,
E
U
R
)
d
o
m
(
C
O
N
F
I
D
E
N
T
I
A
L
,
E
U
R
)
=
l
e
v
e
l
(
E
u
r
D
o
c
)
;
level(Erin) = (SECRET, {EUR}) dom (CONFIDENTIAL, {EUR}) = level(EurDoc) ;
level(Erin)=(SECRET,EUR)dom(CONFIDENTIAL,EUR)=level(EurDoc);
l e v e l ( E u r A s i a D o c ) = ( S E C R E T , E U R , A S I A ) d o m ( S E C R E T , E U R ) = l e v e l ( E r i n ) . level(EurAsiaDoc) = (SECRET, {EUR, ASIA}) dom (SECRET, {EUR}) = level(Erin) . level(EurAsiaDoc)=(SECRET,EUR,ASIA)dom(SECRET,EUR)=level(Erin).
用dom关系,将之前的定义1和定义2进行推广:
定义1’. The simple security property says that a subject s can read an object o if
and only if level(s) dom level(o).
定义2’. The ∗-property says that a subject s can write to an object o if and only
if level(o) dom level(s).
定义3. 假设自主访问控制的规则中忽略分类,只看密级。
对于文件EurDoc,因为level(Erin) dom level(EurDoc),Erin可以读EurDoc(由**定义1’可得),但不能写EurDoc(由定义2’**可得)。
对于文件EurAsiaDoc,因为level(EurAsiaDoc) dom level(Erin),Erin不能读EurDoc(由**定义1’可得),但可以写EurDoc(由定义2’**可得)
问题:
如何确定Erin和Don两个人共同的最高读权限和最低写权限?
解决前提:必须明确dom的性质
dom关系的性质:
-
自反性——level(s) dom level(s);
-
非对称性——当level(s) dom level(o) and level(o) dom level(s) 时,有level(s) = level(o);
-
传递性——如果level(s1) dom level(o) 且 level(o) dom level (s2),则有level(s1) dom level (s2);
-
(两个安全级别的)下确界/最大下限 greatest lower bound (glb)——
定义. Let A = (L, C) and B = (L′, C′). Then glb(A, B) = (min(L, L′), C ∩ C′).
例:Erin和Don的最高读权限是:
g l b ( l e v e l ( D o n ) , l e v e l ( E r i n ) ) = ( S E C R E T , χ ; ) . glb(level(Don), level(Erin)) = (SECRET, χ; ). glb(level(Don),level(Erin))=(SECRET,χ;). -
(两个安全级别的)上确界/最小上限 least upper bound (lub)——
定义. Let A = (L, C) and B = (L′, C′). Then lub(A, B) = (max(L, L′), C ∪ C′).
例:Erin和Don的最低写权限是:
g l b ( ( l e v e l ( D o n ) , l e v e l ( E r i n ) ) = ( S E C R E T , E U R , A S I A ) . glb((level(Don), level(Erin)) = (SECRET, {EUR, ASIA}). glb((level(Don),level(Erin))=(SECRET,EUR,ASIA).
dom关系的上述五点性质表明安全级别(security compartment)的二元组是一个名为‘格(lattice)’的数学结构。(因此Bell-LaPadula model是一个格模型)
当Bell-LaPadula model应用于具体的系统时,开发人员通常会做一些修改,比如约束当前安全级别的写操作、限制安全级别的数量等。该模型可用于抵御恶意软件对文件的改写(只能读,不能写)。
Biba’s Strict Integrity Policy Model
Bell-LaPadula model模型的变体,注重完整性/完备性,和Bell-LaPadula model在数学上是对偶关系。
可信性问题中,高可信的程序,对不可信的数据进行处理,得到结果也是不可信的,也就意味着程序失去了可信性(reads down)。高可信的程序,只有对更加可信的数据进行处理时,程序的可信性才能够保持(reads up)。也就是说,(程序对数据处理的)结果的可信性是程序和数据可信性的最小取值。
令i-level(s)是Bell-LaPadula模型中主体s的一个**integrity compartment(完整性级别)**,则可信程序处理不可信数据造成可信度降低的“reads down” (a trustworthy process reading untrustworthy data) 现象必须被禁止;不会影响程序可信度的“reads up”是被允许的。(注意:强调的是主体/程序的完整性)
由此可得与Bell-LaPadula模型中定义1类似的定义:
定义1. The simple integrity property says that a subject s can read an object o if and only if i-level(o) dom i-level(s). 主体只能读完整性级别在其上的客体。(reads up: 对主体而言,read的客体的完整度是up的(较高的)。)
如果一个‘可信的程序’写数据到一个‘不可信的文件’,则文件的可信度可能会/也可能不会得到提升。但如果一个‘不可信的程序’写数据到一个‘可信的文件’,则文件的可信度会下降。一个主体/程序s的‘writes down’是允许的,‘writes up’是禁止的。
由此可得与Bell-LaPadula模型中定义2类似的定义:
定义2. The ∗-integrity property says that a subject s can write to an object o if and only if i-level(s) dom i-level(o). (writes down: 对主体而言,write的客体的完整度是down的(较低的))
假设一个程序date有一个子程序time,如果date的完整度dom(不低于)time的完整度,数据流从高完整度流向低完整度,根据定义2,是允许的;如果time的完整度dom date的完整度,则违背了定义2,需禁止。
由此可得与Bell-LaPadula模型中定义2类似的定义:
定义3. The execution integrity property says that a subject s can execute a subject s′ if and only if i-level(s′) dom i-level(s). (注意:这是主体和主体间的关系)
定理:如果信息可以从object o1 传输到 object on ,根据上述3个定义可知,i-level(o1) dom i-level(on) .
即:如果满足上述3个定义中的规则,则信息不会从低完整度的对象/客体流向高完整度的对象/客体,因此信息的完整度不会降低。
该模型可用于对程序进行分析,防止安全性降低。
首先,设置两个完整性级别**(UNTAINTED, Ø)** (this means the set of categories in the compartment is empty) and (TAINTED, Ø), where (UNTAINTED, Ø) dom (TAINTED, Ø),简写为UNTAINTED ≥ TAINTED。
所有的常量都分配一个UNTAINTED的标签,而变量的完整性标签则是根据程序的数据流分配的。例如:根据表达式的完整性为变量分配标签,如果表达式中的变量同时有UNTAINTED和TAINTED两种标签,则该表达式的标签是TAINTED(选最小的);如果变量是由不可信源 赋值的,则该变量的完整度标签为TAINTED。
如果系统调用或库函数调用中,需要传递实参到形参,则检查实参的完整度是否高于形参,如果实参完整度较低,则进行抛出异常、警告日志等处理。
例如,假设想要预防格式化字符串攻击(format string attack),该攻击利用C语言printf函数中的漏洞。printf函数的第一个参数是一个格式化字符串,该字符串决定其他的参数个数。利用该格式化字符串的内容,攻击者可以重写变量的值,并且对栈造成威胁,导致程序故障,达到攻击目的。格式化字符串攻击的关键步骤是为格式化字符串赋一个不期望的值。
部分有缺陷的代码为:
if (fgets(buf, sizeof(buf), stdin) != NULL) printf(buf);
该代码将输入的一串字符读到数组buf中,然后迅速将数组内容打印出来。如果输出字符串为"xyzzy%n",则栈中的某些元素会被重写为5。因此,printf函数的第一个参数的完整性级别为UNTAINTED。
当fgets函数运行时,变量buf的完整度标签为TAINTED,这是因为该参数的赋值输入是不可信的。当该函数调用printf函数时,由于fgets函数的第一个参数会传值给printf函数的第一个参数,需要对这两个参数的完整度进行对比,前者是TAINTED,后者为UNTAINTED,即对于printf函数来说,实参的完整度低于形参,TAINTED ≤ UNTAINTED,从而分析得到一个非法的数据流。
Clark-Wilson Model
Lipner认为,商用完整性模型有5个需求:
- 用户不能自己写程序直接对可信数据进行操作,而应该使用已被认证的程序去访问可信数据;
- 程序员只能在非生产系统(nonproduction systems)上进行开发和测试,如果需要,使用生产数据的非生产备份。
- 将程序从非生产系统迁移到生产系统时,需要特殊的处理过程。
- 3.的程序迁移处理过程必须是可控制的、可审核的。
- 管理员和系统审核员必须能够访问系统日志和系统的当前状态。
Biba模型只能通过例证说明如果合理分配完整性级别,可以满足1和5,其他3条关注的是管理流程上的完整性。总之,Biba模型不能满足这些需求。
Clark-Wilson Model被提出用于描述大部分商业公司内的管理流程。下面首先用一个例子给出相关术语和概念:
假设一个银行,D是每天的存款额,W是每天的取款额,I是当天开始时银行账户的剩余存款,F是每天结算后的银行存款,这些款额必须满足约束:I+D-W=F。
- 该约束被称为**‘完整性约束(Integrity Constraint)’**,如果银行的系统不能满足该约束,则银行的完整性就被破坏了;
- 如果系统满足完整性约束,则称系统处于‘一致的(Consistent)’的状态;
- 如果一次操作,将系统状态从一个一致的状态变迁到另一个一致的状态,则该操作被称为‘良构事务(well-formed transactions)’。如:一个客户从一个账户转账到另一个账户,该转账操作是良构事务,但对于该操作的子操作(子操作1. 从第一个账户取钱;子操作2. 存钱到第二个账户),单独来看,这些子操作不是良构事务,因为如果只有一个子操作完成了,则系统处于不一致状态。
- 用于验证所有完整性约束是否被满足的程序/流程称为**‘完整性验证程序/流程(integrity verification procedures, IVPs)** ‘;
- 必须满足完整性约束的数据称为受约束数据项(constrained data items, CDIs),当受约束数据项满足相应约束时,则称受约束数据项处于’有效Valid‘状态;
- 除受约束数据项以外的数据称为非受约束数据项(unconstrained data items, UDIs);
- 对于实现良构事务的函数来说,除了数据需满足完整性约束外,函数还需被证明是良构的且被正确实现,这样的函数被称为转变程序(transformation procedure, TP)。
Clark-Wilson Model有9条规则,其中5条与数据、转变程序的认证相关,另外4条描述了在模型的实现中如何进行认证。
认证规则1. 完整性验证程序必须保证系统处于一致的状态。//用于保证系统处于一致状态
**关系certified**用于关联一个转变程序TP和某个受约束数据项CDIs集合,其中TP将CDIs从一个有效状态转移到另一个有效状态(可以是同一个有效状态,也可是不同的有效状态)。
认证规则2. 转变程序TP将与其关联的受约束数据项CDIs从一个有效状态转移到另一个有效状态。
实施规则1. 系统必须维护certified关系,并保证对**某受约束数据项CDI**而言,只有与其通过certified关联的转变程序TP才能操作该CDI。//保证系统对certified关系进行追溯
通常公司里,能够使用TP的用户是严格受限的。例如,银行里,出纳员不能将几百万的资金共一个银行转移到另一个银行,只有银行主管能进行该操作。引出实施规则2:
实施规则2. 系统必须建立一个**用户和每个转变程序TP、受约束数据项集合CDIs**间的关系,用户通过相关的TP访问CDIs。如果某用户没有与某TP、CDIs相关联,那么该用户不能用该TP访问相关CDIs。
实施规则2表明,系统能够正确识别用户。因此,需要实施规则3:
实施规则3. 系统必须能够鉴别每个试图运行转变程序TP的**用户**。
系统对用户身份的鉴别形式取决于模型的具体实例,例如,银行主管可能用生物特征识别设备和密码对自己的身份进行验证,从而能够让自己能够将几百万的资金从一个银行转到另一个银行;而对于出纳员,其只能操作少量资金,因而可能只需用密码对其身份进行鉴别。
之前其他模型里谈过的职责划分在Clark-Wilson模型中同样有体现:
认证规则3. The allowed relation must meet the requirements imposed by separation of duty. 需求requirements的实现划分为若干职责duty,需求和职责间是allowed关系。
商业中完整性保证的一个基本原则是操作operations必须能够被审查,这需要记录足够多的信息,以便用于确定某事物做了什么,从而有认证规则4:
认证规则4. 所有转变程序TP的必须能够附加足够多的信息,以便能够在某**append-only CDI(只能进行数据追加的受约束数据项)上进行操作重现。append-only CDI**通常是日志。
目前为止,我们所讨论的TPs的所有输入都为CDIs,但这是不现实的。例如,在银行例子中,出纳员需要输入账户信息、存款和取款金额,但这些信息都不是CDIs,出纳员可能会输错某些信息。在转变程序TP根据这些信息进行处理前,这些输入信息必须被审查过,从而保证TP能够进行正确的处理。因此有认证规则5:
认证规则5. 对于输入中含有非受约束数据项UDI的**转变程序TP,要么执行一个良构事务(well-formed transactions)**,要么没有事务使用任何UDI的数据值。这样,TP要么拒绝UDI的输入,要么将输入转变为CDI。
该规则还能避免不好的TPs,如果输入可以导致TP因漏洞表现出非期望的行为,则该TP就通不过该规则的认证。
模型ongoing可能存在冲突。之前的规则里,用户可以认证一个能操作某CDI的TP,然后在这个CDI上运行该认证过的TP。但可能存在的问题是,某恶意用户,可能会认证通过能执行非良构事务的TP,进而导致系统违背完整性约束。诚然,职责划分能够解决这个问题,这正是实施规则4的内容:
实施规则4. 对某TP而言,只有该TP的认证者才能改变该TP上的certified关系。进而,TP的认证者、TP所关联的CDI的认证者,并不可能在相关的CDI上执行该TP。(即:认证和执行工作相剥离)
回顾Liner的5条需求,TPs对应Liner所说的程序,CDIs对应他所说的生产数据(production data)。为满足需求1,Clark-Wilson模型中的认证者(certifiers)必须是可信的,普通用户不能对TPs或CDIs进行认证。实施规则4和认证规则5实现了该需求。
需求2:不对开发程序/工具进行认证,因为这些开发程序不属于TPs,不能在生产数据上执行。
需求3中的特殊处理程序对应TPs。认证规则4描述了一个日志,TP将信息附加到日志里,从而能够被审查。此外,TP被定义为一个受约束的程序/过程,并且实施规则4和认证规则5控制着TP的运行。
需求4:在安装之前,程序是UDI,安装完成后,程序就变为CUI或TP了。并且Clark-Wilson模型有日志用于捕获TP所有操作的所有相关信息,该日志可以被管理者或审查员访问。
需求5:管理员和审查员能够运行完整性验证程序/流程IVP检查系统的完整性,从而获取系统的状态。
总之,Clark-Wilson模型满足商业完整性模型的所有需求。
Clark-Wilson模型重要性体现在两方面:1)该模型符合大部分商业公司的工作方式,包括职责划分;2)将认证和实施进行区分。但该模型的实例不能自我认证,但所有的模型都这样,好歹该模型考虑了认证方面的工作。
Chinese Wall Model/Brewer-Nash Model
该模型是为了防止利益冲突。该模型将同一个公司的客体objects划分为不同的company data sets,并且将company data sets划分为不同conflict-of-interest classes。如果两个公司(用他们的company data sets表示)在同一个conflict-of-interest class里,则他们之间有利益冲突。该模型的规则保证在美国conflict-of-interest class中的company data sets只能被一个主体subject读取。
规则:
定义1. The CW-simple security property says that a subject s can read an object
o if and only if either:
- s has not read any other object in *o’*s conflict-of-interest class; or
- The only objects in o’s conflict-of-interest class that s has read are all in o’s
company data set.
例如:所有的银行都在同一个conflict-of-interest class中,假如小吕是ABC银行的客户经理,并且最近她想跳槽到ICBC银行,如果她去了ICBC,那么她就有了访问ICBC信息的权限,特别是ICBC的company data set中的客体(通常是涉密文件信息),这样就意味着小吕可以读取同一个conflict-of-interest class中两个company data sets中的客体,这是定义1的规则所禁止的。模型中的临时数据/元素很重要,就算小吕跳槽到ICBC了,根据***CW-simple security property*** 的条件2,由于她之前读过ABC的客体,她不能/不适合到ICBC工作。这样的话比较在理,如果小吕再去ICBC工作的话,可能无意间损坏ABC的利益。
定义1的CW-simple security property暗含着s可以读取任何脱密处理后的客体。如果s没有读过脱密信息,则条件1满足;如果s读过脱密信息,因为所有的脱密信息都在同一个company data set中,所以条件2也满足。
写操作会引起另一个问题。例如:小白和小黄都是人民银行的员工,小白常驻ABC负责该银行的相关业务,小黄常驻ICBC负责其相关业务。人行和ABC、ICBC这些银行不在同一个conflict-of-interest class中,那么小白和小黄就没有利益冲突。但ABC的涉密信息可以通过小白泄露给小黄,再到ICBC,反之亦然,这样就有人的利益发生冲突了。小白将从ABC读取的涉密信息写成文件放到了人行的company data set,小黄从人行读取了该文件,这样ICBC的小黄就获取了ABC的涉密信息,产生了利益冲突。这种情况应该避免,从而有了下述规则:
定义2. The CW-∗-property says that a subject s can write to an object o if and only if both of the following conditions are met:
- The CW-simple security property allows s to read o; and
- All unsanitized objects(涉密信息) that s can read are in the same company data set as o.
写的话,首先主体得有读客体的权限;其次,主体能写的客体必须和他能读的客体在同一个company data set中。这样,小白就不能把涉密信息写成文件放到人行的company data set中,就算想放,也只能放到ABC的company data set中。
对于非涉密信息,假设小兰也是人行的,她有读取人行非涉密信息的权限,当她想写文件到人行的company data set中时,根据定义1,由于她能读,所以她也能写。对于涉密信息,小兰的读写也都是在同一个company data set中的,这没什么问题。