众所周知,使用软件分区,即在单独的环境中运行应用程序,有助于满足安全和保密要求。很多时候,虚拟机管理程序被视为最佳和/或唯一的解决方案,然而,事实并非如此。虚拟机管理程序本身会带来额外的风险和漏洞。因此,本文提供了一种不同的方法:分离内核。
嵌入式虚拟机管理程序支持多个操作系统在同一硬件平台上运行,最大限度地提高硬件性能,同时确保独立性。这些嵌入式虚拟化解决方案有时会带来安全需求,而分离关注点对于满足这些需求至关重要。但是,依赖虚拟机管理程序会引发信任问题,并且在涉及安全和安保标准(如ISO 26262或ISO 21434)时会带来额外的限制。
虚拟机管理程序的替代方案是在实时操作系统中实现分离内核。这种方法允许在单个操作系统中分离关注点,保证应用程序级的分离,而不是操作系统级的分离。让我们稍微深入地研究一下这些技术。
嵌入式系统管理程序:管理者的管理者
嵌入式管理程序是一种软件,它使多个操作系统能够在资源受限的设备的单个处理器上运行,从而共享资源。虚拟机管理程序充当操作系统的操作系统,允许操作系统根据预定义的方案共享CPU、内存和外设资源。也就是说,管理者的管理者,因此得名hypervisor。虚拟机管理程序可以是动态的,具有灵活的CPU数量和内存使用,也可以是静态的,具有固定的CPU边界和内存分配。外围设备驱动程序可以是专用的,也可以在不同的操作系统之间共享。图1展示了用于分离的典型虚拟机管理程序架构。
图1:用于分离的典型虚拟机管理程序架构。
在软件架构中引入虚拟机管理程序以实现分离并非没有挑战,因为这会增加复杂性。虚拟机管理程序需要进行内存分离和保护,以及不同工作负载的调度。它还需要管理虚拟化客户操作系统的特权级别,同时平衡对硬件资源的访问。因此,管理程序成为系统中最有特权的软件。
这套复杂的软件将代码添加到系统最关键的部分,运行在硬件的最高特权级别。因此,虚拟机管理程序的实施需要安全可靠,否则为增强安全性而添加虚拟机管理程序将无法实现。因此,将具有大量代码库的管理程序添加到系统最敏感的部分,会增加添加漏洞的风险。例如,查看一个常见的开源虚拟机管理程序Xen和在国家漏洞数据库中找到的漏洞列表,可以发现数百个漏洞。当试图通过虚拟化来提高系统的安全性时,这不是一个非常值得信赖的虚拟机管理程序。
软件分离内核:隔离单个物理系统上的域
约翰·拉什比在1981年的一篇论文中提出的软件分离内核,旨在创建一个类似于物理分布式系统的环境。它确保每个应用程序域看起来像一个单独的、隔离的机器,只允许信息沿着已知的外部通信线路流动。内核通过在单个物理系统上创建隔离的域或分区来提供高级别的安全性。它严格分隔这些分区,防止一个分区中的软件影响另一个分区中的软件。这可以保护整个系统免受恶意软件和未经授权的访问。
基于微内核架构,分离内核提供最少的服务,并依赖单独的服务来获得额外的功能。这种设计减少了内核的攻击面,增强了它对危害的恢复能力。一个适当的分离内核提供了等同于硬件隔离的隔离,使其更不容易受到攻击。一些分离内核,如L4微内核,已经过正式验证,以确保正确操作。也有商业上可获得的分离内核,例如来自Green Hills Software的INTEGRITY实时操作系统。在分离内核实时操作系统环境中,应用程序级分离如图2所示。
图2:一个适当的分离内核提供了等同于硬件隔离的隔离,使得它不容易受到漏洞的影响。
当运行访问相同资源的多个操作系统时,一些实现可能会考虑保持系统分离的性能问题。例如,类型1虚拟机管理程序将需要两次上下文切换来在接收到中断时运行关键任务。第一个中断被传递给管理程序,然后被处理并传递给客户操作系统进行任务调度。分离内核解决方案只需要一个中断就可以调度关键任务。尽管这是特定于实现的,但虚拟化在性能方面并不总是免费的,尤其是对于关键任务或访问共享资源。因此,分离内核和虚拟机管理程序性能可能是重要的设计考虑因素,需要针对嵌入式系统中的特定用例进行仔细的架构设计。
为什么需要分离?
出于几个原因,分离关注点是必要的。在此分析中,列出了三个使用案例:
安全性:隔离同一操作系统的多个实例中的特定功能,以建立对特定资源的安全访问。
代码重用或遗留系统:使用多个不同的操作系统来重用功能,而无需重新架构或重新实现。
混合关键程度:采用多个操作系统来满足要求应用程序分离的安全或安保标准。
为了满足这些需求,通常会考虑虚拟机管理程序解决方案。然而,分离内核方法也可以满足这些需求,而无需借助虚拟化。对这三个不同的用例进行深入的分析,我们得到了以下结论。
保护对特定资源的访问
如果底层操作系统的访问控制方法足够安全,就可以在应用程序级别实现受保护的资源访问。探索替代的分离内核操作系统而不是虚拟化可以帮助避免潜在的陷阱。这种实现通常采用强制访问控制策略来实现这一点,并且可以利用操作系统机制来安全地共享这种资源,例如专用外围设备访问。
无需重新架构或重新实施即可重用
由于超出项目控制的因素,如第三方库或硬件限制,某些软件无法变得安全可靠。在这种情况下,需要对软件进行分区,以防止干扰系统其余部分的安全需求。虽然虚拟化是一种常见的解决方案,但它增加了不必要的复杂性。相反,有选择地修改代码并与第三方供应商合作可能更有效,尤其是当分离内核提供特定的可移植性层时。这种用例很难用分离内核来实现,但是为了使系统安全可靠,必须做出一些改变。
安全或安保标准
安全标准通常要求隔离,以避免干扰。与其引入一个完整的虚拟化层,另一个满足安全标准目标的隔离层可能就足够了。使用较小的安全可靠基础符合功能安全要求。例如,Green Hills Software的INTEGRITY RTOS分离内核被用于汽车、工业和航空电子等多个领域,提供多层安全保障。
虚拟化不是强制性的
因此,分离的所有三个用例都可以在没有虚拟化的情况下设计,重新思考软件架构。分离内核解决方案能够托管具有混合关键程度要求的应用程序,而无需虚拟机管理程序。POSIX、TCP/IP套接字和标准文件系统交互等应用程序兼容层是通过开放接口实现的。
分离内核遵循微内核架构,并通过隔离特性、实现强制设备访问控制和为替代软件架构提供基础来增强它。这种方法使得设计更简单,代码库更小,从而更容易确保安全性和不存在错误或漏洞。
此外,分离内核允许混合临界应用共存。分离内核的原则强制执行静态架构设计阶段,与安全和安保系统中的最佳实践保持一致。
为了实现安全的系统,软件工程师必须采用一种专注于架构特性的思维模式,并牢记分离。应用程序和服务之间清晰且受保护的接口至关重要,重要的是要认识到服务(如库或设备驱动程序)可以是分离内核环境中的独立应用程序。这需要考虑替代的软件架构路径,以实现适当的安全隔离。
总之,嵌入式虚拟机管理程序和分离内核都可以解决安全和安保方面的分离需求。但是,完全依赖虚拟机管理程序的默认方法应该受到挑战。从安全角度来看,考虑具有较小可信计算基础的分离内核是明智的选择,因为两种方法提供的功能是相同的。在设计中优先考虑增强的安全性而不是软件重用,这意味着用依赖于兼容层的更安全的分离内核替换遗留的或事实上的操作系统,从而实现更好的安全性和安全性设计。
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !