简单谈谈安全模型设计

说到安全,往往要给出一个模型,人们通过研究这个抽象的模型来把握安全要素,这里首先要确定一下安全性需要考虑的几个要素,一个就是保密性,另一个就是完整性,这是两个最重要的安全特性,保密性一般应用于军事领域,而完整性一般用于商业领域,这只是一般情况下,也就是说,对于军事机密文件,宁可毁了也不能泄露出去,而对于商业信函,宁可让人看到也不能被人篡改了,被人看到起码还有一个监督者的作用。

我们知道,单向的一般就是安全的,姑且不说这种安全性的安全级别,最起码,它要么起到了保密的作用,要么保全了完整性,为什么呢?因为单向性意味着信息进入一个地方后就不允许再出来了,而危险往往在于从家走出去,回家一般都会比出去安全,要么就是出家门就不要再进入,起码不会连累家人。对于机密性要求,将信息推入一个黑匣子就可以了,因为单向性特性,推入的信息不会再从这个黑匣子原路出来,因此就起到了保密的作用,对于完整性要求,就是将信息从黑匣子拉出来,因为没有人会将信息从拉出来的方向推入,那么可以保证不会有人篡改信息,因而信息是完整的。

对于机密性要求,BLP模型一直都是很理想的模型,在BLP中,信息的操作者分为了若干等级,信息单向地只能从低等级流向高等级,促使信息流动的动作有两个,一个是读,一个是写,对于读,信息从被读的一方流向读者,对于写,信息从写者流向被写的一方,在BLP模型中,通过两个约束保证了保密性,一个是禁止上读,一个是禁止下写,另外一个理解就是允许上写允许下读,我们看到信息是推入高级别的这个黑匣子的,避免了任何低级别的人偷看到信息,我们看一下这有什么意义。设想有一个模型,允许下读,又允许下写,一个高级别的操作者书写了一份密文,然后将内容拷贝了一份,作为低级别的密文回写,这样的话,低级别的响应级别的操作者就会偷看到本来高级别的密文,而这是不希望发生的,这其中的问题就在于下读和下写产生了双向信息流。这个BLP禁止了由于操作者本身除了问题导致信息泄露的可能性。其实这个模型仅仅是理想模型,对于信息系统是有用的,对于人则没有意义,试想人是有记忆的,规则能制止人的行为可是制止不了人的思维。允许上写并没有什么问题,就是说任何级别的操作实体都可以签署密文,只要你签署了,那这个密文就是保密的,你就不能再看了。禁止上读避免了低级别用户获取敏感信息,而禁止下写则避免了一旦高级别用户本身出了问题造成信息的泄露。

对于完整性需求,正好和BLP模型相反,叫做BIBA模型,也就是禁止下读,禁止上写模型,另一种理解就是允许下写,允许上读,数据是从高级别的黑匣子拉到低级别的用户的,信息流的流动方向和BLP模型的正好相反,因为禁止了上写,所以避免了信息被低级别用户更改,如果允许了下读,那么高级别用户如果出了问题,那么它完全可以读入一个低级别的信息,然后更改后下写到低级别的用户,因而完整性得不到保证。这个模型也给过滤模型留下了空间,任何合法的钩子都是可以安插在黑匣子和最终的低级别用户之间实现拦截,注意这种拦截是严格意义上的有意识拦截,而不是非法的欺骗性拦截和篡改式拦截。

总之,信息是单向流动是根本,交互总会带来危险,另外,单向的信息流动即使出了问题对人造成的影响也是蒙在鼓里的影响,禁止下读的模型中,你无法知道低级别的任何信息,但是你能写入低级别的用户任何信息,你管好自己好好写就是了,你的心不会太乱,这种模型下,你不必担心信息泄露,而信息的完整性的责任完全在你;对于禁止上读的模型,你就只管往高级别写东西吧,你的心也不会很乱。这两种模型下,你必须彻底消除自己的侥幸心理。

在安全模型中,中国墙模型也很著名,它是以责任共同体来界定访问控制的,原则上很安全,但是从设计上来讲,我感觉真的没有BLP和BIBA模型好。我们现在都可以看到很多安全访问控制的实例,比如Intel的特权环,比如Unix的能力模型和访问控制矩阵,比如Windows NT的基于角色的访问控制,所有这些都可以用单向信息流和访问控制列表来表述。总之记住一点,计算机永远比人乖,不过有时候,人杀人的时候会流泪,但是计算机杀人的时候会很干脆。

你可能感兴趣的:(windows,unix,网络技术)