2011年,Facebook宣布了开放计算项目,旨在围绕数据中心硬件的开源设计和规范形成一个社区。Facebook分享了其硬件规格,与现有的数据中心相比,这使得能耗降低了38%,成本节省了24%。6 Facebook和其他超大规模公司(谷歌、微软等)捐赠给开放计算项目的是他们解决大规模运行数据中心带来的痛苦问题的方案。
从那时起,该项目已扩展到开放数据中心的各个方面:基板管理控制器(BMC)、网络接口控制器(NIC)、机架设计、电源母线、服务器、存储、固件和安全。本专栏重点介绍BMC。这是一个复杂主题的介绍;有些章节只是触及表面,但目的是提供开源BMC生态系统的全貌,首先简要概述BMC在系统中的作用,触及围绕BMC的安全问题,然后深入探讨在开源生态系统中开发的一些项目。
如果说CPU是主板的大脑,那么BMC就是脑干。它监控和管理计算机或硬件设备的物理状态。这种状态包括温度、湿度、电源电压、风扇速度、远程访问和操作系统功能。BMC在历史上一直是一个基于SuperH或ARM的SoC(片上系统),其常见功能包括但不限于
• 用于以太网的RMII(精简媒体独立接口)和RGMII(精简千兆媒体独立接口)。
• 带有SPI(串行外围接口)NOR的启动闪存。(NOR和NAND是非易失性闪存存储器的类型;区别在于所用逻辑门的类型。)
• PCI(外围组件互连)高速。
• 用于与主机通信的LPC(低引脚数)总线。英特尔LPC的后继者是eSPI(增强型串行外围接口总线)。
BMC通常使用IPMI(智能平台管理接口)与外部世界(或数据中心控制网络)通信,IPMI是一种基于消息的硬件级接口规范,用于管理和操作计算机系统。它独立于操作系统、服务器的CPU和固件运行,这使得管理员无需操作系统或任何系统管理软件即可管理系统。管理员还可以利用IPMI的本地网络来获取对原本无法访问的远程计算机的控制台。
IPMI堆栈的设计没有考虑到安全性(IPMI规范要求通过堆栈提供用户密码的哈希值)。假设数据中心控制网络是隔离且受信任的,这就是IPMI因安全漏洞而臭名昭著的原因。2 IPMI堆栈和BMC中的漏洞是灾难性的,因为它们负责许多特权操作。改进IPMI安全性在历史上一直被忽视,因为大多数IPMI软件都是专有的。
BMC自身也存在很大程度上是专有软件和漏洞的问题。最近一个值得注意的BMC漏洞是USBAnywhere,3 由Eclypsium的首席工程师Rick Altherr发现。在Supermicro服务器上,攻击者可以使用USBAnywhere远程连接到服务器,并将任何USB设备虚拟挂载到服务器。因此,攻击者可以加载新的操作系统映像或植入固件后门,以方便持续的远程访问。在披露时,发现有47,000个易受攻击的系统暴露在公共互联网上。另一个有趣的漏洞是Pantsdown,1 它允许从主机读取和写入BMC的地址空间。Pantsdown是一个因请求功能而导致漏洞的例子。
但是等等,情况变得更糟。正如Trammell Hudson在2018年第35届混沌通信大会上的Modchips of the State演讲中指出的那样,7 BMC通常可以通过SPI(串行外围接口)访问主机固件,并通过DMA(直接内存访问)访问主机内存。BMC获得DMA访问权限是因为它在PCIe(外围组件互连高速)总线上作为设备。这意味着它可以将代码注入到主机的固件中。许多BMC固件也缺乏安全启动的概念。这使得BMC成为黑客的主要目标。在这里,我强调我在之前一篇关于开源固件的文章中提出的观点:5 最令人担忧的问题是,以最高权限运行的代码具有最低的可见性和可检查性。
数据中心开源化的趋势导致了许多创新的BMC项目。
2014年,Facebook决定通过启动一个开源BMC软件项目来解决专有BMC软件的问题。4 2015年,IBM和Rackspace合作解决他们自己的项目中的相同问题。9 这两个项目都名为OpenBMC,最终合并为固件社区今天熟悉的OpenBMC项目(https://github.com/openbmc/openbmc)。合并后,OpenBMC项目的创始组织是微软、英特尔、IBM、谷歌和Facebook。OpenBMC对各种BMC的支持范围最广。
OpenBMC项目包含u-boot,这是一个开源引导加载程序,它引导一个带有最小根文件系统的Linux内核,该文件系统包含运行OpenBMC所需的所有工具和二进制文件。OpenBMC采用面向服务的设计方法。服务由systemd启动和维护,并通过dbus相互通信。为服务进行设计对于多个协作者和供应商为单个BMC实现做出贡献来说是一种简单的方式。这允许每个为代码库做出贡献的供应商拥有单独的守护程序,他们可以打开这些守护程序以在其特定的OpenBMC发行版中发布;然而,这也使得BMC软件更难以调试、审计和投入生产。
在OpenBMC之后,出现了u-bmc(https://github.com/u-root/u-bmc),这是一个由谷歌的Christian Svensson启动的软件项目。u-bmc用Go语言编写,旨在实现更精简的BMC软件架构,通过用gRPC替换IPMI来挑战现状。从安全角度来看,删除IPMI使u-bmc具有挑衅性,因为攻击面减少了。与OpenBMC不同,u-bmc在DRAM初始化后直接从ASPEED启动代码引导Linux内核,从而消除了对u-boot等引导加载程序的需求。截至本文发布时,u-bmc支持基于ASPEED AST2400和AST2500的BMC,但计划在未来支持更多,并始终欢迎贡献。如果您有支持coreboot的Supermicro X11SSH主板,则可以使用u-bmc作为您的BMC软件。
不仅围绕BMC的软件已经开源,硬件也已开源。Dropbox的Eric Shobe和Jared Mednick分析了所有BMC系统拓扑及其在平台之间的差异。结果是RunBMC,一种用于BMC的标准硬件接口。Dropbox在2019年8月向开放计算项目捐赠了RunBMC硬件规范的第1版,以及用于Nuvoton NPCM75OR和ASPEED 2500 RunBMC模块的两个参考板。8
RunBMC设计允许更换BMC,使其与主板的其余部分分离,从而隔离和锁定BMC子系统。在此之前,BMC是焊接在主板上的。从安全角度来看,这是引人注目的,因为重点转移到单个可更换的BMC卡上,如果损坏,可以轻松更换、更新为不同版本或与其他安全功能集成。例如,信任根,即在执行之前验证系统软件的可信源,可以保护BMC卡和主板其余部分之间的I/O。这也允许用户轻松地在常见的BMC制造商ASPEED和Nuvoton之间切换。有趣的事实:Sun还在其ILOM(集成Lights Out管理器)中使用了BMC互连,Dell在其DRAC(戴尔远程访问控制器)中使用了BMC互连,HP在其iLO(集成Lights-out)中使用了BMC互连,IBM和联想在其IMM(集成管理模块)中使用了BMC互连——然而,今天大多数产品都不以这种方式发货。
OpenBMC为BMC固件和硬件的开源化奠定了基础。这催生了一系列其他创新被开源,并且可以期待更多。这个领域正在涌现许多很棒的项目,我很幸运能够 spotlight 正在完成的惊人工作。开源堆栈最低级别的软件提供了对系统中以最高权限运行的代码的可见性。我们只能希望这将导致更多人审查代码,鼓励更精简的架构,并减少系统在未来被“Pantsdown”抓住的风险。
非常感谢开源生态系统中的个人帮助我了解他们的项目:Rick Altherr、Chris Koch、Christian Svensson、Ron Minnich、Trammell Hudson、Eric Shobe和Jared Mednick。期待开源固件的未来。如果您有兴趣帮助这里提到的任何项目,请查看GitHub。
1. 常见漏洞和暴露。CVE-2019-6260;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6260。
2. 常见漏洞和暴露。智能平台管理接口;https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=ipmi。
3. Eclypsium。2019年。BMC中的虚拟媒体漏洞使服务器容易受到远程攻击;https://eclypsium.com/2019/09/03/usbanywhere-bmc-vulnerability-opens-servers-to-remote-attack/。
4. Fang, T. 2015年。介绍“OpenBMC”:用于下一代系统管理的开放软件框架。Facebook Engineering;https://engineering.fb.com/open-source/introducing-openbmc-an- open-software-framework-for-next-generation-system-management/。
5. Frazelle, J. 2019年。开源固件。acmqueue 17(3); https://queue.org.cn/detail.cfm?id=3349301。
6. Heiliger, J. 2011年。通过开放计算项目构建高效的数据中心。Facebook;https://127.0.0.1/notes/facebook-engineering/building-efficient -data-centers-with-the-open-compute-project/10150144039563920/。
7. Hudson, T. 2019年。国家模组芯片;https://trmm.net/Modchips#Defenses。
8. Shobe, E., Mednick, J. 2019年。RunBMC:OCP硬件规范解决了数据中心BMC的痛点;https://blogs.dropbox.com/tech/2019/08/runbmc-ocp-hardware-spec-solves-data-center-bmc-pain-points/
9. Sullivan, A. 2015年。OpenPOWER & Open Compute:使用Barreleye全速前进;https://blog.rackspace.com/openpower-open-compute-barreleye。
现代时代的安全性
安全地运行需要整个syscall接口的进程
Jessie Frazelle
https://queue.org.cn/detail.cfm?id=3301253
开源软件商业化
许多人尝试过,少数人正在成功,但挑战依然存在。
Michael J. Karels
https://queue.org.cn/detail.cfm?id=945125
Kode Vicious
GNL不是Linux
名字里有什么?
https://queue.org.cn/detail.cfm?id=2909572
Jessie Frazelle 是一位独立顾问。她之前曾在Docker核心团队工作,之后在谷歌和微软工作。她热爱计算机,并深入研究堆栈的各个层次。这只是她学习新事物的众多冒险之一。
版权所有© 2019,所有者/作者持有。出版权已授权给。
最初发表于Queue vol. 17, no. 5—
在数字图书馆中评论本文
Amanda Casari, Julia Ferraioli, Juniper Lovato - 超越存储库
关于开源的大部分现有研究选择研究软件存储库而不是生态系统。开源存储库最常指的是版本控制系统中记录的工件,偶尔包括围绕存储库本身的交互。开源生态系统指的是存储库、社区、他们的交互、激励、行为规范和文化的集合。开源的去中心化性质使得对生态系统进行整体分析成为一项艰巨的任务,社区和身份以有机和不断发展的方式交叉。尽管存在这些复杂性,但对软件安全和供应链日益增加的审查使得在进行关于开源的研究时,采取基于生态系统的方法至关重要。
Guenever Aldrich, Danny Tsang, Jason McKenney - 给仍然不明白的项目经理的三部曲
本文考察了系统采购工具箱中的三种工具,这些工具可以加速开发和采购,同时减轻项目风险:OSS、开放标准和敏捷/Scrum软件开发流程都是国防部采购项目管理工具箱的强大补充。
Jessie Frazelle - 开源固件
开源固件可以通过使固件的行为更加可见且不太可能造成危害,从而帮助将计算带到一个更安全的地方。本文的目标是使读者感到有能力向供应商提出更多要求,这些供应商可以帮助推动这一变革。
Marshall Kirk McKusick, George V. Neville-Neil - FreeBSD 5.2中的线程调度
一个繁忙的系统每秒做出数千个调度决策,因此做出调度决策的速度对于系统的整体性能至关重要。本文 - 摘自即将出版的书籍“FreeBSD操作系统设计与实现” - 使用开源FreeBSD系统为例,帮助我们理解线程调度。最初的FreeBSD调度程序是在1980年代为大型单处理器系统设计的。尽管它在今天的环境中仍然运行良好,但新的ULE调度程序是专门为优化多处理器和多线程环境而设计的。本文首先研究了最初的FreeBSD调度程序,然后描述了新的ULE调度程序。