DSI:安全运营商级 Linux 集群的新架构
编者注:这是 Linux Journal 2002 年 7 月印刷版文章“DSI:安全运营商级 Linux”的完整版本.
电信行业对集群的兴趣源于以下事实:集群使用经济高效的硬件和软件解决了运营商级特性,例如有保障的服务可用性、可靠性和可扩展的性能。这些运营商级特性随着时间的推移而发展,包括对高级安全级别的要求。然而,很少有努力构建一个连贯的分布式框架,以在集群系统中提供高级安全级别。
在爱立信研究院,我们的工作目标是在大规模运营商级 Linux 集群上运行的软实时分布式应用程序。这些集群必须不间断运行,无论硬件或软件错误如何,并且必须允许操作员在运行期间升级硬件和软件,而不会干扰在其上运行的应用程序。在这样的集群中,软件和硬件配置受到管理员的严格控制。集群内部节点之间与集群外部计算机的通信受到限制。
在本文中,我们介绍了开发名为分布式安全基础设施 (DSI) 的新架构背后的基本原理。我们描述了该架构的主要元素,并讨论了我们的初步结果。
DSI 支持不同的安全机制,以满足在 Linux 集群上运行的电信应用服务器的需求。DSI 为在集群系统上运行的应用程序提供用于访问控制服务、身份验证服务、通信完整性和审计服务的分布式机制。
集群服务器存在许多安全解决方案,从防火墙等外部解决方案到完整性检查软件等内部解决方案。然而,没有专门为集群设计的解决方案。最常用的安全方法是将几个现有解决方案打包在一起。然而,这些不同软件包的集成和管理非常复杂,并且经常导致不同安全机制之间缺乏互操作性。集成这些众多软件包时也会出现其他困难,包括系统维护和升级的难度降低,以及难以跟上大量的安全补丁和升级。
运营商级集群对性能和响应时间有严格的限制。因此,在设计安全解决方案时,系统设计人员面临着很大的压力。事实上,许多安全解决方案由于其高资源消耗而无法使用。当前实施的安全机制基于用户权限,并且不支持对属于同一用户的两个进程之间的交互进行身份验证检查(即使进程是在远程处理器上创建的)。然而,对于运营商级应用程序,只有少数用户长时间运行相同的应用程序而没有任何中断。
应用上述概念将授予在不同节点上创建的所有进程相同的安全权限。这将导致对分布式系统中许多操作不进行安全检查。上述安全控制的基本实体的粒度是用户。对于运营商级应用程序,这种粒度是不够的。因此,DSI 基于更细粒度的基本实体:单个进程。
作为运营商级集群的一部分,DSI 必须符合运营商级要求,例如可靠性、可扩展性和高可用性。此外,DSI 还支持以下要求
连贯的框架:安全性必须在异构硬件、应用程序、中间件、操作系统和网络技术的不同层中保持连贯。所有机制必须协同工作,以防止系统中出现任何可利用的安全漏洞。因此,DSI 旨在将不同的安全解决方案集成在一起,并使它们适应软实时应用程序。
进程级方法:DSI 基于细粒度的基本实体,即单个进程。
最大性能:引入安全功能不得带来高性能损失。预计在首次建立安全上下文期间性能可能会略有下降;但是,对后续访问的影响必须可以忽略不计。
抢占式安全:安全上下文的任何更改都将立即反映在正在运行的安全服务上。每当主体的安全上下文发生更改时,系统将根据这个新的安全上下文重新评估其当前资源使用情况。
动态安全策略:必须可以支持分布式安全策略中的运行时更改。运营商级服务器节点必须提供持续和长期的可用性,因此不可能中断服务来强制执行新的安全策略。
透明密钥管理:生成加密密钥是为了保护连接安全。这导致必须安全存储和管理的密钥数量众多。
DSI 在集群系统的安全领域引入了原创贡献。然而,某些部分,例如访问控制服务以及安全上下文和标识符的使用,很大程度上归功于现有的提议,例如 Security Enhanced (SE) Linux。
DSI 有两种类型的组件:管理和服务安全服务。
DSI 管理组件定义了一个薄层,其中包括安全服务器、安全管理器和安全通信通道(图 1)。服务层是一个灵活的层,可以通过根据集群的需求添加、替换或删除服务来修改或更新。
安全服务器是 DSI 中的中央管理点,是集群外部安全操作和管理以及入侵检测系统的入口点。它负责分布式安全策略。它还通过将分布式策略中的更改广播到所有安全管理器来定义整个集群的动态安全环境。

