lwn.net需要你!没有订阅者,LWN将根本不存在。请考虑注册订阅并帮助保持LWN出版
自由软件和安全社区最近曾在操作系统下面运行的计算机的元素。这些专有的固件组件通常是不可能延伸的,并且已经暂时怀疑(在几种情况下且伴有了且有关有关的安全问题。 LinuxBoot项目正在使用Alinux内核工作Toreplace这个复杂的,专有的,并且很大程度上的固件。这具有额外的好处,可以使用从Linux获得良好测试的驱动程序替换现有驱动程序的固件。
要了解LinuxBoot和问题,我们努力解决,我们首先讨论计算机实际启动的方式。我们通常会想到一个runningsystem,包括硬件,操作系统(OS),和申请。但是,出于多种原因,硬件和操作系统之间存在多个层次。大多数UEFI的大多数用户区域软件(替换旧BIOS);对于许多系统,ITPREPLES系统运行并加载引导加载程序。但是,这些必要的功能只是冰山的Tipof。即使计算机完成加载TheOS后,也有多个嵌入式系统,也与操作系统完全分开。最值得注意的是,Intel ManagementEngine(ME)运行完整的MINIX操作系统,而系统管理示例(SMM)用于以完全不可见的方式运行某些事件(例如笔记本电脑LID GESSLOSED)的代码。
所有这些都加入了LinuxBoot项目' S语句"硬件和Linux之间至少2.5内核,&#34 ;;那些内核统称固件。许多这些都是令人惊讶的复杂性,拥有完整的网络堆栈和广泛的软件驱动程序。固件对自由软件交通的主要关注点,因为它将所有在庞大的代码基础上运行的计算机都留下了专有的和未经审核。由于固件为强大,持久的漏洞利用和rootkits提供了许多机会,因此对大型技术概念和云提供商来说也是一个主要风险。除了这些实质性的疑虑之外,靴子早期性能和灵活性的改善也是这种简化和移动Topen来源的主要动力。
为了实现更优雅和开放的解决方案,谷歌推出了名为NERF的APRoRoject,或者在11月份LWNCOVERED的非扩展程序固件。 nerf的主要目标是通过删除几乎所有不需要启动操作系统的功能来减少功能攻击表面(尽管这是可能的extent的限制)。 nerf由a" fullstack"剥离的EFI固件,Linux内核和Aninitramfs的解决方案与Go Go的工具。虽然这些组件都使存储在ROM中的Upone捆绑包,但它们已被分成单独的项目:Linuxboot是固件和内核,而使用Go工具的用户-spactinitramfs映像作为U-Root可用。由于这种模块化,Linuxboot可以与各种initramfs图像一起使用。
它更容易了解这些组件如果我们先向启动过程较近时如何合适。四个主要的计算机靴。安全阶段(SEC)和预EFI初始化阶段(PEI)负责低级操作,以准备硬件,并且非常具体于它们为其实现的硬件。在这些替代之后,驱动程序执行环境(DXE)加载各种驱动程序,然后启动设备选择(BDS)相位可以开始。
BDS阶段是我们作为用户所知的大多数情况发生的地方:搜索存储设备的系统,这些设备被检查ForbooOloLopers,然后启动其中一个引导加载程序。这种声音,但是,由于许多不同的存储设备和引导架构,因此在实践中可能相当复杂。为管理此复分分复性,先前的DXE阶段在大部分系统上加载数百个驱动程序,为大多数设备的支持实施终遗工系统将能够使用。此外,系统中的硬件可以难以提供"选项roms"其中包括额外的驱动因素,以在BDS之前被掩盖和执行。所有这些都是潜在的脆弱性,而且它易于想象基于大量隐藏的UEFI的延伸性令人难以置信的攻击攻击。
这是Linuxboot进入的地方。它在DXESTAGE期间开始,导致大多数驱动程序(及其关联的攻击曲面)未加载。相反,Linux内核被加载好像ITWER驱动程序一样。这带来了几个直接的优势。第一个,Andperhaps最令人兴奋,是Linux内核是一个开源系统,这一直是经过大量的安全审查和接收修复。与现有FII驱动程序的情况几乎是完全相反的情况。第二个是实际改进:在本领上运行Linux提供了一种标准化和记录良好的编程环境,用于开发进一步的模块。这使得延伸UEFI和#39的能力远远差不多。
通过在DXE期间加载,Linuxboot在uefi的前两个阶段之后运行,但在此之后接管,替换UEFI驱动程序。因此,完全取代了大部分靴子进程,这是通常仍然将&#34转化为" TheBIOS"由于Linuxboot处理了启动过程的一部分,其中overi / o设备可用,因此它消除了UEFI的部分,具有最初的安全性和稳定性风险。
单独的Linux内核不是很多使用;要实现实际的SystemFeatures,需要一个Linux用户空间。用户空间是在initRamfs文件系统中提供的,就像标准的Linux BootProcess一样。目前有几个可用于用户 - Spacetools的选项。一个是U root,它是谷歌开发的原始化,作为NERF项目的一部分。 U-Root是一个包含在Go编程语言中完全写入的二进制文件的TinyImage,并且可以选择作为单个可执行二进制出口负载和执行时间构建。这使得它类似于BusyBox。 U-Rootis通过简单地使用KEXEC执行其内核来启动最终操作系统的完整的Linux系统。
用户空间的另一个值得注意的选项是头部,这是一个专门设计用于安全的Linux系统,即使攻击者隐藏对系统的访问。它通过基于TPM的硬励将和对固件攻击的广泛保护实现了这一点。头部令人遗憾地设计用于直接从CoreBoot启动,但也已移植到Workas一个Linuxboot initramfs。
基本上,可以进行足够紧凑的Linux工具集以适合可用ROM,可以内置于LinuxBoot的InitRamfs中,包括BusyBox和其他最小的用户空间项目。 ForeInitRamfs图像的可用性强调Linuxboot的核心功能:它是一个开单次。 Linuxboot源本身不仅是可用的,社区是向外开发利用Linuxkernel的电源的InitRamfs映像,以将固件扩展到几乎不可能的新方向,这是由于UEFI实现的封闭性质。
由于在前博进程早期可用的环境的限制,LinuxBoot内核和用户空间将受到强度下降。您希望使用作为实际计算环境。相反,Linuxboot可以执行将该系统带到可用状态的后续步骤。在许多情况下,这与搜索标准Linux内核的可力存储设备一样简单,并且使用KUXEC移交OverControl,但LinuxBoot也可以实现更复杂的引导过程。最终操作系统的一个明显的应用程序验证,在可信计算系统中构建另一个联机。然而,天空是极限,并且在此可能性很多:例如,改进了网络的启动,例如不寻常的存储安排和高级安全性控制器。
与LinuxBoot initRamfs相似的依赖于Linuxboot kernel tostart,所以linuxboot内核也取决于博波进程中的前一步。这是可能涉及CoreBoot的地方。 Linuxboot andCoreboot不是竞争对手,而是他们解决了Oooting的不同阶段。请记住,UEFI引导进程由四个阶段组成,其中第三个(驱动程序执行环境或DXE)是Linuxboot的重点。 CoreBoot是第一个替代的实现,它可以替换主板Vendor提供的UEFI固件。 CoreBoot仅支持窄范围的硬件,但是,当它可以使用LinuxBoot使用时,它可以实现几乎完全打开的BootProcess。
Linuxboot本身承诺比CoreBoot更广泛的硬件支持,因为LinuxBoot内核和initramfs通常不需要为硬件定制 - 这是inthinuxboot旨在在UEFI引导的前几个阶段开始后开始的原因的主要部分。这就是UEFI固件来处理特定硬件的步骤,据认领者倾向于保持交易秘密。
Linuxboot已在Chromebook上演示,并具有用于消费者计算机的特性。 Linuxboot Atpresent的主要目标是服务器。它最近在大数据中心环境中引起了相当的关注; Open ComputeProject,维护开源基础架构设计的开放源基础架构设计,其中包括LinuxBoot Developer Ron Minnich所在的IffaceBook中使用的,作为其固件的两个引导率之一。服务器供应商的Horizo n计算计划很快释放WinterFellserver,一个开放的计算项目实现,用LinuxBootand nerf船用。考虑到Facebook'在开放计算中的重型投资,这意味着在Google之外的Linuxboot即将在Google之外。
Linuxboot项目最近成为Linuxfoundation项目。该项目的贡献者包括Google和Facesbook与较小的公司Horizo n Computing,两个Sigma,AND9ELEMENT。通过该项目吸引了兴趣水平的判断,这个名单似乎可能会增长。
Linuxboot是一个有希望的开发,任何人都沮丧,他们在其计算机上的计算机上沮丧,攻击表面和维护复杂性都会带来。项目'在固件安全性的工业支持和ageneral浪潮中可能会使我们的基础设施牢固安全,并使我们的设备更接近我们的控制。
( 登录后发表评论)
谢谢你写这个。我们是,GNU / Linux Aficionados正在等待它,并希望这个项目看到日光。我的意思是,它应该具有现实生活的实现和可用性。从启动过程的开头拥有这种东西非常令人兴奋。它肯定会允许别人调查这个过程,并且可能会促进他们的理解更多。我亲自保持手指越过。 GNU / Linux成为一个引导加载程序... Whoa! kexec很好,但在早期阶段使用这是一个严重的凉爽的步骤。杂乱,散发会消失,奥术,不透明的东西不会阻碍任何东西。
将Linuxboot与Petitboot比较,这将是有趣的,这是较早尝试使用Linux作为引导加载程序。
这里的一个切向想到的,但是linuxboot是足够的,足以替换痛苦的长Memtest进程大多数服务器默认情况下? 它' d表示,说,验证前512MB是否处于工作状态,然后将该处理到主内核中的处理,该内核在后台完成。 这听起来很棒。 和魔鬼详细信息......在Linuxboot之前,您需要在LinuxBoot之前拥有一些最小的固件部分。 因此,您支持CoreBoot支持的所有50(?)主板,而99.99%的其他电脑只能与他们写入闪存(旧式BIOS或EFI)。