《现代操作系统》-读书笔记-第九章-安全

《现代操作系统》-读书笔记-第九章-安全

许多公司持有一些有价值的并加以严密保护的信息。这些信息可以是技术上的(如新款芯片或软件的设计方案)、商业上的(如针对竞争对手的研究报告或营销计划)、财务方面的(如股票分红预案)、法律上的(如潜在并购方案的法律文本)以及其他可能有价值的信息。这些信息大部分存储在电脑上。很多人将他们的纳税申报单和信用卡号码等财务信息保存在个人电脑上。情书也越来越多地以电子信件的方式出现。电脑硬盘中装满了照片、视频、电影等重要数据。

随着越来越多的信息存放在计算机系统中,确保信息安全就显得尤为重要。对所有的操作系统而言,保护此类信息不被未经许可地滥用是应考虑的主要问题。然而,随着计算机系统的广泛使用(和随之而来的系统缺陷),保证信息安全也变得越来越困难。在本章中,我们将考察操作系统上的计算机安全特性。

环境安全

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

威胁

入侵者

我们中的大多数人非常善良并且守法,那么为什么要担心安全问题呢?因为,我们周围还有少数人并不友好,他们总是想惹麻烦(可能为了自己的商业利益)。从安全性的角度来说,那些喜欢闯入与自己毫不相干区域的人叫作攻击者(attacker)、入侵者(intruder)或敌人(adversary)。在几十年前,破解计算机系统是为了向朋友展示你有多聪明,但是现在,这不再是破解一个系统唯一或者最主要的原因。有很多不同类型的攻击者,他们有着不同的动机:盗窃,政治或社团目的,故意破坏,恐怖主义,网络战,间谍活动,垃圾邮件,敲诈勒索,欺诈。当然,偶尔攻击者仅仅是为了炫耀,或揭露一个组织的安全性有多差。

攻击者的范围从技术不是很精湛的黑客爱好者(也称为脚本爱好者),到极其精通技术的黑客。他们可能专门为了罪犯、政府(如警察、军队或者情报部门)或者安全公司工作,或者只是在业余时间开展“黑客”行为的业余爱好者。应该明确的是,试图阻止敌对的外国政府窃取军事机密与阻止学生往系统中插人一个有趣的信息是完全不同的。安全与保护所需的工作量显然取决于谁是敌人。

操作系统安全

可信系统

实际上,确实有些组织认为,与非常漂亮的新功能相比,好的安全性更为重要。军方组织就是一个重要的例子。在接下来的几节中,我们将研究相关的一些问题,不过这些问题不是几句话便能说清楚的。要构建一个安全的系统,需要在操作系统的核心中实现安全模型,且该模型要非常简单,从而设计人员确实能够理解模型的内涵,并且顶住所有压力,避免偏离安全模型的要求去添加新的功能特性。

可信计算基

在安全领域中,人们通常讨论可信系统而不是安全系统。这些系统在形式上申明了安全要求并满足了这些安全要求。每一个可信系统的核心是最小的可信计算基(Trusted Computing Base, TCB),其中包含了实施所有安全规则所必需的硬件和软件。如果这些可信计算基根据系统规约工作,那么,无论发生了什么错误,系统安全性都不会受到威胁。

保护机制

保护域

对象如何分配给域由需求来确定。一个最基本的原则就是最低权限原则(Principle of Least Authority, POLA),一般而言,当每个域都拥有最少数量的对象和满足其完成工作所需的最低权限时,安全性将达到最好。

访问控制列表

第一种方法包括一个关联于每个对象的(有序)列表,列表里包含了所有可访问对象的域以及这些域如何访问这些对象的方法。这一列表叫作访问控制列表(Access Control List, ACL),如图 9-6 所示。这里我们看到了三个进程,每一个都属于不同的域。A、B 和 C 以及三个文件 F1、F2 和 F3。

权能字

另一种切分图 9-5 矩阵的方法是按行存储。在使用这种方法的时候,与每个进程关联的是可访问的对象列表,以及每个对象上可执行操作的指示。这一栏叫作权能字列表(capability list 或 C-list),而且每个单独的项目叫作权能字(Dennis 和 Van Horn, 1966; Fabry, 1974)。三个进程及其权能字列表如图 9-8 所示。

安全系统的形式化模型

