1、1美Mark Stamp著Information Security:Principles and Practice,2nd Edition张 戈译第13章 操作系统和安全213.1 引言本章主要内容 现代操作系统都会具有的安全相关的基本功能 可信操作系统 下一代安全基313.2 操作系统的安全功能操作系统必须处置潜在的安全问题,无论这些问题是源于偶发事件,还是作为某个恶意攻击的一部分出现的。现代操作系统的设计都是面向多用户环境以及多任务操作模式。因此,即使在最不济的情况下,操作系统也必须处理隔离控制、内存保护以及访问控制等。下面就这三个主题中的每一个进行简略讨论。n 隔离控制n 内存保护n 访
2、问控制413.2.1 隔离控制对于现代操作系统,最为基础的安全性议题就是实现隔离的问题。也就是说,操作系统必须保持用户和进程之间彼此相互隔离。几种不同的隔离方式:n 物理隔离用户被限制在相互独立的设备中。这种方式提供了一种很强的隔离形式,但是也常常显得不切实际。n 时间隔离进程就是根据时间进行隔离的。这种隔离消除了许多由于并发而衍生的问题,并且简化了操作系统的管理任务。不过,这会带来一些性能方面的损失。n 逻辑隔离举个例子,每一个进程可能都会被分配属于自己的“沙箱”。进程在沙箱之内可以自由地做几乎任何事情,但是在沙箱之外,可能几乎什么都做不了。n 加密隔离加密技术可以用于使信息变得对外界而言难
3、以理解。513.2.2 内存保护操作系统必须解决的另一个基本问题就是内存保护,这包括对操作系统自身使用的内存空间的保护,也包括对用户进程内存空间的保护。边界(fence),或者叫做界地址(fence address),就是用于内存保护的一种选择。它可以使动态的,也可以是静态的。基地址寄存器(base registers)和范围寄存器(bounds registers):这些寄存器中包含了某个特定用户(或进程)空间的低位地址和高位地址的界限。内存保护标记(tagging)则为每一个独立的地址指定保护方式。通过利用地址空间的标记段(tagging sections)来替换每个独立地址的保护标记,可
4、以降低这样的性能负荷。最常用的内存保护方法是分段(segmentation)和分页(paging)。6分段是将内存分割成不同的逻辑单元,然后,再将适当的访问控制策略施加到各个段上。分段的优点n 任何段都可以被置于任意的内存位置只要内存空间足够大,可以容纳得下即可。操作系统利用值对来实现对段的跟踪。n 段可以被移动到内存中的不同位置,也可以方便地移进和移出内存。缺点:n 段的尺寸是变化的。7分页与分段类似,除了所有的段都是固定长度之外。对于分页,使用形如的值对来访问特定的页。相对于分段,分页的优势包括避免了内存碎片、改进了性能以及再也不用担心变长尺寸带来的困扰。缺点则是,一般来说对于页而言并没有
5、逻辑上的统一性,这就使得要决定将适当的访问控制应用到给定的页上时,难度会更大。813.2.3 访问控制 操作系统是访问控制最终的执行者。对于攻击行为来说,操作系统之所以会成为如此备受关照的目标,这就是其中的原因之一。一次针对操作系统的成功攻击,可以有效地将在更高层面构筑的任何防护措施变得形同虚设。913.3 可信操作系统系统之所以被称为可信的,是因为可以依赖系统来追求安全性。信任和安全是有所区别的。信任意味着依靠和信赖,也就是说,信任是二元选择要么信任,要么不信任。另一方面,安全则是对特定机制的有效性的一次判断。关于安全的判定,应该是相对于清晰明确的策略或陈述而言。安全依赖于信任。在任何通用良
6、好的安全性原则的列表中,都很可能会包含下面这些内容:最小权限(例如低水印原则)、简单、开放设计(诸如Kerckhoffs原则等)、完全仲裁、白名单(相对于黑名单而言)、隔离性以及易于使用等。1013.3.1 MAC、DAC以及其他在可信操作系统中,有某些特定的安全性措施是为我们所喜闻乐见的,这些措施包括强制性访问控制(mandatory access control)、自主性访问控制(discretionary access control)、对象重用保护(object reuse protection)、完全仲裁(complete mediation)、可信路径(trusted path)以
7、及日志记录等。11强制性访问控制(mandatory access control)也可以称为MAC,是一种不受对象所有者控制的访问策略。自主性访问控制(discretionary access control),也可以称为DAC,是指由对象所有者决定的访问控制型。如果将DAC和MAC都应用到对象上,那么MAC则相对更“强势”。另一方面,如果DAC施加的访问控制要比MAC更加严格,那么将由DAC策略决定访问控制的结果。可信操作系统必须也能够防止信息从一个用户向另一个用户泄露。任何操作系统都会使用某些形式的内存保护和访问控制,但对于可信操作系统,我们需要更加强大的保护能力。磁记忆磁记忆(magn
8、etic remanence)即便在存储空间被新的数据覆盖了之后,之前存储数据的微弱映像有时候也能够被读取出来。为了减少这种情况发生的可能性,DoD专门制定了相应的指导原则,要求必须以不同的位模式对存储空间进行反复覆盖,之后才可以认为相关操作是安全的,从而允许另一个进程有权限对该内存空间进行访问。1213.3.2 可信路径当你在系统登录提示符之后输入自己的口令时,对于这个口令都发生了些什么呢?你如何才能够确保软件并没有作恶,诸如将口令写入文件中,随后再将文件以邮件方式发送给Trudy呢?这就是可信路径!在理想情况下,可信操作系统将会为可信路径提供强有力的担保。果真如此的话,其中的一个好处就是,
9、我们可以对一台PC上的数字签名树立起信心。操作系统也要负责记录与安全相关的事件。这种类型的信息对于检测攻击行为和进行事后分析都是非常必要的。1313.3.3 可信计算基所谓内核(kernel),就是操作系统中最底层的那部分。内核负责同步、进程间通信、消息传递、中断处理,如此等等。所谓安全内核(security kernel),就是指内核中专门处理安全性的那部分。对于针对操作系统的攻击,主要动机之一就是攻击者可以借此潜入更高层面的安全功能之下,进而绕过这些相应的安全特性。通过将尽可能多的安全功能置于操作系统的最底层,就有可能令攻击者更加难以潜入这些功能之下。引用监视器(reference mon
10、itor)就是安全内核中专门处理访问控制的部分。引用监视器协调控制主体和客体之间的访问行为。14可信计算基(trusted computing base),简称为TCB,就是在操作系统中我们赖以实施安全性的一切设施。我们对安全的定义意味着,即使TCB之外的一切都被破坏了,我们的可信操作系统也仍然是安全的。理想情况下,TCB应该将所有的安全功能聚集到可识别的层次中。15TCB包含我们赖以实施安全性的操作系统中的一切。即便TCB之外的任何设施遭到破坏,我们也仍然是安全的;但是如果TCB中的任何设施遭到破坏,那么安全性很可能就会化为泡影。13.4 下一代安全计算基微软公司的下一代安全计算基,简称NG
11、SCB。这个项目最初被指定作为“Longhorn”操作系统(也就是Windows Vista操作系统)的一部分。但是,看起来NGSCB的大部分特性直到以后的版本发布时也没有出现。NGSCB被设计用于和特定的硬件协同工作,特定硬件由可信计算组织(简称TCG)负责开发。NGSCB就是Windows操作系统中将要与TCG的硬件实现对接的那部分。TCG/NGSCB计划的潜在目标是要在开放的PC平台上面提供某些封闭系统所具备的优点。TCG计划是要提供防篡改的硬件,并期望将来有一天这些硬件能够成为PC平台上的标准。为了充分利用这个特殊的硬件,PC将需要具备两个操作系统自身的常规操作系统,以及特殊的专门用来
12、处理TCG硬件的可信操作系统。而NGSCB就是这个可信操作系统的微软版本。16根据微软的说法,NGSCB的设计目标是双重的。首先是提供高度的担保责任,即用户可以由此树立起高度的信心,相信NGSCB将会正确运行,即便当其处在攻击之下时也无需担心。其次就是提供认证操作。NGSCB的高阶架构图解:1713.4.1 NGSCB特性组 NGSCB包含以下4个主要“特性组”:n 强进程隔离(strong process isolation)防止进程之间彼此相互干扰。n 密封存储(sealed storage)防篡改硬件,可以用于安全地存储秘密信息(更确切地说,就是密钥)。n 安全路径(secure pat
13、h)提供受保护的路径,用于出入鼠标、键盘以及监视器等。n 证明(attestation)允许对“某些要素”安全地进行认证。证明(attestation)机制允许TCB可以通过NCA安全地获得扩展。所有这4个特性组都主要着眼于防范恶意代码方面。181.进程隔离进程隔离是通过所谓的“保护内存”方式强制实施的。无论如何,可信操作系统(Nexus)必须获得保护以防范非可信操作系统,此外还有BIOS、设备驱动程序以及其他一些可能被用于向其发动攻击的低级操作行为。保护内存实际上是提供了此类保护能力的内存保护方案的名称。进程隔离同样也会应用到NCA。对于不信任的任何软件,NCA都必须确保自身与它们隔离。2.
14、密封存储密封存储中包含秘密信息,秘密信息很可能就是密钥。如果软件X想要访问秘密信息,这时就如同执行完整性检测,需要计算X的哈希值。秘密信息的机密性能够获得保护,是因为它们只能由可信软件来访问,而秘密信息的完整性能够有保证,则是因为它们驻留在密封存储中。193.安全路径关于安全路径特性的各种细节,也都比较模棱两可。有人认为,对于输入来说,从键盘至Nexus的路径,以及从鼠标到Nexus的路径都是“安全的”但是究竟是如何实现这种安全却不完全清楚。显而易见,利用数字签名可以使得Nexus能够对数据的完整性进行验证。4.证明在NGSCB中,最富创新性的特性就是证明,这个特性可以提供支持,用于对“某些要
15、素”的安全认证,诸如外部设备、服务以及最重要的软件等。这是独立于用户身份认证的特性。TCB可以通过NCA的证明特性获得扩展。证明特性使用公开密钥加密方案,那就必须交换证书。又因为公开密钥暴露了用户的身份,所以在这种方案中无法获得匿名性。为了保护匿名性,NGSCB提供了相应的支持,用于可信的第三方(Trusted Third Party,TTP)。TTP负责验证签名并为此提供担保。通过这种方式,匿名性能够得以保留虽然TTP将会知道这个签名者的身份。2013.4.2 引人入胜的NGSCB应用 TCG/NGSCB都会带来什么好处呢?假设Alice在她的计算机上敲入了一个文档。那么她可以随后将该文档移
16、至RHS-侧(可信空间中),再仔细地阅读这个文档。然后,在将这个文档移回到(不可信的)LHS一侧之前,她先对该文档执行数字签名。通过这种方式,Alice就能够对她实际签署的签名有十足信心。在如今的非NGSCB计算机上,这几乎是不可能的。NGSCB的第二个用武之地就是DRM。其中,NGSCB解决的基本问题就是对秘密信息或密钥进行保护。GSCB的安全路径特性也能够防止特定的DRM攻击行为。NBSCB也允许对用户的身份进行主动鉴别。2113.4.3 关于NGSCB的非议微软坚决宣称用户可以掌控一切,因为用户可以决定如下所有事项:n 哪个Nexus(如果有多个的话)将在系统中运行。n 可以允许哪些NC
17、A在系统中运行。n 可以允许哪些NCA对系统进行鉴别。关于NGSCB有许多的批评和质疑,但是这里我们只考虑其中的两点。第一点异议来自Ross Anderson:当NGSCB被应用时,数字对象就可以被其创建者控制,而不是由当前驻留的计算机的用户来控制。第二点异议来自于Clark Thomborson,在Clark Thomborson看来,NGSCB应该被视为安全卫士。通过被动观测,真实世界中的安全卫士可以了解到大量的有关他(或她)所守卫的设施的工作原理及信息。就这个意义而言,通过被动观察就能够了解关于用户的某些敏感信息,NGSCB安全卫士与现实中的真人安全卫士还是很类似的。无论如何,NGSCB是可信系统,同时正如我们在前面提到的,只有可信系统才能够破坏你的安全性。从这个角度来看,NGSCB还确实是值得仔细推敲的。2213.5 小结本章内容回顾:操作系统安全 可信操作系统的角色 微软的NGSCB计划 23