图 1:DSI 架构
安全管理器在集群的每个节点上强制执行安全。它们负责在本地强制执行安全环境中的更改。安全管理器仅与安全服务器交换安全信息。
安全通信通道在安全服务器和安全管理器之间提供加密和身份验证的通信。安全服务器与集群外部的所有通信都通过安全通信通道进行。两个节点(以避免单点故障)托管安全服务器,不同的安全服务提供商(例如证书颁发机构)经过强化以最大程度地提高安全性。进出这些节点的所有连接都经过加密和身份验证。
安全机制基于广为人知、经过验证和测试的算法。为了使安全机制有效,用户不得能够绕过它们。因此,强制执行安全的最佳位置是在内核级别;所有必要的安全决策都在内核级别实施,与主要的安全管理器组件相同,该组件在内核中具有存根。在 Linux 操作系统中,这些存根通过加载模块实现。
每个节点上的 DSI 架构都基于一组松散耦合的服务(图 2)。

图 2:DSI 服务
安全管理器控制节点上不同的安全服务。这种基于服务的架构具有以下优点
服务实现与系统的其余部分分离。通过保持相同的 API,可以更改服务实现,而不会影响应用程序。但是,为了满足具有特殊安全需求的应用程序,在用户级别提供了用于访问安全服务的 API(图 3)。
它仅根据需求、性能问题或安全环境运行预定义的服务。此外,可以在运行时替换服务,而不会对正在运行的应用程序造成重大缺陷。这使架构能够被修改并抵抗整个系统生命周期内的变化。
可以添加、删除或更新不同的服务,而无需管理员干预。这减少了由于需要手动应用大量安全补丁而导致的配置错误。