多级安全

  1. Bell-LaPadula 模型
  2. Biba 模型

隐蔽信道

所有的关于形式模型和可证明的安全系统听上去都十分有效,但是它们能否真正工作?简单说来是不可能的。甚至在提供了合适安全模型并可以证明实现方法完全正确的系统里,仍然有可能发生安全泄露。本节将讨论已经严格证明在数学上泄露是不可能的系统中,信息是如何泄露的。这些观点要归功于Iampson (1973)。

密码学原理

私钥加密技术

许多类似的密钥系统都有这样一个特点,那就是给定了加密密钥就能够较为容易地找到解密密钥,反之亦然。这样的系统采用了私钥加密技术或对称密钥加密技术。虽然单字母替换方式没有使用价值,但是如果密钥有足够的长度,对称密钥机制还是相对比较安全的。对严格的安全系统来说,最少需要使用 256 位密钥,因为它的破译空间为 2256 <1.2 x 1077。短密钥只能够抵挡业余爱好者,对政府部门来说却是不安全的。

公钥加密技术

由于对信息进行加密和解密的运算量是可控制的,所以私钥加密体系十分有用。但是它也有一个缺陷:发送者与接受者必须同时拥有密钥。他们甚至必须有物理上的接触,才能传递密钥。为了解决这个矛盾,人们引人了公钥加密技术(1976 年由 Diffie 和 Hellman 提出)。这一体系的特点是加密密钥和解密密钥是不同的,并且当给出了一个筛选过的加密密钥后不可能推出对应的解密密钥。在这种特性下,加密密钥可被公开而只有解密密钥处于秘密状态。

单向函数

在接下来的许多情况下,我们将看到有些函数 f,其特性是给定 f 和参数 x,很容易计算出 y =f (x)。但是给定 f (x),要找到相应的 x 却不可行。这种函数采用了十分复杂的方法把数字打乱。具体做法可以首先将 y 初始化为 x。然后可以有一个循环,进行多次迭代,只要在 x 中有 1 位就继续迭代,随着每次迭代,y 中的各位的排列以与迭代相关的方式进行,每次迭代时添加不同的常数,最终生成了彻底打乱位的数字排列。这样的函数叫作加密散列函数

数字签名

可信平台模块

加密算法都需要密钥(key)。如果密钥泄露了,所有基于该密钥的信息也等同于泄露了,可见选择一种安全的方法存储密钥是必要的。接下来的问题是:如何在不安全的系统中安全地保存密钥呢?

有一种方法在工业上已经被采用,该方法需要用到一种叫作可信平台模块(Trusted Platform Modules, TPM)的芯片。TPM 是种加密处理器(cryptoprocessor),使用内部的非易失性存储介质来保存密钥。该芯片用硬件实现数据的加密/解密操作,其效果与在内存中对明文块进行加密或对密文块 进行解密的效果相同,TPM 同时还可以验证数字签名。由于其所有的操作都是通过硬件实现,因此速度比用软件实现快许多,也更可能被广泛地应用。一些计算机已经安装了 TPM 芯片,预期更多的计算机会在未来安装。

认证

每一个安全的计算机系统定会要求所有的用户在登录的时候进行身份认证。如果操作系统无法确定当前使用该系统的用户的身份,则系统无法决定哪些文件和资源是该用户可以访问的。表面上看认证似乎是一个微不足道的话题,但它远比大多数人想象的要复杂。

决定如何认证是十分重要的,接下来的一步是找到一种好方法来实现它。当人们试图登录系统时,大多数用户登录的方法基于下列三个方面考虑:

1) 用户已知的信息。

2) 用户已有的信息。

3) 用户是谁。

使用物理识别的认知方式

用户认证的第二种方式是验证一些用户所拥有的实际物体而不是用户所知道的信息。如金属钥匙就被使用了好几个世纪。现在,人们经常使用磁卡,并把它放入与终端或计算机相连的读卡器中。而且一般情况下,用户不仅要插卡,还要输入密码以保护别人冒用遗失或偷来的磁卡。银行的 ATM 机(自动取款机)就采用这种方法让客户使用磁卡和密码码(现在大多数国家用 4 位的 PIN 代码,这主要是为了减少 ATM 机安装计算机键盘的费用)通过远程终端(ATM 机)登录到银行的主机上。

