梳理一下启动流程:
bios 初始化,cpu 对 bios /固件 进行验证,保证固件是可信的。但有些平台未正确配置验证,带来了风险。
固件初始化 TPM 。TPM 挂在 LPC 总线上,是可以被监听通信并窃取加密 key 的,成本也不高,用 FPGA 搞的。
TPM 本身也会对主板 /固件进行一些验证,发生变化了则得不到解密的 key 。所以换主板基本不行的,倒是 tpm 可能有后门。
固件读取硬盘的未加密分区上的 bootmgr/bootmgfw.efi 并执行,理论上你可以替代 Windows bootmgr 为恶意软件,但是:
- TPM 可能检测到这一变化,拒绝放出 key,出现 bitlocker 恢复,要求提供 40 位 recovery pw 。不专业的用户可能会输入,然后密码被偷。
- 在启用了 UEFI Secure Boot 的平台上,若恶意 bootloader 未签名,固件会拒绝启动,并提出警告通知用户系统可能被攻击。
- 若攻击者有办法签名:如果利用 grub2 等工具的漏洞执行恶意代码,但也拿不到 tpm 的 key,因为 linux 的 grub 和微软 bootmgr 用的 UEFI SB 证书链不一样,导致 pcr7 变化,tpm 不会放出 key. 除非能搞到微软的 CA 私钥来攻击你。。。
- 一些平台使用 UEFI SB + TPM2 + PCR7 时有严重漏洞,用一些手段能让 tpm 错误地给出 key 。
若上面的步骤都正常,bootmgr 解密 c 盘,并启用 Windows 内核,后续就没 tpm 啥事了。
启动后 C 盘确实解锁了,但 key 在内存里,要小心的攻击:液氮冰冻内存,然后读内数据很到机密。所以要小心机器睡眠 (不要和休眠搞混)。
以及雷电接口 /1394/pci-e 设备 dma 偷数据,此处 @
AppleBootCamp /doge/
所以至少两个分区:
system/ efi system:未加密,内有 Windows bootmgr 引导代码,这些代码就 uefi sb/tpm 验证。
Windows 的 C 盘:加密分区
另外,Bitlocker 的技术名词
解密:把数据变成未加密存回硬盘,把门拆了。
解锁:打开加密的卷,但是钥匙在内存中,重启你就会丢失钥匙。数据加解密在内存中进行,没有明文内容写在硬盘中。
暂停保护:把钥匙写在硬盘中,相当于你把钥匙挂在你家门口,但你家没拆掉门。有极少数情况需要暂停保护,比如更新 bios 等操作时肯定会触发 pcr 改变的情况,数据加解密于内存中进行,写入的数据是加密存硬盘的(!此处我没做验证!)
对普通人来说,能做到最好的情况就是:
tpm + pin + usb key 三重验证,次一点就是 tpm + 启动 pin 验证(不是登陆界面那个 pin) ,最差也就 tpm 了。