图 3:每个节点内部 DSI 的基于服务的方法
安全管理器发现不同的服务。每个服务在创建时都会向本地安全管理器发送存在公告,本地安全管理器会注册这些服务并向内部模块提供其访问机制。
服务有两种类型:安全服务(访问控制、身份验证、集成、审计)和安全服务提供商,它们在用户级别运行并为安全管理器提供服务。
安全服务器是所有安全管理器的参考,并且有权声明节点已被入侵。它订阅所有更新以使其不同安全上下文的缓存保持最新,这使其成为运行入侵检测系统 (IDS) 的理想候选者。它有一个本地证书颁发机构,因为它为安全管理器运行的辅助证书颁发机构认证公钥。
安全服务器的主要任务包括审计、触发集群内部和外部的警报和警告、管理分布式安全策略以及传播安全操作和管理信息。
安全管理器在每个节点上强制执行安全。它主要是一个查找服务,用于注册不同的安全服务和服务提供商并将它们连接在一起。安全管理器和安全服务器之间的所有通信都通过安全通信通道进行。
安全管理器在启动时使用数字签名实例化,以确保它不会被恶意安全管理器替换。创建后,它加入 DSI 框架并与安全服务器交换密钥。每个安全管理器都必须发布对其本地实体(与远程实体相关)的安全上下文的任何更改,并订阅远程相关实体的安全上下文中的更改(请参阅第 8 节)。
安全管理器的主要任务包括密钥管理、访问控制、进程身份验证、审计级别管理、警报发布,以及本地存储的分布式安全策略的维护和更新。
安全通信通道为集群内部和外部的安全组件提供安全通信。在集群内部,它在安全组件之间提供经过身份验证和加密的通信(图 4)。它支持优先级排队以发送和接收带外警报,并通过事件分发机制耦合到安全管理器。
对于大型集群,与轮询机制相比,基于订阅来自定义通道的事件的事件驱动方法减少了系统负载。此外,这种方法的好处是
它没有单点故障。
它提供了事件过滤的可能性,因此使用的带宽更少,并且在丢弃无关信息之前需要更少的时间来处理它们。
安全通信通道为警报和警告、安全管理、服务发现和安全策略分发提供通道。它还提供了一个可移植性层,以避免对低级通信机制的依赖。
为了提高效率,安全标识符 (SID) 被定义为对应于安全上下文的整数。集群中的所有实体都有一个 SID。这个 SID 在内核级别添加,用户无法篡改。它可以通过安全管理器跨处理器传输,并在整个集群中解释。一旦在本地处理器外部需要主体的安全上下文(例如,如果此进程访问远程对象),其 SID 将发送到包含该对象的节点的安全管理器。集群内部的 SID 传播基于 SelOpt 开源 [6]。为了避免重传,安全管理器依赖于缓存机制。被访问节点的安全管理器通过 SCC 订阅访问发起者实体的安全上下文可能发生更改的事件。
安全配置必须保持简单。遵循这种方法,DSI 依赖于存储在安全服务器上并由安全服务器管理的集中式安全策略。但是,为了保持集群的可扩展性,策略的只读副本通过 SCC 从安全服务器推送到各个安全管理器。这种分布式安全策略 (DSP) 是一组明确的规则,用于管理 DSI 的可配置行为。每个节点在安全启动时都依赖于最小安全策略,该策略存储在闪存中或与其数字签名一起下载。一旦 DSP 在节点上可用,它就优先。
许多不同的 DSI 服务和子系统都受益于可配置的行为,并且可以依赖 DSP。它们主要包括访问控制,然后是身份验证、机密性和完整性以及数据包过滤。DSI 管理员(人类)操作驻留在安全服务器上的 DSP 的主副本。因此,它必须以人类可读的格式表示。DSP 的基本更新机制是通过 SCC 推送策略每个新版本的完整副本。但是,考虑到策略可能占用的大小,将提供增量更新机制。
安全策略规则可能有多个来源。DSI 管理员的手动配置提供了最大的灵活性,但很快就会变得繁琐。因此,默认策略规则是从系统上安装和运行的各种软件包的性质推断出来的。这些默认规则编纂了良好的安全实践。DSP 应该只需要因安装新软件组件等事件而更新;它不应在发生普通的重复事件时更新。
安全会话管理器通过更新安全上下文存储库来处理此类事件。安全上下文定义与每个实体关联的权限。它在整个集群中唯一地定义,但它是创建它的安全管理器的责任。
访问控制可以定义为防止未经授权使用资源 [2]。它依赖于主体(或访问请求发起者)、对象(或目标)、环境、决策和强制执行的概念。访问控制服务 (ACS) 假定主体已通过适当的身份验证(请参阅身份验证服务)。即使主体和对象位于集群中的不同节点上,DSI 也允许验证访问控制权限。为了简化,我们分两个级别处理访问控制:本地(当主体和对象在同一节点上时)和远程(当它们在不同节点上时)。对于本地访问控制,访问权限是主体安全 ID (SSID) 和对象安全 ID (TSID) 的函数。
对于远程访问控制,我们通过添加一个新参数来扩展本地访问控制机制:安全节点 ID。因此,访问权限不仅是主体和目标安全 ID 的函数,而且也是安全节点 ID (SNID) 的函数。SSID 与 SNID 一起发送到包含对象的节点。对象节点的安全管理器根据 SSID、SNID 和 TSID 做出访问控制决策。
在集群处理器上运行的 ACS 由两部分组成
内核空间部分:负责实施访问控制的强制执行和决策制定任务。如 [1] 所倡导的那样,这两项职责是分开的。内核空间部分维护其做出决策所依据的信息的内部表示。在 Linux 上,这部分实现为 Linux 安全模块 (LSM)。
用户空间部分:这部分有很多职责。它从分布式安全策略和安全上下文存储库中获取信息,将它们组合在一起,并以易于使用的形式将它们馈送到内核空间部分。它还负责将来自内核空间部分的警报传播回安全管理器,安全管理器会将它们馈送到审计和日志记录服务,并在必要时通过 SCC 传播到安全服务器。
这两部分都由本地安全管理器 (SM) 启动和监控。SM 还将它们引入到基础设施的其他服务和子系统中,它们需要与之交互。
ACS 旨在提供细粒度的访问控制(在子系统调用级别)。它尊重最小特权原则的最小化原则,以限制最终安全漏洞引起的传播和损害。因此,它提供了纵深防御。
在处理器上运行的 ACS 必须尽可能少地假设其他处理器,包括它们是否已被入侵。出于这个原因,ACS 实例始终是唯一对处理器本地资源做出访问决策的实例。
出于访问控制的目的,系统活动分为不同的阶段,每个阶段都有自己的一组权限。这些阶段包括软件安装、软件激活、软件配置和软件执行。
对于 ACS 的初始设计,仅考虑授予/拒绝决策。其他更复杂的决策将涉及速率限制和总使用量限制。访问控制决策以外的其他操作(例如介入和主动反应)也未实现。
目前的身份验证标准是通过断言进行身份验证。这意味着访问远程处理器上资源的程序断言它是代表用户执行此操作的。在暴露于外部攻击的环境中,用户模式和断言本身都不能被认真信任。
身份验证服务基于公钥机制和 SSL/TLS 协议的使用。公钥基础设施基于通过安全服务器访问的根证书颁发机构和在每个节点上运行并通过安全管理器访问的辅助证书颁发机构。
证书由安全管理器在每个节点上本地生成和签名。证书不存储在目录中,而是存储在内存的访问控制区域中。进程只能访问相应的证书。进程不直接访问其私钥,而是使用 API 进行加密。集群内部的进程通过其相应的证书进行身份验证。
我们详细说明身份验证的不同步骤
调用拦截:在首次请求打开连接时,本地 SM 拦截该请求。
SM 使用其本地 DSP 副本和进程的 SID 验证进程是否具有访问网络的权限。
如果可以,SM 会要求安全服务提供商、密钥管理服务生成一对密钥和相应的证书。然后,通过辅助证书颁发机构,SM 使用其私钥签署公钥,并将其证书作为链式证书添加到进程的证书中
SM 将证书放入定义的共享内存区域,然后将证书的指针返回给请求进程。请注意,出于访问控制目的,检查存储证书的共享内存区域。当进程终止时,相应的证书将被清除。
进程使用其证书继续进行正常的 SSL/TLS 连接。
目标节点中的 SM 检查证书并通过证书链验证证书。请注意,SM 通过安全启动拥有 SS 的公钥。
审计服务为系统提供审计功能。在安全管理器端,该服务负责收集跟踪、分析跟踪、检测可能的攻击模式、触发警报并通过 SCC 传播它们。必须可以修改通过安全管理系统生成的日志级别。此服务负责与合法拦截相关的功能。
此服务在安全服务器上具有增强的功能。它还监控集群的内部网络和分布式日志,以检测攻击。安全服务器上的此服务通过 SCC 与外部 IDS 相关联。审计服务在需要时连接到外部记录器。出于性能原因,审计服务和外部记录器之间的连接不是通过 SCC 进行的。
这里描述的工作与之前专注于单台计算机或通用集群的工作相比,其区别在于专注于为集群服务器设计的安全基础设施的设计。此外,DSI 从设计层面开始就考虑了与安全管理相关的所有问题。
一些相关工作包括 CorbaSec,CORBA 安全服务,它处理不同对象之间交互的访问控制和身份验证方面的安全问题。CorbaSec 没有考虑安全的所有方面,例如像 DSI 这样的检测和反应机制。另一方面,来自国家安全局 (NSA) [3] 的 Security Enhanced (SE) Linux 和 Linux 安全模块 [4] (LSM) 工作在单台计算机上运行;它们不扩展到集群。
最后,网格安全基础设施 (GSI) 随后在现有标准的基础上开发出来,以解决网格环境中出现的安全要求 [5]。DSI 方法更细粒度,并且基于修改操作系统以增强安全机制(如前所述)。DSI 方法是可行的,因为集群中的软件和硬件配置受到严格控制。实际上,DSI 支持整个集群中连贯的安全愿景,而 GSI 支持多个用户的不同信任域之间的安全互操作机制。
到目前为止,已经为无盘 Linux 服务器实施了安全启动机制。使用带有数字签名的安全启动,分布式可信计算基 (DTCB) 将在集群节点启动时可用。安全启动时的内核足够小,可以彻底测试漏洞。此外,二进制文件的数字签名和本地证书颁发机构的使用将防止对 DTCB 进行恶意修改。
我们还实施了一个基于 Linux 安全模块 (LSM) 的安全模块,该模块强制执行安全策略作为 DSI 访问控制服务的一部分。该模块与 SCC 集成以实施分布式访问控制机制。DSI 当前在整个集群的进程级别支持抢占式和动态安全策略。目前,我们正在实施分布式安全策略。为了简化此策略的管理和维护,我们正在完成一项研究,以设计方法来重用已包含在软件包管理系统(例如 Linux 的 RPM)中的信息,以便生成部分安全策略或将此类信息推送到软件包(如果这是最佳指定位置)。这项工作还旨在利用策略在软件、安装、配置、激活和执行期间提供明显不同的权限。用于表达策略以及编译和加载机制的确切语言规范仍有待完成。
我们部分实施了基于 OmniORB(CORBA 的开源实现)的安全通信通道。SCC 逻辑在可移植性层之上实现。这使得实现独立于使用的任何通信中间件。选择 CORBA 作为 SCC 的通信中间件是出于许多因素的考虑,例如对分布式实时和嵌入式系统以及互操作性的支持。
爱立信研究院的开放系统实验室启动了 DSI 项目,以提供一种架构,该架构支持在运营商级 Linux 集群上运行的电信应用程序的不同安全机制。开发方向是使 DSI 框架开源,并让来自不同组织以及开源计划的人员参与到各种组件的设计和开发中。
图 5 显示了 DSI 的各种组件。目前,在爱立信研究院,我们正在努力实施核心 DSI,其中包括以下组件:安全通信通道、安全服务器、安全管理器、访问控制服务(包括 LSM 模块)、安全策略生成、安全会话管理器和事件的分布式跟踪(作为审计服务的一部分)。

