计算的历史特征是持续的变革,这源于摩尔定律所描述的性能的显著提升和价格的下降。计算“能力”已经从集中的大型机/服务器迁移到分布式系统和商品化桌面。尽管发生了这些变化,系统共享仍然是计算的重要工具。从桌面环境的多任务处理、文件共享和虚拟机,到主机托管中心中服务器级 ISP 硬件的大规模共享,在互不信任的各方之间安全地共享硬件需要解决意外和恶意破坏的关键问题。
人们对访问控制和隔离技术一直保持着浓厚的兴趣,以支持计算系统的安全且高效的共享。尽管由于网络技术的类似巨大变革,共享的程度有所提高,但安全问题的本质并没有显著变化。调整软件、确定策略目标以及最大限度地降低管理复杂性的成本仍然是一个平衡的难题。用于隔离的基本安全原语没有改变,但我们在应用它们的经验方面已经大大增加。
在本文中,我们将回顾通过访问控制、虚拟化、命名空间管理和分区提供强隔离的现有系统。然后,我们将探讨由我们实现的 FreeBSD Jail 系统,该系统采用混合方法来应用安全原语。我们将特别关注修改现有系统的实施和管理成本。我们还将为新系统的设计提出建议,以促进未来安全和隔离功能的引入。这些建议将得出并不令人意外的结论,即通往安全的道路也恰好是改进和有意的软件设计和抽象的道路。
系统共享是指使用一个系统来同时服务于具有不同安全属性的功能。共享系统提供以下好处:
• 在计算资源不足的环境中,尤其是在早期的计算环境和现代集群中,共享可以更有效地利用宝贵的硬件资源,并实现硬件资源的联合投资。
• 普及的局域网和广域网的发展促进了大规模的系统间通信,使得计算机成为个人和组织之间的交汇点。
尽管共享的条件已经改变,但需求在很大程度上保持不变:代表多个用户利益的任务和数据共存于同一硬件平台上。
共享通用硬件资源的方式一直是几十年研究和开发的沃土。从早期分时系统时代开始,操作系统就被用作共享平台,通过调度作业、提供资源调解和虚拟化,以及后来提供访问控制。随着数据通信的普及,连接和共享数据的愿望成为系统共享的强大驱动力,并将重点放在安全共享上。
共享系统会引入诸如性能降低等效率低下问题;它们还会产生严重的安全问题。安全不能仅仅是一个在技术意义上保持对系统的控制的问题,还必须解决分离和隐私的道德和法律要求。
在本节中,我们将讨论一些具有代表性的现有系统,它们代表了允许资源共享的广泛的类似系统类别,以及实现隔离的技术。我们将首先讨论一个经典的无控制环境,然后考虑 Unix 进程模型、Unix 自主访问控制、完整虚拟机模型、类虚拟机执行环境和经典可信操作系统。
稻草人
最早的系统共享类型包括原始的多道程序内核,它们在多个进程或程序之间进行时间分片。1 在这些“稻草人”系统中,没有应用隔离技术,硬件甚至可能不提供设施来提供合格的隔离。系统的所有用户/程序都可以访问系统上的所有资源(内存、文件等)。意外或故意的恶意行为无法预防或可靠地记录。可以认为,这种隔离模型的管理和用户开销几乎不存在,因为几乎没有什么可以做的。但这就像说蓖麻油可以治疗普通感冒一样:你不敢咳嗽。
今天,这些系统主要在嵌入式市场中生存,在嵌入式市场中,响应时间要求、资源约束和严格控制的软件集成使这种方法成为一种可行但痛苦的方法。
Unix 进程
Unix 进程提供了一个基本的虚拟机原语,在各自的沙箱中运行应用程序的每个实例。尽管不是对实际硬件环境的完整模拟,但进程提供了基本的隔离和一致的接口。每个应用程序实例都使用自己的地址空间、寄存器副本和对通用系统资源的独立引用进行操作。内核为系统资源提供抽象的访问、虚拟化和同步原语,从而允许受控和有意的通信。
Unix 进程模型与许多过去和现在的系统(包括 Windows NT、BSD(伯克利软件发行版)、Linux 和 Mac OS X)中发现的模型非常相似。通过 Posix 标准,它已成为应用程序隔离的衡量标准。
Unix 多用户安全
除了进程保护之外,Unix 系统还通过以下简单模型提供多用户保护:
• 经过身份验证的用户
• 管理员管理的组系统
• 用于文件/IPC 对象的简单自主访问控制列表
• 允许管理员覆盖保护并执行系统管理的简单特权模型。
如果配置正确,用户、组和权限可以用于在互不信任的用户之间提供完整性、机密性和较小程度的可用性保护。然而,该模型的可扩展性较差,需要管理员维护组,并要求用户监视和配置他们拥有的所有对象的保护。该模型非常适合用户控制对其拥有的对象的访问的自主保护,但不适合管理员需要无法绕过的控制的强制保护。
与 Unix 进程模型一样,许多其他系统也具有类似的设计,具有相似的优点和缺点。
VMWare
IBM 的 VM/SP 以及最近的 VMware 提供了一种经典的系统虚拟化和容器化形式,通过模拟整个硬件平台以及独立计算机提供的隔离来实现。该环境以类似于操作系统资源分配的方式分配物理(内存、CPU 或 CPU 时间分片)和虚拟(备份到交换空间的内存等)资源。此模型的实现效率因几个重要因素而异。例如,虚拟硬件环境是简单地将现有硬件划分为分区,还是多路复用资源并执行更广泛的虚拟化?此外,硬件平台是否在其指令集或其他功能中支持嵌套和轻松虚拟化?还是需要大量的软件支持(例如,指令重写)?
资源管理是该模型的性能和成本方面的重要考虑因素。然而,只有在可以多路复用和/或超额分配资源的情况下,此模型才能显著提高硬件利用率。
从共享的角度来看,此模型的优势在于它能够在单个硬件平台上运行多个实例,这可以提供防火墙分区,而使用例如 Unix 安全模型则难以实现。
分区之间通信受限的程度既有优点也有缺点。将通信限制为显式通道(例如虚拟化或真实网络)提供了用于控制的成熟现有机制(数据包过滤、代理和防火墙)。然而,它也降低了通信的效率和可访问性。VMware 用户将熟悉这种现象,因为必须使用网络文件共享才能在主机和访客环境之间移动文件。
Java 虚拟机
JVM(Java 虚拟机)和 JRE(Java 运行时环境)提供了各种安全和隔离服务,以支持同时执行互不信任的代码。同一虚拟机中的不同程序在同一地址空间内运行,并使用命名空间保护(一种类型安全的环境,禁止直接指针操作)和访问控制(通过策略控制的引用类和对象的能力)的组合进行保护。
JVM 模型呈现了一个成熟而引人入胜的隔离权衡示例,因为它平衡了对高可移植性和安全性的渴望与执行中互不信任的代码之间紧密而快速通信的需求。由于同一地址空间中组件的紧密集成,以虚拟机中不可能的方式促进了交互。然而,这种方法的复杂性增加了实施和使用系统的成本,以及因不正确的实施和使用而带来的风险。在命名类的显式访问控制的平衡中也进行了类似的权衡,然后使用功能模型,该模型避免了昂贵的策略计算和加密校验和的重复。
经典可信系统
可信操作系统尝试通过引入强制安全模型来解决受控隔离问题,这些模型通常基于商业 Unix 产品的扩展。这些策略通过引入管理员设置并为所有用户强制执行的保护来补充 Unix DAC(自主访问控制)。早期的可信系统仅依赖 MLS(多级安全),它控制系统中的信息流,以防止未经授权的意外或恶意共享敏感信息。MLS 为用户分配密级,并根据系统上对象(例如文件、IPC 和网络堆栈)的分类来控制用户与这些对象之间的交互。
与 Unix 访问控制列表的自主性质相反,MLS 策略允许安全管理员推理和控制系统中的信息流。早期对可信系统的需求完全由军事客户驱动,可信系统已逐渐扩展到包括其他策略,例如系统完整性策略、基于角色的访问控制和基于规则的策略,例如域和类型强制(http://www.networkassociates.com/us/nailabs/research_projects/secure_execution/dte_overview.asp)和类型强制(http://www.nsa.gov/selinux/)。
可信系统通常提供基于组合两个要素的隔离:全局策略,以及主体(进程)和对象上的隐式或显式安全标签。这些安全标签可以包含密级或分类数据、域或类型信息、规则集或其他特定于策略的内容。
对于愿意接受为系统中每个对象进行全面标记以及实施保护策略而带来的更高开销的权衡的站点,可信系统是在高度可信的方式下控制跨安全边界的信息流的强大工具。
仅仅提供实现分离的技术手段不足以产生可用的系统:必须有一种分离哲学,以便管理员可以将他们的安全要求映射到系统原语上。
稻草人系统不提供隔离,因此管理复杂性很低。完整的分割系统,例如 VM/SP 和 VMware,它们创建了与稻草人(或更复杂的)系统的隔离,提供了一个易于理解的模型,类似于引入更多独立系统。所有资源都唯一地与分区关联,通信通道定义明确,保护自然而然地遵循成熟的资源分配流程。
对于提供更细粒度解决方案的系统,例如自主或强制访问控制,或可渗透的保护(例如命名空间子集),有必要考虑管理和审计工作负载的范围和复杂性。
保护的范围是指保护机制提供的保护概念。即使在具有许多控制的系统(例如可信系统)中,通过将宏观“业务规则”明智地映射到控制点以约束自由度,也可以有效地缩小保护范围。
保护的复杂性对应于创建、维护或审核隔离级别和正确性所需的工作量,并且主要对应于新控制和元素的添加是否导致简单的工作累积,还是组合增加。尽管可信系统提供相对较少的策略选择,但由于每个系统元素上的标签,它们需要大量的管理。
设计良好的系统将最大限度地减少范围和复杂性,以避免任何管理困难。为了理解不良范围界定和高复杂性的影响,我们考虑 BSD securelevel 功能。Securelevel 基于一个简单的范围概念:随着 securelevel 的提高,系统中可用的特权会减少,以限制妥协的影响。然而,随着系统的发展,securelevel 成为各种策略控制的集合,导致数百个文档记录不完善的控制点受到单个变量的影响。Securelevel 由于提供了一种不一致的保护模型而提供了较差的范围界定,该模型不能轻易地用作实现特定目标的工具。由于其行为的许多要素,它提供了高复杂性。
在为操作系统设计隔离设施时,重要的是要考虑控制点的总范围和能力,以及人类思维理解其组合效果的能力。
分离案例研究:FreeBSD Jail
FreeBSD 操作系统是一个广泛使用的、生产质量的操作系统,源自 BSD,在加州大学伯克利分校开发。在 ISP(互联网服务提供商)环境中,FreeBSD 主要用作可扩展的托管平台。jail
工具提供了一个轻量级的分区系统,构成了各种虚拟服务器环境的基础,并提出了一个引入开源操作系统中的有趣的隔离方案示例。
1999 年,我们向 FreeBSD 添加了一个名为 jail(2)
的分区工具。2 它重用了 chroot(2)
实现,但阻止了有据可查的逃脱 chroot 限制的方法。Jail 提供了文件系统、进程和网络命名空间的半渗透分区,并删除了所有会影响完全不在 jail 内部的对象的超级用户特权。在 Web 托管环境中,这在功能上类似于完整的分割解决方案(例如 VMware),但它有选择地放弃了完全灵活性的成本和好处,从而显著降低了开销和性能影响。
在 jail(2)
可用后不久,FreeBSD 的用户开始发现 jail 的新颖用途,其中许多用途利用了分区的半渗透性质。Jail 允许 jail 外部的管理员检查其全部内容。如果 jail 中的服务受到攻击,攻击者的活动将受到 jail 的限制,但管理员也可以完全看到,对管理员的风险最小。与专用硬件甚至完全虚拟机相比,此模型提供了显著增强的监控,一旦受到攻击,这些专用硬件甚至完全虚拟机几乎无法可靠地了解其运行情况。对硬件、内核和管理功能的直接访问的限制极大地限制了攻击者采用通常会阻止正确监控的正常“rootkit”修改套件。然而,如果由于管理员的错误而导致信息或控制流出沙箱,则半渗透保护会带来更高的风险。
混合隔离模型结合了我们之前讨论的每种方法的要素,以创建一种隔离,为消费者提供正确的安全性、性能、成本和复杂性平衡。FreeBSD Jail 方法采用了各种要素,包括 Unix 进程和访问控制模型、基于 chroot(2) 工具的命名空间子集以及虚拟机方法的要素,以提供高性能的虚拟服务器环境。然而,它也对以低成本组合这些组件采取了务实的方法。jail 模型用命名空间限制代替了传统强安全方法的标记,从而形成了一个简单的实现,可以满足特定受众的需求。
软件重用
完整的虚拟机环境可能需要对新软件进行大量投资才能提供正确的仿真,尤其是对于 i386 等复杂架构。访客环境之间提供的完全隔离需要运行操作系统的多个实例。混合形式的分区既可以在广泛重用现有软件时减少对软件的投资,也可以在减少冗余实例时减少对硬件的投资。jail
工具为所有 jail 重用单个内核,并利用现有操作系统功能来构建其保护策略,包括 FreeBSD 的特权概念、文件系统命名空间和网络堆栈中的现有虚拟化。3
代码复杂性
在 jail
中发现的软件重用,或在可信操作系统中发现的软件模块化和面向对象,要求现有软件系统是模块化和可扩展的。从头开始构建为面向对象系统的代码适合虚拟化,因为虚拟化通常只包括实例化对象的多个实例。尽管文件系统适合 FreeBSD 中的子集和虚拟化,但网络堆栈提出了一个更困难的目标。为了引入堆栈的虚拟化和子集,需要开发人员投入大量时间来消除阻止多重实例化的全局变量和数据结构,并定义实例可以交互的机制。从一开始就考虑到多重实例化来构建可以极大地简化此任务。
能力和命名权
“能力”方法在首次访问时执行访问检查,然后根据该检查提供对对象的引用,该引用可以在未来无限期地使用。能力模型的广泛使用示例是 Unix 文件描述符。这允许在初始查找和访问检查之后继续使用文件系统对象。该模型强调性能和更简单的应用程序错误处理,但以撤销为代价,并依赖于本地和全局命名方案的安全性。
基于命名空间控制对系统对象的访问是一种相关的方法。通过防止进程通过命名空间精简来命名对象,系统可以阻止对对象的访问。使用策略来提供命名空间限制可以成为控制访问的强大机制;它提供了相对简单的实现和用户可理解的行为。在 Unix 世界中,经典的命名空间限制是通过 chroot() 实现的,它限制了对命名空间子集的访问,从而阻止访问任何无法命名的对象。
结合能力和命名空间管理避免了广泛的显式访问控制基础设施,特别是当命名空间结构促进命名空间子集时,允许特定主体看到世界的掩码视图。由于能力模型规定只能对可以命名的对象执行操作,因此命名空间方法可用于对对象访问提供强有力的限制。
在 JVM 中,类型安全实现了一个简单的能力方案,其中执行代码只能命名那些已被授予使用引用访问权限的对象。虚拟机中执行的所有代码都由 ClassLoader 实例加载,该实例在授予对先前未引用的类的引用之前执行显式访问控制检查,从而将显式强制或自主访问控制与能力方案相结合。
分层命名空间:子集和保护
软件系统经常使用分层命名空间来组织信息。示例包括文件系统、MIB(管理信息库)和 DNS(域名系统)。层次结构也是使用命名空间子集引入隔离的宝贵工具,其中系统中的主体相对于命名空间中的特定根执行命名空间中的查找。在 jail
模型中,使用 chroot(2)
的文件系统命名空间子集允许约束对象命名,该技术可以轻松地应用于具有分层命名空间的其他系统。
分层命名空间还通过允许递归地强制执行保护来提高效率,以便“容器对象”保护放置在其中的对象。规范示例是“private”目录,它通过将保护的常见情况简化为命名空间操作来帮助用户应用保护。
分层命名空间也支持其他安全模型,包括自主和强制保护,因为它们有助于赋予命名空间本身的某些部分以信任。在平面命名空间中,命名空间上的保护通常定义不完善或不灵活,从而允许在按名称建立服务或对象时发生竞争,或者需要显式分配和使用特权来在命名空间中建立新名称。
受控和分层命名空间的概念在 JRE 中尤其有价值,其中类命名空间不仅组织类层次结构,而且还可以帮助确定从命名空间部分加载的执行代码的策略。
撤销
安全系统中的一个关键问题与撤销对对象的访问权限有关。一旦访问权限被授予,并且安全策略被修改为撤销此访问权限,系统在多大程度上必须识别和删除表示该权限的能力?在严格的分区方案中,主体(虚拟机)之间的通信仅通过一组受限的接口进行,撤销将几乎不起作用。然而,对于标记的安全系统,撤销问题对于自主策略(例如 Unix 权限)和其他可渗透或混合安全方案更为重要。
对于 MLS 或 Unix 自主保护,撤销问题因撤销成本而变得复杂。通过拒绝授予对象的其他能力,可以轻松阻止对对象的新鲜访问。然而,现有能力可能分散在整个系统中,有时以涉及复杂子系统交互的方式分散。在这样的环境中,撤销的好处通常会被记账和撤销的性能和实施成本所抵消,并且为了权宜之计,将从系统中省略。
在 jail 系统中,撤销仅在 jail
启动期间发生,此时进程必须从主机环境转换到 jail
环境,并且可能持有引用 jail
外部对象的能力,这些能力可能被用来攻击 jail 容器。这种情况通常通过仔细编写 jail
管理工具来处理,以便在启动任何不受信任的代码之前释放能力。然而,此过程存在风险,并且在必须解决任何需要撤销的系统时提出了挑战。
Unix 多用户安全也面临类似的挑战,其中用户的概念纯粹在用户空间库和应用程序中定义(而用于访问控制的凭据概念在内核中定义)。从用户数据库中删除用户不足以撤销代表用户运行的现有进程的特权,这需要更昂贵且容易出错的方法来终止用户进程、删除文件和删除他们拥有的服务。
信息流
使用分区系统要解决的特定安全问题(完整性、机密性和可用性)通常可以简化为对数据和控制流的关注。隔离方案以不同的方式解决此问题:强制性 Biba 和 MLS 策略实施的硬信息流控制明确地做到这一点,而虚拟系统工具则隐式地做到这一点。通过将信息流理解为特定的关注点,系统可以做出明智的权衡。系统可能会容忍配置信息的泄漏,只要它保持不变,但它们可能不会容忍机密数据的未经授权的流动。命名空间子集等技术通过有效地表达信息访问的边界来提供对信息流的强大控制。
避开难题
尽管经过仔细考虑和广泛的分离工具集,但偶尔会有一些系统根本不适合在没有广泛虚拟化的情况下进行强隔离。System V IPC 就是这样一种系统,它使用平面命名空间与自主访问控制相结合。对单个 IPC 对象的保护是众所周知的,并且通常可以扩展以提供强制保护。然而,命名空间本身构成了一个巨大的挑战,因为它是非分层的,并且在保持灵活性和安全性的同时,难以引入对命名空间的控制。命名空间的虚拟化将涉及对实施和管理工具的复杂修改。
在 FreeBSD 上的 jail 系统中,我们选择简单地禁用对 IPC 原语的访问,以避免为每个系统分区引入新命名空间的成本,同时避免提供无控制的风险。对于 jail 工作中针对的应用程序环境,这已经非常成功,尽管我们预计将来有必要解决此问题。避开难题以解决特定环境可能是引入有效隔离的强大方法。通过 jail 对管理界面也进行了类似的权衡,因为系统子集通常不必具有整个系统的全部功能。
资源共享和调度
引入隔离中最困难的任务之一是资源分配和调度。在隔离环境中,资源来自公共池。对于操作系统,这些资源通常包括具体的对象或服务,例如 CPU 时间、内存、网络带宽和磁盘存储。不太具体的资源(例如调度服务的延迟和其他公平性概念)在某些环境中可能很重要。在大多数 Unix 系统上,主要模型是分时。应根据作业和资源争用的预期情况,分配资源以平衡吞吐量和响应时间的关注点。在其他系统上,权衡可能看起来不同,从协作式多任务处理到执行仔细的资源测量和分配以防止过度提交的硬实时系统。
平衡行为因实施复杂性而变得更加复杂。资源分配的控制需要簿记和执行。在更紧密集成的环境中,这两者都可能变得难以提供,在这些环境中,资源可能被一组不断变化的分离组件引用。在允许多个沙箱之间共享文件的虚拟环境中,确定哪个沙箱来“承担”文件成本可能很困难。同样,在 JVM 中,分配的内存可能在安全域之间流动。
管理复杂性
管理复杂性是在任何安全至关重要的系统设计中都需要考虑的关键因素。经验表明,难以安全管理的系统将无法被正确使用???或者根本不被使用。虽然某些安全系统(例如可信操作系统访问控制策略)由于期望的安全结果而本身就非常复杂,但确定正确的权衡通常将是一个极简主义的问题:满足用户需求的最简单的安全解决方案是什么?
具体的管理复杂性目标包括以下几点
• 避免管理成本随着受保护对象的数量线性(或更糟)增长。安全策略应该仅在策略目标变得更复杂时才需要更多管理。
• 避免用户管理的属性,因为每个配置设置或属性都提供了用户出错的机会,必须尽量减少这种错误。
• 允许安全策略以安全目标的语言表达,而不是以实现的细粒度原语表达。某些系统(最常见的是防火墙)需要对系统实现有专家级的了解???并且难以将策略要求转化为实践。
• 构建系统,使其易于确定保护是否正常工作,并使策略的含义清晰且可测试。必须管理的元素越多,审核这些设置并确定总体系统行为就可能越困难。
• 避免提供可调资源限制而不是资源分配策略,因为管理员通常无法以知情的方式选择边界。此外,默认边界和可调边界会随着硬件和应用程序平台的发展迅速过时???可能导致有害行为。
在本文中,我们讨论了系统设计中的权衡,这些权衡有助于(或阻碍)高效且安全地引入隔离。最终,在设计和实施新系统时,最重要的教训是,对这些权衡的考虑必须是明确的。
您可以采取以下具体步骤来准备系统以在共享环境中使用,无论最终采用何种安全或隔离模型
1. 面向对象的实现是有效的。最容易虚拟化的系统是那些系统状态封装在一个类中的系统,该类可以实例化多次而无需付出额外的努力。
2. 避免实现中的“乱伦”现象,并采用面向组件的设计。通过在不同软件组件的实现中完成隔离,您可以有更大的余地为组件采用不同的隔离方法,从而提高灵活性。如果某个子系统在特定环境中被证明是不必要的,则可以轻松禁用它,从而降低工作负载。
3. 尽早考虑命名空间。有效使用分层和受保护的命名空间允许将信任置于命名空间中,并允许诸如命名空间子集化和精简之类的技术以低成本完成隔离。
4. 通过提供可以轻松且广泛地表达策略的原语,最大限度地减少对属性和策略管理的需求。原语允许的细粒度控制越多,未来可能需要控制的原语方面就越多。
在引入隔离和保护时,有充分的理由采用混合设计,其中包括许多不同隔离方法的元素。这通常可以避免 90% 的成本,同时在特定环境中实现 90% 的收益
• 避免硬性资源分配要求,因为它们需要大量的簿记,而且并非总是需要。这也通过提高资源共享水平来提高可扩展性。
• 使用轻量级的基于命名空间的保护方法。它们成本低廉且易于实施,并且对管理员来说很有意义。
• 避免需要广泛的管理;特别是避免安全标签或访问控制列表数量扩展性差的方法。允许用户在安全复杂性和管理复杂性之间做出明确的权衡,而不是系统利用率和管理复杂性之间。
尝试将隔离引入现有系统几乎总是会遇到一个关键问题:与现有系统的兼容性。2000 年,Rob Pike 发表了一次关于操作系统研究领域衰落的挑衅性演讲:4
“要成为一个可行的计算机系统,必须遵守一大堆庞大且经常变化的标准:TCP/IP、HTTP、HTML、XML、Corba、Unicode、Posix、NFS、SMB、MIME、POP、IMAP、X、...”
“大量的工作,但如果你不遵守标准,你就会被边缘化。”
“估计 Plan 9 中 90-95% 的工作是直接或间接地为了遵守外部强加的标准。”
临时、事实上的和委员会设计的接口加剧了这种情况,这些接口经常通过排除安全功能来阻止安全功能的集成。不完善的分区在这种情况下提供了一些缓解,因为它允许在某些方面对进程进行不同的处理,而不会妨碍它们与其他进程的交互。
Sequent 和 Pyramid 开创了“双重宇宙”Unix,它在逐个进程的基础上模拟了 Unix 操作系统的两个主要变体。FreeBSD 继承了这一传统,推出了“Linux-o-lator”,它能够执行为 Linux 操作系统编译的二进制程序???为这些进程提供真实 Linux 系统的环境,同时看起来像一个本地 FreeBSD 进程。卡内基梅隆大学的 Mach (http://www-2.cs.cmu.edu/afs/cs/project/mach/public/www/mach.html) 和后来的 IBM 的 K42 (http://www.research.ibm.com/K42/) 等系统表明,在保持满足大多数要求的应用程序兼容性层的情况下,重新设计操作系统的内部结构是完全可行的。
有效的隔离对于共享计算环境的部署仍然至关重要,这受到增加通信和降低硬件投资的愿望的驱动。我们探讨了隔离的常见实现方式,从完整的虚拟机到可信操作系统,所有这些都通过它们为互不信任的各方共享硬件的目标联系在一起。通过结合各种支持隔离的技术,我们展示了混合方法的使用,这些方法提供了每种底层原语的许多优点???但实施成本和复杂性要低得多。
毫不奇怪,紧密集成的隔离技术依赖于服务的一致和清晰的实现。在构建系统时就考虑到保护???即使不是最终感兴趣的保护???通常也更容易修改以添加新的保护。谨慎软件设计的信条,包括模块化、面向对象和有意设计,都支持高级安全技术的集成,并且通常是为新安全服务准备系统的最佳手段。由于系统不可避免地在需要通信和资源共享的环境中使用,而不管软件开发人员的期望如何,因此从一开始就规划安全性对于允许系统安全使用至关重要。
1. Hansen, P. B. RC 4000 软件:多程序系统。RCSL No. 55-D140, Regnecentralen, Copenhagen, Denmark, 1969.
2. Kamp, P.-H., and Watson, R. Jails: 定义全能的 Root。Sane 2000, Maastricht, The Netherlands.
3. 参见参考文献 2。
4. Pike, R. 系统软件研究无关紧要。Bell Labs, Lucent Technologies, 2000; http://cm.bell-labs.com/cm/cs/who/rob/utah2000.pdf.
POUL-HENNING KAMP 是 FreeBSD 操作系统的主要开发者之一,他从一开始就从事这项工作。他因其基于 MD5 的密码加扰器而广为人知,该加扰器保护了 Cisco 路由器、Juniper 路由器以及 Linux 和 BSD 系统上的密码。有些人注意到他编写了一个内存分配器、一个设备文件系统和一个真正可用的磁盘加密方法。Kamp 与他的妻子、儿子、女儿、大约十几台 FreeBSD 计算机以及世界上最精确的 NTP(网络时间协议)时钟一起住在丹麦。他以独立承包商的身份谋生,从事与计算机和网络相关的各种工作。
ROBERT WATSON 是 McAfee Research 的主机入侵保护 (HIP) 研究组的研究科学家和 DARPA 首席研究员。他领导了各种与网络和操作系统安全相关的研究和开发项目,范围从产品开发到主动网络安全影响的研究。他的其他研究兴趣包括访问控制、审计、防篡改硬件、分布式文件系统、网络堆栈性能优化和强化、可信操作系统和窗口系统安全。Watson 是 FreeBSD 核心团队开发人员和 TrustedBSD 项目的创始人。
© 2004 1542-7730/04/0700 $5.00
最初发表于 Queue vol. 2, no. 5—
在 数字图书馆 中评论这篇文章
Jonathan Parri, Daniel Shapiro, Miodrag Bolic, Voicu Groza - 将控制权交还给程序员
服务器和工作站硬件架构不断改进,但解释型语言未能跟上现代处理器的正确利用步伐。SIMD(单指令多数据)单元几乎在每台当前的桌面和服务器处理器中都可用,但利用率严重不足,尤其是在解释型语言中。如果多核处理器继续保持目前的增长模式,解释型语言的性能将开始落后,因为当前的本机编译器和语言提供更好的自动化 SIMD 优化和直接 SIMD 映射支持。
Bob Supnik - 模拟器:过去(和未来)的虚拟机
模拟器是一种“虚拟机”,旨在解决一个简单的问题:缺少真实硬件。用于过去系统的模拟器解决了真实硬件的丢失问题,并在真实硬件消失后保留了软件的可用性。用于未来系统的模拟器解决了未来硬件设计的可变性问题,并促进了在真实硬件存在之前进行软件开发。
Mendel Rosenblum - 虚拟机的重生
虚拟机这个术语最初描述的是 20 世纪 60 年代的操作系统概念:一种具有计算机系统硬件外观(真实机器)的软件抽象。四十年后,这个术语涵盖了范围广泛的抽象概念?例如,与现有真实机器不匹配的 Java 虚拟机。尽管存在各种变体,但在所有定义中,虚拟机都是程序员或编译系统的目标。换句话说,软件是为在虚拟机上运行而编写的。