TPM 2.0实例探索3 —— LUKS磁盘加密(4)
迪丽瓦拉
2024-05-28 17:14:20
0

接前文:TPM 2.0实例探索2 —— LUKS磁盘加密(3)

本文大部分内容参考:

Code Sample: Protecting secret data and keys using Intel® Platform...

二、LUKS磁盘加密实例

4. 将密码存储于TPM的PCR

TPM平台配置寄存器(PCRs)用于防止出现这种情况:攻击者修改了系统启动参数或者启动到他们选择的操作系统以访问敏感数据。TPM PCRs的有效使用需要系统固件、boot loaders、操作系统内核和应用的协作。没有固件、驱动和软件对于TPM的配置,TPM将只能空位于I/O总线上而什么也做不了。

TPM PCRs用于度量引导组件,使用诸如SHA-256的安全哈希算法。当系统重启时,TPM PCRs默认恢复到0值。当系统引导时,对于诸如固件、BIOS、OS loaders等关键系统组件的度量被扩展到PCRs中。扩展一个PCR是一种只加操作,需要通过I/O与TPM交互。由于不可能将PCR设置为用户指定的值,也不可能“退回”I/O,因此TPM PCRs可以证明系统启动顺序以及平台的状态,直到PCR检测停止。例如,PCR0包括了系统固件和BIOS的度量,但不包含操作系统boot loader或内核。使用PCR0的结果是本例将只保护固件替换攻击,假如原始固件正确地进行了测量,并且假设替换固件没有伪造TPM度量 — 一个需要单独缓解的攻击。

在实际操作中,一个有效的PCR集必须被足够完整以证明当前运行的代码以及设计者认为安全关键的任何预先运行的代码。  TCG PC Client Specific Implementation Specification for Conventional BIOS 只明确规定了PCRs 0-7、16和23的使用方法。系统启动中和启动后的PCR用法是特定于操作系统的。

更进一步的解决方案包括以下两个额外的步骤:

  1. 使用PCRs作为TPM 密封对象的代理身份验证。
  2. 在解封密钥文件之后扩展密封的PCRs,以便它不能在当前引导上成为未密封增益。

研读更多关于TPM命令的信息,在以下节中:tpm2_startauthsession, tpm2_policypcr, tpm2_flushcontext, tpm2_pcrread, 和 tpm2_pcrextend.

以当前位于sha256 bank中的PCR0的值创建一个PCR策略:

(1)启动一个试验会话并保存会话数据到一个文件中

命令如下:

tpm2_startauthsession --session=session.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_startauthsession --session=session.ctx
$ 
$ ls
session.ctx
$ ls -l session.ctx 
-rw-rw---- 1 root root 467  3月 2日 17:06 session.ctx

(2)创建一个包含指定PCR值的策略

命令如下:

tpm2_policypcr -Q --session=session.ctx --pcr-list="sha256:0" --policy=pcr0.sha256.policy

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_policypcr --session=session.ctx --pcr-list="sha256:0" --policy=pcr0.sha256.policy
4bc350fced1d9ec748eb9fac5576eed06178b715969525d1f967451ff89395bf$ ls
pcr0.sha256.policy  session.ctx
$ ls -l 
总计 8
-rw-rw---- 1 root root  32  3月 2日 17:13 pcr0.sha256.policy
-rw-rw---- 1 root root 467  3月 2日 17:13 session.ctx

(3)移除一个指定的句柄,或者所有与一个临时对象相关的上下文,从TPM中加载会话或保存会话

命令如下:

tpm2_flushcontext session.ctx

实际命令及结果如下:

$ sudo /usr/local/bin/tpm2_flushcontext session.ctx
$ 

相关内容