图 5. DSI 组件
带有问号的所有组件都开放设计和开发贡献。
我们介绍了在运营商级 Linux 集群上运行的电信应用程序对新安全方法的需求。基于我们开发连贯解决方案以满足 Linux 运营商级集群安全需求的动机,我们为安全分布式基础设施提出了新的设计。我们介绍了该设计的主要元素,并讨论了一些初步结果。我们相信,这种设计是增强具有运营商级需求的大规模集群安全性的实用方法。
为了完成 DSI,我们计划与开源计划和其他组织合作。来自爱立信研究院的 DSI 团队将出席渥太华 Linux 研讨会,就 DSI 进行三场专题演讲。我们还将出席 2002 年在芝加哥举行的 IEEE 集群会议。此外,爱立信研究院将于 6 月 24 日至 25 日在蒙特利尔举办年度开放集群小组会议,这将使我们有机会与小组成员进行交流,并让他们参与到 DSI 项目中。
我们目前正在准备一个网站,该网站将于 6 月下旬上线。它将提供 DSI 技术报告、演示文稿、源代码以及其他贡献者的网站链接。我们鼓励对 DSI 感兴趣的人员联系任何 DSI 团队成员(如下所列),以接收有关 DSI 架构、策略、源代码的详细论文,并讨论合作机会。
[1] ISO 10181-3:“开放系统安全框架:访问控制框架”,ISO,1996。
[2] ITU-U 建议 X.800:“用于 CCITT 应用的开放系统互连的安全架构”,ITU-T(当时的 CCITT),1991 年。
[3] Loscocco P.:“安全增强型 Linux”,Linux 2.5 内核峰会,美国圣何塞 (Ca),2001 年,www.nsa.gov/selinux/docs.html。
[4] “Linux 安全模块 (LSM) 框架”,2001 年,lsm.immunix.org。
[5] Foster I.、Kesselman C.、Tsudik G.、Tuecke G.,“计算网格的安全架构”,第五届 ACM 计算机和通信安全会议。
[6] Morris, J. "Selopt: 用于 SE Linux 的标记 IPv4 网络",www.intercode.com.au/jmorris/selopt
[7] Schreiner R.、Lang U.:“MicoSec 用户指南”,www.objectsecurity.com/micosec.html
Ibrahim Haddad 是爱立信公司位于加拿大蒙特利尔的研究部门的研究员。他参与第三代无线 IP 网络的系统架构,并负责开放系统实验室的 IPv6 和安全研究活动。
Charles Levert 在加拿大蒙特利尔的爱立信开放系统实验室工作。他目前专注于全 IP 电信集群中的安全主题。他是自由软件的长期用户和贡献者。
Makan Pourzandi 在爱立信研究开放系统实验室担任 DSI 的技术负责人。他于 1995 年在法国里昂大学获得并行计算博士学位。
Miroslaw Zakrzewski 在爱立信研究开放系统实验室工作。他参与了导致运营商级集群访问控制机制原型设计和开发的研究活动。
Marc Chatel 是加拿大蒙特利尔爱立信研究站点的 IS/IT 网络团队成员。
Michel R. Dagenais 是加拿大蒙特利尔理工学院计算机工程系教授。他的研究兴趣包括分布式系统和软件开发工具。
David Gordon 是来自舍布鲁克大学的计算机科学实习生,在爱立信开放系统实验室工作。
Bruno J.M. Hivert 是加拿大蒙特利尔爱立信公司研究部门的系统管理员,他在那里参与研究实验室的网络和系统管理以及 Linux 部署。
Dominic Pellerin 是来自舍布鲁克大学的计算机工程实习生,在爱立信开放系统实验室工作。