计算机系统安全的历史

现代意义的计算机诞生于第二次世界大战。那时的计算机真的就是一个巨大的计算机器,或者可以不太恭敬地叫它“超级算盘”。你会担心一个“超级算盘”的安全问题吗?当然不会。

计算机系统安全的技术有哪些(计算机系统安全简史)(1)

世界上第一台通用计算机(图片源自网络)

后来,技术的进步和普及让计算机不仅仅是“计算的机器”,而且是“信息处理的机器”。那么,怎样保证计算机中的信息的私密性和完整性呢?走在信息革命前面的美国首先遇到这个问题,并试图解决它。在1970年前后,先后出现了两个安全模型:BLP模型BIBA模型

计算机系统安全的技术有哪些(计算机系统安全简史)(2)

前者参考美国军方的保密原则,着力解决私密性;后者则着力解决完整性。BLP模型可简化为两句话:禁止上读,禁止下写。数据被分级,下级部门不能读上级部门的数据,上级部门也不能把数据传递给下级部门。如此,某部门就只能读到本部门或级别低于本部门的数据,数据的私密性得到了保证。BIBA模型也可简化为两句话:禁止上写,禁止下读。数据也是分级的。下级不能写上级的数据,上级不能读下级的数据。BIBA模型是服务于完整性的。完整性的英文是Integrity,朗文字典中的英文释义有两个:

1、strength and firmness of character or principle;honesty;trustworthiness;2、a state ofbeing whole and undivided; completeness。

第一个意思更接近于汉语的“人品”,第二个意思是汉语的“完整性”。BIBA模型反映的是integrity的第一个意思。怎么讲呢?禁止上写:“低贱”的人不能玷污“高贵”的人的数据;禁止下读:“高贵”的人也不要去读“低贱”的东西,降低自己的品位。这有点像印度古老的种姓制度。BLP模型和BIBA模型本身都经过了数学证明,都是很严谨的,可惜的是它们的适应面有些窄,无法覆盖计算机系统信息处理的全部。

为了更有效地利用计算机,计算机操作系统步入分时多用户时代。许多人登录到一台主机(mainframe),张三是个程序员,李四是个文档管理员,王五是系统管理员。随之出现了基于角色的访问控制(Role-based Acess Control,RBAC),让用户分属于不同的角色,再基于角色赋予访问权限。当PC时代来临,计算机设备专属于某个人,系统中的所谓用户也背离了原有的含义。随便打开Linux系统上的/etc/passwd文件,看看里面还有几个是真正的用户?因此,在PC中使用基于角色的访问控制就有些力不从心了。接下来诞生了另一个访问控制模型—类型增强(TypeEnforcement,TE)。模型中控制的对象不再是人,或角色,而是进程。进程属于不同的类型,不同类型有不同的访问权限。

江湖中不仅有少林,还有武当。计算机系统安全的另一路人马在“可信”领域辛勤地耕耘着。他们希望计算机只做人预先定义好的工作,不会有意或无意地去做主人不希望的事情。如果做到了这一点,他们就认为计算机是“可信”的了。可信理论的背后是将人类社会的信任模型构建到计算机的世界中,甲信任乙,乙信任丙,于是甲信任丙;计算机固件信任加载器(boot loader),加载器信任操作系统,操作系统信任应用,于是应用是可信的。信任的度量是用完整性校验值和数字签名。这的确可以保证应用是由某个“正直”的人或公司开发的,但不能保证应用没有漏洞,不会被恶意利用。

02

计算机系统安全的现状

计算机系统安全的可悲之处在于,任何一个被用户广泛接受的操作系统在设计之初都没有把安全作为设计系统的目标,包括Unix。这一点可以从Unix设计者之一Dennis Ritchie的论文中看到。计算机系统安全的第二个可悲之处是,安全不仅仅是一个技术问题,它和管理维护紧密联系。在安全研究人员眼中,苹果的iOS并不比谷歌的Android安全,但是后者暴露的安全问题却多得多。计算机系统安全的第三个可悲之处在于,安全性和易用性总是矛盾的。没有哪个厂商会为了安全而牺牲市场份额,而用户在免费的诱惑下,也更愿意牺牲自己的隐私。

计算机在过去的几十年里迅猛发展,但是计算机安全并没有跟上时代的脚步。四十多年前的BLP模型是成功的,它达成了预定的目标—将美国军方的安全原则移植到信息处理系统中,但是在随后的日子里,没有一个好的安全模型能覆盖计算机应用的方方面面。这换来BLP的设计者之一Bell的一声叹息。

病毒与反病毒,漏洞与漏洞补丁,头痛医头,脚痛医脚,乐此不疲!

03

Linux内核安全概貌

内核对于系统的重要性是不言而喻的。在几种主流计算机内核中,Linux内核安全的开发开始得还是比较早的,约始于20世纪90年代中后期。经过近二十年的开发,Linux内核中安全相关的模块还是很全面的,有用于强制访问控制的LSM(Linux Security Module),有用于完整性保护的IMA(Integrity Measurement Architecture)和EVM(Extended Verification Module),有用于加密的密钥管理模块和加密算法库,还有日志和审计模块,以及一些零碎的安全增强特性。

说起来安全功能是很多的。但是问题也有,其一是应用问题,这些安全功能还是没有被广泛地应用起来。最典型的是Linux内核中基于能力的特权机制,时至今日,广大应用程序的开发者不仅没用它,甚至根本不知道它的存在!其二是整合问题。攻与防的区别在于,攻击只求一点突破即可,防守则要保证整条防线。内核各个安全模块散布于内核多个子系统之中,如何整合各个安全子模块来整体加固系统的安全是一个不小的挑战。

本文内容节选自《Linux内核安全模块深入剖析》

计算机系统安全的技术有哪些(计算机系统安全简史)(3)

本书可能是国内外较早系统、全面地介绍Linux内核安全的书。全书采用源码剖析与用户态工具使用相结合的方式,对Linux内核安全模块进行了讲解,既避免了冗长的代码罗列,也消除了读者的“隔靴搔痒”之感。在此,向计算机安全人员强烈推荐。

,