硬件级别的写保护以确保安全

信息安全 硬件 身体的 BIOS 开机 固件
2021-08-18 08:30:27

在我看来,为了最大限度地提高服务器安全性,除了在软件中实施的通常安全措施之外,还应该防止覆盖服务器系统的某些部分,这样只有物理访问才能绕过这种写保护。

基本原理

如果成功获得任意代码执行权限的远程攻击者可以修改以下内容,则该服务器的安全性明显低于此类攻击者无法修改它们时的安全性:

这是深度防御的基本原理。

问题

我的问题如下:

BIOS

是否可以在硬件级别对 BIOS 芯片进行写保护,例如,使用具有与BIOS Savior相似的外形尺寸但拥有物理上防止电流到达能够覆盖 BIOS 的电路的硬件开关的设备?(注意:美国国家安全局的“ANT 部门 [有]明显偏好在 [in] BIOS 中植入他们的恶意代码。”

中央处理器

类似地,是否可以在硬件级别对处理器进行写保护,例如使用具有与上述 BIOS 类似的外形尺寸(经过必要修改后)的设备,即物理上位于主板上的 CPU 插槽和CPU 本身,并再次拥有一个硬件开关,以物理方式防止电流到达能够覆盖 CPU 固件的电路?

操作系统存储

通过使用只读光盘驱动器(例如 CD-ROM、DVD-ROM 等),已经可以在硬件级别对包含操作系统安装的存储介质进行写保护。其他选项包括写保护的 USB 闪存驱动器,或安装在 USB 端口和包含操作系统的驱动器之间的取证 USB 写阻止程序。

尽管Live CD通常用于测试或实验,但这似乎不是部署中的常见做法。也许这是因为系统管理员不希望每次操作系统更新都必须获得对每台服务器的物理访问权限,即使只是更换 DVD-ROM 并重新启动的问题;但我不同意这种偏好:对我来说,安全性更重要。

  • 是否有任何服务器操作系统/发行版旨在支持这种开箱即用的配置?
  • 是否有任何信息资源(书籍、网站)专门用于以这种方式部署和维护服务器?
2个回答

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;博士

写保护是一场猫捉老鼠的游戏。唯一实用的解决方案是使用测量引导。

BIOS

我使用过的大多数内存芯片都有一个选择写入模式的 W 或 R/W 引脚。在物理上将其与适当的逻辑级别联系起来应该可以解决问题。

写保护的 USB 驱动器

我对这个有点怀疑。我已经实现了微控制器<->SD 卡接口,并且“写保护”位完全在软件中处理,因此您必须相信计算机的某些部分无法在那里写入。我不知道USB闪存驱动器在这方面是否相同,但请记住这一点 - 硬件开关可能仍然具有软件保护。