第9章 安全

许多公司持有一些有价值的并加以密切保护的信息。这些信息可以是技术上的(如新款芯片或软件的设计方案)、商业上的(如针对竞争对手的研究报告或营销计划)、财务方面的(如股票分红预案)、法律上的(如潜在并购方案的法律文本)以及其他可能有价值的信息。公司通常在存放这些信息的大楼入口处安排佩带统一徽章的警卫,由他们来检查进入大楼的人群。并且,办公室和文件柜通常会上锁以确保只有经过授权的人才能接触到这类信息。

家用计算机也越来越多地开始保存重要的数据。很多人将他们的纳税申报单和信用卡号码等财务信息保存在计算机上。情书也越来越多地以电子信件的方式出现。目前计算机硬盘已经装满了重要的照片、视频以及电影。

随着越来越多的信息存放在计算机系统中,确保这些信息的安全就变得越来越重要。对所有的操作系统而言,保护此类信息不被未经许可地滥用是主要考虑的问题。然而,随着计算机系统的广泛使用(和随之而来的系统缺陷),保证信息安全也变得越来越难。在下面的小节里,我们将讨论有关安全与防护的若干话题,其中一些内容与我们保护现实生活中的纸质文件比较相似,而另一些则是计算机系统所独有的。在这一章里,我们将考察安装了操作系统之后的计算机安全特性。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

有关操作系统安全的话题在过去的二十年里产生了很大的变化。在20世纪90年代早期之前,少数家庭才拥有计算机,几乎所有的计算都是在公司、大学和其他一些拥有多用户计算机(从大型机到微型计算机)的组织中完成的。这些机器几乎都是相互隔离的,没有任何一台被连接到网络中。在这样的环境下,保证安全性所要做的全部工作就集中在了如何保证每个用户只能看到自己的文件。如果Tracy和Marcia是同一台计算机的两个注册用户,那么“安全性”就是保证他们谁都不能读取或修改对方的文件,除非这个文件被设为共享权限。复杂的模型和机制被开发出来,以保证没有哪个用户可以获取非法权限。

有时这种安全模型和机制涉及一类用户,而非单个用户。例如,在一台军用计算机中,任何数据都必须被标记为“绝密”、“机密”、“秘密”或“公开”,而且下士不能允许查看将军的目录,不论这个下士是谁,无论他想要查看的将军是谁,这种越权访问都必须被禁止。在过去的几十年中,这样的问题被反复地研究、报道和解决。

当时一个潜在的假设是,一旦选定了一个模型并据此实现了安全系统,那么实现该系统的软件也是正确的,会完全执行选定的安全策略。通常情况下,模型和软件都非常简单,因此该假设常常是成立的。即如果Tracy理论上不被允许查看Marcia的某个文件,那么她的确无法查看。

随着个人计算机和互联网的普及,以及公用大型机和小型机的消失,情况发生了变化(尽管不是翻天覆地的变化,在局域网的公共服务器与公用小型计算机很相似)。至少对于家庭用户来说,他们受到非法用户入侵并被窃取信息的威胁变得不存在了,因为别人不能使用他们的计算机。

不幸的是,就在这些威胁消失的同时,另一种威胁悄然而至(威胁守恒的法则?):来自外部的攻击。病毒(Virus)、蠕虫(Worm)和其他恶意代码通过互联网开始在计算机中蔓延,并肆无忌惮地进行破坏。它们的帮凶是软件漏洞的爆炸性增长,这些大型软件已经开始取代以前好用的小软件。当下的操作系统包括五百万行以上的内核代码和100MB级的应用程序来规定系统的应用准则,使得系统中存在大量可以被恶意代码利用的漏洞。因此我们现在从形式上证明是安全的系统却可能很容易被侵入,因为代码中的漏洞可能允许恶意软件做一些原则上被禁止的事情。

基于以上问题,本章将分为两部分进行讨论。9.1节从一些细节上分析系统威胁,看看哪些是我们想要保护的。9.2节介绍了安全领域中基本但却重要的工具:现代密码学。9.3节介绍了关于安全的形式化模型,并论述如何在用户之间进行安全的访问和保护,这些用户既有保密的数据,也有与其他用户共享的数据。