使用生物识别的认证方式

第三种方法是对用户的某些物理特征进行验证,并且这些特征很难伪造。这种方法叫作生物识别(Pankanti 等人,2000)。如接通在电脑上的指纹或声音识别器可以对用户身份进行校验。

一个典型的生物识别系统由两部分组成:注册部分和识别部分。在注册部分中,用户的特征被数字化储存,并把最重要的识别信息抽取后存放在用户记录中。存放方式可以是中心数据库(如用于远程计算机登录的数据库)或用户随身携带的智能卡并在识别时插入远程读卡器(如 ATM 机)。

另一个部分是识别部分。在使用时,首先由用户输人登录名,然后系统进行识别。如果识别到的信息与注册时的样本信息相同,则允许登录,否则就拒绝登录。这时仍然需要使用登录名,因为仅仅根据检测到的识别信息来判断是不严格的,只有识别部分的信息会增加对识别信息的排序和检索难度。也许某两个人会具有相同的生物特征,所以要求生物特征还要匹配特定用户身份的安全性比只要求匹配一般用户的生物特征要强得多。

软件漏洞

  • 缓冲区溢出攻击

  • 格式化字符串攻击

  • 悬垂指针

  • 空指针间接引用攻击

  • 整数溢出攻击

  • 命令注入攻击

  • 检查时间/使用时间攻击

内部攻击

逻辑炸弹

后门陷阱

登陆欺骗

恶意软件

特洛伊木马

病毒

蠕虫

间谍软件

rootkit

防御

防火墙

反病毒和抑制防病毒技术

代码签名

囚禁

基于模型的入侵检测

封装移动代码

Java安全性

有关安全的研究

小结

计算机中经常会包含有价值的机密数据,包括纳税申请单、信用卡账号、商业计划、交易秘密等。这些计算机的主人通常非常渴望保证这些数据是私人所有,不会被窜改,这就迅速地导致了我们要求操作系统一定要有好的安全性。一种保证信息机密的方法是把它加密并妥善地保管密钥。有时侯提供数字信息的验证是很重要的,在这种情况下,可以使用加密散列表、数字签名以及被一个可信的证书验证机构所签名的证书。

操作系统安全的基础构件是对系统资源的访问控制。访问权限可以被看作一个大型矩阵,其中行代表主体,列代表客体。每一个单元格描述了主体对客体的访问权限。由于矩阵非常稀疏,因此可以按行存储,形成权限列表来描述某一主体能够对哪些客体进行何种操作;也可以按列存储,形成访问控制列表来描述某一客体能够被哪些主体所操作。利用形式化建模技术,系统内的信息流可以被建模并限制。但是,在某些情况下,信息仍然可能通过隐蔽信道外泄,例如调节 CPU 的使用率等。

一种保持信息私密性的手段是对信息进行加密并小心管理密钥。加密机制可以分为私钥加密和公钥加密。私钥加密方法要求通信参与者利用带外机制提前交换私钥。公钥加密则无须如此,但是在实际的使用中效率较低。某些情况下需要对数字信息的真实性进行验证,由于加密机制会使得验证过程繁琐复杂,因此可以使用可信的第三方所提供的数字签名和许可证明。

在任何一个安全的系统一定要认证用户。这可以通过用户知道的、用户拥有的,或者用户的身份(生物测定)来完成。使用双因素的身份认证,比如虹膜扫描和密码,可以加强安全性。

代码中有很多 bug 可以被利用来控制程序和系统。这些包括缓冲区溢出、格式串攻击、返回 libc 攻击、整数溢出攻击、代码注入攻击和特权扩大攻击。

Internet 上遍布恶意软件,有特洛伊木马、病毒、蠕虫、间谍软件和 lookit。毎一个都对数据机密性和一致性产生着威胁。更糟糕的是,恶意软件攻击可能会控制一台机器,并把这台机器变成一台僵尸机器用来发送垃圾邮件或者发起其他的攻击。许多互联网上的攻击都是通过一台僵尸主控机控制一个僵尸军队来完成的。

幸运的是,系统有很多种方法来保护自己。最好的策略就是全面防御,使用多种技术一起防御。这些技术有防火墙、病毒扫描、代码签名、囚禁、入侵检测,以及封装移动代码。

说点什么

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
提醒