本仓库包含简单的概念验证代码,利用了一年前在 https://oddlama.org/blog/bypassing-disk-encryption-with-tpm2-unlock/ 首次描述的一个常见弱点。虽然它专门针对 IncusOS,但该攻击对大多数现代 Linux 系统都具有相当的通用性。
如果你将 LUKS 加密绑定到 TPM,请务必同时为 TPM 设置 PIN 码。
这是一个快速拼凑的 PoC。它并未完全打磨,存在一些粗糙之处。不提供任何支持,我也不打算进行任何进一步的开发。
我和大多数人一样,曾以为将 LUKS 磁盘加密绑定到笔记本电脑的 TPM 芯片上是安全的,能够防止攻击者提取 LUKS 卷密钥(即主密钥)。事实证明,要做到这一点几乎令人沮丧地简单,而且不会留下任何攻击痕迹。
没错,问题在于攻击者可以提供自定义的根文件系统,而在你的系统启动后,TPM 将处于一个已知的“良好”状态,此时它会欣然解锁你的 LUKS 卷。攻击者随后可以为所欲为,并轻松掩盖任何攻击证据。
但一个准备充分的攻击者实际上只需要将你的电脑占为己有几分钟,你就被攻破了。外出就餐时把笔记本电脑留在酒店房间?在安检点被拉到一旁问话?没错,这可不妙。
脚本 ./prepare.sh 执行破坏目标虚拟机所需的步骤。同样的步骤也可以轻松地对一块暂时从其正常机箱中取出的真实硬盘执行。
实际的“漏洞利用”将提取原始的 LUKS 卷密钥,可以通过查看 attack.service 的日志来确认。这种攻击可以有许多变体。
运行 ./restore.sh 来抹去你所作所为的所有证据,同时带着受害者的 LUKS 卷密钥扬长而去。