Quis custodiet ipsos custodes?
在开始之前,我想解释一下在信息安全上下文中使用的术语信任。在信息安全中,信任通常与看似合乎逻辑的含义相反。你想要更少的信任。系统中不受信任的组件是好的,不受信任的组件越多越好。信任意味着依赖。如果你信任一个组件,你就依赖它是诚实的、正确实施的和安全的。如果您不信任某个组件,则意味着即使妥协或恶意也不会允许它对您造成伤害。在安全计算机中,可信计算库(TCB) 是任何给定系统上可信代码的总和。TCB 越小越好。
这给我们带来了一个问题,谁在看守望者?在信息安全中,最高的守望者是 TCB。数量越少,系统就越安全。虽然不可能完全解决这个问题,但一种常见的有效解决方案是实现对硬件的信任,这比软件更难篡改。硬件验证少量软件。这个小软件验证更大的软件,等等。这将在本文后面解释。
回答您的问题
是否可以在硬件级别对 BIOS 芯片进行写保护,例如,使用具有与 BIOS Savior 相似外形尺寸但拥有物理上防止电流到达能够覆盖 BIOS 的电路的硬件开关的设备?
一些较旧的系统需要设置跳线才能写入 BIOS。现在,它几乎总是在软件中。您可能希望使用支持BootGuard的现代计算机来缓解这种情况。BootGuard 甚至在 BIOS 加载之前就在 CPU 中运行,并验证 BIOS 中的数字签名以确保它没有被篡改。仅当签名有效时才会恢复启动。
类似地,是否可以在硬件级别对处理器进行写保护,例如使用具有与上述 BIOS 类似的外形尺寸(经过必要修改后)的设备,即物理上位于主板上的 CPU 插槽和CPU 本身,并再次拥有一个硬件开关,以物理方式防止电流到达能够覆盖 CPU 固件的电路?
CPU 没有固件。事实上,它们根本没有永久存储。英特尔甚至在他们的许多文件中都有“波动性声明”,实质上是说二手 CPU 不会包含任何个人信息或来自其前任所有者的永久更改。例如,在Xeon E5 v4 数据表中,第 1.1.4 节包含以下内容:
1.1.4 Statement of Volatility (SOV)
The Intel® Xeon® Processor E5 v4 Product Family does not retain any
end-user data when powered down and / or the processor is physically
removed from the socket.
从技术上讲,CPU 确实有少量称为 OTP(一次性可编程)熔断器的永久存储,但它们用于永久更改一些基本设置,例如 BootGuard 是否处于活动状态。它不包含任何可执行文件。
您可能正在考虑microcode。微码是 CPU 可以通过微码表路由来修改某些指令行为的一种方式。这用于修复错误的指令,甚至完全禁用它们。但是,它不是内置在 CPU 中的,只能在运行时加载。一旦 CPU 复位,微码就会丢失。CPU 加载微码的主要方式有两种:
- BIOS,通常包含制造时的微码。
- 软件,下载最新的微码并插入。
微码使用只有英特尔知道的签名密钥进行验证。要插入恶意微码,您必须能够让您运行它并获得英特尔的签名密钥。
是否有任何服务器操作系统/发行版旨在支持这种开箱即用的配置?
Tails专门为此而设计。这是一个健忘的实时系统,仅将数据保存在内存中。它使用一种称为联合的特殊文件系统来融合其他两个文件系统。具体来说,它融合了存在于 USB 记忆棒或 DVD 上的只读 squashfs 和内存中的 tmpfs。对联合文件系统的任何更改都将写入 tmpfs。这提供了一个大的、可写的文件系统的错觉,而实际上只有一个永远不会改变,而另一个只存在于内存中。
是否有任何信息资源(书籍、网站)专门用于以这种方式部署和维护服务器?
您可能想研究无盘服务器。这些在集群和网络引导中很常见。他们拥有的所有数据,除非通过网络保存,否则在重新启动时会丢失。
其他可以修改的硬件
您提供的硬件列表并不详尽。现代主板上还有很多可以修改的地方,例如:
- HDD 和 SSD 都具有为其微控制器供电的可写固件。
- 选项 ROM几乎存在于每个 PCI 设备中,并由 BIOS 执行。
- GPU 固件通常不能通过软件写入,但它没有写保护。
还有更多,除非您有办法验证启动过程,否则尝试对所有内容进行写保护将是一场猫捉老鼠的游戏。
实测引导
通过一些努力,即使单独使用软件(在现代硬件上),您仍然可以验证硬件的完整性,从而大大减少您必须信任的组件数量。甚至可以为您没有物理访问权限的计算机远程执行此操作!这称为远程证明。通常,这是使用 TPM 完成的。
TPM 是一个小型硬件组件(尽管通常在较新处理器的固件中进行模拟),旨在防篡改且安全。它的功能很少,只能做一些事情。首先,它用于组合系统各个组件的哈希值,当哈希值与已知值匹配时,它们将自行解锁(解封)。各种软件将系统部分的副本发送到 TPM 以进行散列。因此,如果系统的任何组件发生变化,TPM 的哈希值也会发生变化。这一切都始于受信任的 CRTM(用于测量的核心信任根),它通常是 BIOS 的只读组件,将 BIOS 本身的哈希发送到 TPM。如果 CRTM 和 TPM 受信任,则系统的其余部分不受信任。
TPM 验证系统的几个不同组件并在其中存储PCR。每个 PCR 都有不同的目的,并验证系统的不同部分(取自另一篇文章):
PCR 0 to 3 for the BIOS, ROMS...
PCR 4 - MBR information and stage1
PCR 8 - bootloader information stage2 part1
PCR 9 - bootloader information stage2 part2
PCR 12 - all command-line arguments from menu.lst and those entered in the shell
PCR 13 - all files checked via the checkfile-routine
PCR 14 - all files which are actually loaded (e.g., Linux kernel, initramfs, modules...)
PCR 15 to 23 are not used for SRTM
要记住的重要一点是,TPM 无法对任何检测到的篡改采取行动。事实上,它根本无法定位在 LPC 总线上。它所能做的就是验证硬件是否处于正常状态,否则拒绝自行解封。密封的数据可能包括磁盘加密密钥(确保系统在系统被篡改时无法启动),或只有您知道且攻击者无法猜测(因此不可欺骗)的秘密,例如字符串(是 ITL 的 Anti-Evil Maid 的工作原理)。
此过程的结束是您已将整个系统的 TCB 减少到小型只读 CRTM 和安全 TPM 芯片本身。
资源/指针
由于您要求提供一些资源,我将研究以下事项以提高 COTS 工作站的安全性(减少可信计算基础):
- 实测引导
- 远程证明
- 可信平台模块 (TPM)
- 用于测量的静态信任根 (SRTM)
- 动态测量信任根 (DRTM)
其他一些可能相关的问题,可以帮助您理解此过程:
TL;博士
写保护是一场猫捉老鼠的游戏。唯一实用的解决方案是使用测量引导。