接下来的五节将讨论实际存在的安全问题,对实际的恶意代码防护和计算机安全研究前沿进行讨论,最后是一个简短的总结。

值得注意的是,尽管本书是关于操作系统的,然而操作系统安全与网络安全之间却有着不可分离的联系,无法将它们分开讨论。例如,病毒通过网络侵入到计算机中,破坏操作系统。总而言之,我们趋于做足工作,即包含很多与主题紧密相关却并不属于操作系统研究领域的内容。

9.1 环境安全

我们从几个术语的定义来开始本章的学习。有些人不加区分地使用“安全”(security)和“防护”(protection)两个术语。然而,当我们讨论基本问题时有必要去区分“安全”与“防护”的含义。这些基本问题包括确保文件不被未经授权的人读取或篡改。这些问题一方面包括涉及技术、管理、法律和政治方面的问题,另一方面也包括使用特定的操作系统机制来提供安全保障的问题。为了避免混淆,我们用术语“安全”来表示所有的基本问题,用术语“防护机制”来表示用特定的操作系统机制确保计算机信息安全。但是两个术语之间的界限没有定义。接下来我们看一看安全问题的特点是什么,稍后我们将研究防护机制和安全模型以帮助获取安全屏障。

安全包含许多方面的内容,其中比较主要的三个方面是威胁的实质、入侵者的本性和数据的意外遗失。我们将分别加以研究。

9.1.1 威胁

从安全性角度来讲,计算机系统有四个主要目标,同时也面临着三个主要威胁,如图9-1所示。第一个目标是数据保密(data confidentiality),指将机密的数据置于保密状态。更确切地说,如果数据所有者决定这些数据仅用于特定的人而不是其他人,那么系统就应该保证数据绝对不会发布给未经授权的人。数据所有者至少应该有能力指定谁可以阅读哪些信息,而系统则对用户的选择进行强制执行,这种执行的粒度应该精确到文件。

阅读 ‧ 电子书库
图 9-1 安全性的目标和威胁

第二个目标数据完整性(data integrity)是指未经授权的用户没有得到许可就擅自改动数据。这里所说的改动不仅是指改变数据的值,而且还包括删除数据以及添加错误的数据等情况。如果系统在数据所有者决定改动数据之前不能保证其原封未动,那么这样的安全系统就毫无价值可言。

第三个目标系统可用性(system availability)是指没有人可以扰乱系统使之瘫痪。导致系统拒绝服务的攻击十分普遍。比如,如果有一台计算机作为Internet服务器,那么不断地发送请求会使该服务器瘫痪,因为单是检查和丢弃进来的请求就吞噬掉所有的CPU资源。在这样的情况下,若系统处理一个阅读网页的请求需要100µs,那么任何人每秒发送10 000个这样的请求就会导致系统死机。许多合理的系统模型和技术能够保证数据的机密性和完整性,但是避免拒绝服务却相当困难。

最后,近年来操作系统出现了新的威胁,计算机合法用户以外的人可以(通过病毒和其他手段)获取一些家用计算机的控制权,并将这些计算机变成僵尸(zombie),入侵者立即成为这些计算机的新主人。通常情况下,这些僵尸用来发送垃圾邮件,从而使得垃圾邮件的真正来源难以追踪到。

从某种意义上讲,还存在着另一种威胁,这种威胁与其说是针对个人用户的威胁,不如说是对社会的威胁。有些人对某些国家或种族不满,或对世界感到愤怒,妄图摧毁尽可能多的机构,而不在意破坏性和受害者。这些人常常觉得攻击“敌人”的计算机是一件令人愉悦的事情,然而并不在意“攻击”本身。

安全问题的另一个方面是隐私(privacy):即保证私人的信息不被滥用。隐私会导致许多法律和道德问题。政府是否应该为每个人编制档案来追查罪犯?如盗窃犯或逃税犯。警察是否可以为了制止有组织犯罪而调查任何人或任何事件?当这些特权与个人权益发生冲突时会怎么样?所有这些话题绝对都是十分重要的,但是它们却超出了本书的范围。