Ultrablue(User-friendly Lightweight TPM Remote Attestation over Bluetooth,即通过蓝牙进行的用户友好型轻量级 TPM 远程证明)是一个让个人用户能够通过手机执行启动状态证明的解决方案。它由两部分组成:一个是运行在计算机上、充当证明方的服务器;另一个是运行在可信手机上、充当验证方的图形客户端应用程序。
一个典型的用例是在解锁计算机之前验证启动链的完整性,以防止对无人值守的笔记本电脑发起离线攻击。它也可以用作固件升级后排查安全启动(secure boot)问题的调试工具,或作为磁盘加密的第二重因素。
安装完成后,Ultrablue 的经典控制流程包括以下几个步骤:
使用 Ultrablue 需要一台你想要证明其启动状态的 Linux 计算机,该计算机需配备 TPM 和蓝牙接口(通常为笔记本电脑),以及一部手机。
要将手机注册为验证方,请以注册模式启动服务器:
sudo ultrablue-server -enroll -pcr-extend
这将在终端上显示一个二维码。在手机上运行客户端应用程序,点击右上角的 + 图标以显示二维码扫描器。扫描后,将建立蓝牙低功耗(Bluetooth Low Energy)信道,注册将自动运行。成功后,客户端应用程序的主页上会出现一张设备卡片。
Ultrablue 可以在注册时使用随机生成的值扩展你的 TPM2 PCR9。如果你希望,例如,将磁盘加密绑定到 TPM2 密封(TPM2 sealing),这会很有用。在这种情况下,如果证明成功且受信任,ultrablue 将在启动时把 PCR9 寄存器扩展回去。 PCR 扩展是在注册时配置的(该标志在证明模式下无效):
sudo ultrablue-server -enroll -pcr-extend
如果你希望 ultrablue 作为启动流程的一部分执行,则必须重新生成 initramfs 以将其打包进去。我们通过提供 Dracut 和 systemd 集成来简化这一过程。另请参阅所提供的 VM 脚本,它们提供了一种更简单的测试方式。
首先,将 server/dracut/90ultrablue 安装到 /usr/lib/dracut/modules.d/ 模块目录中,
然后,你可以运行以下 dracut 命令:
dracut --add ultrablue /path/to/initrd --force
如果你在注册阶段使用了 --pcr-extend 选项,则需要添加 crypt dracut 模块,并将 server/dracut/90crypttab.conf 复制到 /etc/dracut.conf.d(以绕过 dracut bug #751640):
cp server/dracut/90crypttab.conf /etc/dracut.conf.d
dracut --add "crypt ultrablue" /path/to/initrd --force
请注意,这些选项不会持久保留,ultrablue 将在 initramfs 下次重新生成时被移除。有关持久配置,请参阅 dracut.conf(5) 手册页。
如果你已完成 initramfs 配置步骤,Ultrablue 服务器将在启动过程中自动运行。否则,请以证明模式手动启动服务器:
sudo ultrablue-server
启动后,服务器将等待验证方(手机)连接。在手机上,点击设备卡片上的 ▶️ 图标。这将运行证明。完成后,客户端应用程序将显示证明结果。
在启动时运行 ultrablue 的主要目的是将其用于磁盘解密。如何在 服务器 testbed 中实现这一点的示例已提供并记录在案。
Ultrablue 项目由 Loïc Buckwell 在 ANSSI(ssi.gouv.fr)开发,并由 Nicolas Bouchinet 和 Gabriel Kerneis 指导。
如果你有任何问题,请通过 Github issue 联系我们,或直接联系 Gabriel Kerneis [email protected]。