首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TPM进行全磁盘加密的正确方法

使用TPM进行全磁盘加密的正确方法
EN

Security用户
提问于 2016-05-27 06:40:43
回答 2查看 54.8K关注 0票数 28

目前,我正在使用TPM和LUKS设置一个BitLocker等价物。我有基本的正确,我能够测量引导过程和密封FDE键使用TPM。

每次更新敏感部件(固件、引导程序、内核)时,都会使用以下命令将加密密钥密封到新的系统状态:

代码语言:javascript
复制
tpm_sealdata -p 0 -p 1 ... -p 11 -p 13 -i <keyfile> -o <sealed keyfile>

当系统启动时,以下内容用于解封密钥,然后将密钥传递给LUKS以装入加密的卷:

代码语言:javascript
复制
tpm_unsealdata -i <sealed keyfile> -o <temporary keyfile stored in RAM>

这是可行的,并具有所需的行为--如果启动过程被篡改(假设将init=/bin/sh添加到内核命令行以绕过根密码),则TPM拒绝打开密钥,因此系统是安全的。

然而,我有几个问题:

首先,每次执行密封/解封操作时,TPM都需要SRK密码。我想避免这种情况,让它的行为就像BitLocker一样,它是透明的,不会提示任何东西。我已经考虑过使用默认的SRK密码,但是很明显它不安全,但是这些答案无法说明如果PCRs与密匙被封时的状态不匹配,知道密码的攻击者是否可以解封密钥。

另一个问题是我应该使用哪种方式来密封密钥--我的方式涉及tpm_sealdata/tpm_unsealdata,而另一个项目tpm-luks则使用tpm-nvread/tpm-nvwrite。我想知道不同之处,以及一条路是否比另一条更安全。

EN

回答 2

Security用户

回答已采纳

发布于 2016-06-03 17:12:43

首先:没有一个系统是100%安全的,但使用TPM比根本没有TPM要好。TPM芯片只是某种加密存储,驻留在支持受信任平台环境的计算机主板上,并让BIOSes准备处理它。

聚合酶链反应是通过TPM_Extend操作处理的具有特定功能的寄存器。它们不能“设置”,只能扩展(new_hash= 年长的_散列/新_量测)。

TPM具有静态信任度量根(SRTM)和动态信任度量根(DRTM),两者的结合创建了安全环境。这家伙解释得很好这是怎么做的。它是固定项目和动态项目之间的信任链。

回到PCRs,它们是独立于平台的寄存器,最常见的是:

代码语言:javascript
复制
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 commandline 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 

英特尔笔记本电脑通常使用前16个寄存器,但它可以扩展到其他软件/用途。

在向TPM写入信息(密封)时,您可以添加一个存储根键(SRK),它在某种程度上是“管理密钥”,用于向该存储添加其他密钥。根据手册,使用-z将设置TSS_WELL_KNOWN_SECRET (20 zero bytes)

代码语言:javascript
复制
-z, --well-known
    Use TSS_WELL_KNOWN_SECRET (20 zero bytes) as the SRK password. 
    You will not be prompted for the SRK password with this option. 

因此,将此SRK设置为默认机密(TSS_WELL_KNOWN_SECRET)并不足以攻击某个人,因为只有当当前的PCRs与用于密封数据的PCRs匹配时,TPM才能被解封。此外,一些PCR处理发生在启动时(BIOS),很难操纵这些操作,从而创建“假的”PCRs。BIOS是PCRs在进程其余部分发生之前被视为零的唯一地方。

唯一可行的攻击是将BIOS和PCR之间的MITM通信变为零PCR,而不重新启动机器,使系统处于“可信”状态。这种攻击被称为TPM复位攻击

因此,鉴于我们在上面看到的一切,只要BIOS进行了最初的几次测量,就很难伪造可信的引导过程。这里的关键假设是,如果不重新启动TPM所驻留的整个平台,PCRs就不可能被轻松重置。如果攻击者能够监视BIOS发送给PCRs的测量结果(例如,使用逻辑分析器,请参阅本文),并且能够在不重新启动计算机的情况下将PCRs归零,那么她可以在任何配置中获取一个平台,并将其置于“可信”状态。因此,最困难的部分是让TPM在不关闭整台机器的情况下进行复位。值得一提的是,我们还研究了在内存和其他类似的东西被测量后改变运行系统的问题,但是由于内存和硬盘所处的总线的速度,这是一项棘手的工作。攻击较慢的公共汽车要容易得多。TPMs通常驻留在低针计数(LPC)总线上。LPC总线支持地面驱动复位线。这意味着当总线上的这条特定线路被驱动到地面时,总线上的每一个设备都应该重置。连接到此总线上的其他设备包括BIOS、旧式键盘和鼠标控制器。下面的视频显示,驾驶这条线路确实是可能的,而且相当容易做到。请注意,在视频中,我们正在通过远程ssh会话访问有关计算机。这是因为键盘和鼠标控制器在我们驱动复位引脚时会被重置,但是网卡没有。这次攻击的更多细节(和其他!)我的高级荣誉论文:可信平台模块的安全评估,达特茅斯学院计算机科学技术报告TR2007-597。

请注意,这是涉及可信计算的所有事物的过度简化版本。请查看TPMv2 2体系结构文档,以获得有关在可信环境设置期间在bios、硬件和软件之间发生的所有操作的更多信息。

tl;dr:使用默认存储根键(20个字节)不足以创建一个不安全的系统。

相关资料:

票数 16
EN

Security用户

发布于 2022-02-03 14:44:40

我认为本教程是非常有用的。

其核心思想如下:

使用Linux TPM2 &TSS2 2软件,您可以使用tpm2_create创建一个将该秘密绑定到聚合酶链反应状态的秘密。然后,当您需要加密/解密磁盘时,您可以使用tpm2_unseal命令检索密钥,该命令为解密/加密目的提供此密钥作为输入。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/124338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档