使用 LUKS 全盘加密时,您将如何防范邪恶女仆?
邪恶女仆攻击是指有人在您离开时物理访问您的计算机,并破坏未加密的 /boot 分区,以便在您下次启动计算机时捕获您的 FDE 密码
解决方案之一是将您的 /boot 分区留在随身携带的 USB 记忆棒上(女仆无法访问它),但我应该在其上使用哪个文件系统,以及如何配置我的系统以优雅地处理删除USB 记忆棒(以及 /boot 分区本身)?
我使用的是 CentOS,但当然欢迎通用的、与发行版无关的答案。谢谢。
答案1
终于想通了。这仍然感觉非常hacky和肮脏,因为系统永远不会意识到可能/boot
没有安装,并且您必须在执行任何可能写入它的操作之前手动安装它(想想系统更新等),但除此之外它工作完美。
- 为您的闪存驱动器准备一个分区,并在其上设置启动标志。您可以运行
shred -n 1 -v /dev/sdX
它来完全擦除它,包括任何以前的引导扇区;完成后,运行fdisk
以创建一个分区以及mkfs
您在其上选择的文件系统。 - 将您的闪存驱动器安装在某个地方,
/mnt/boot
或者甚至/newboot
就可以了。 - 使用 移动所有内容到
/boot
闪存驱动器mv /boot/* /newboot
。 - 编辑
/etc/fstab
并更改原始启动分区的 UUID(如果没有,则创建一个条目)以匹配您的闪存驱动器。您可以通过 获取 UUIDlsblk -o name,uuid
。还要添加该noauto
选项,以便驱动器不会自动安装,以便能够在系统开始启动(加载内核后)后立即将其删除,而不会损坏其上的 FS。 - 卸载原来的启动分区和U盘(
umount /boot && umount /newboot
)并挂载U盘;如果您的 fstab 条目正确,您只需运行即可mount /boot
,它会根据 fstab 中指定的 UUID 自动挂载它。 - 重新生成引导加载程序的配置以反映新分区的 UUID 和“物理”位置,对于 GRUB,闪存驱动器实际上将显示为计算机中的第一个硬盘驱动器 (
hd0
)。如果您可以使用大多数发行版提供的默认 GRUB 配置脚本,则可以运行grub-mkconfig -o /path/to/grub.cfg
它,它将根据当前安装的分区和/或 fstab 生成文件。请注意,对于 CentOS 7,正确的位置grub.cfg
实际上位于/boot/grub2/grub.cfg
.
在执行任何可能访问启动分区的操作时,请连接 USB 记忆棒并运行mount /boot
.完成后,您可以运行umount /boot
。请注意,后一个命令可能需要一些时间才能完成,因为它将缓冲区刷新到磁盘(磁盘本身很慢,因此内核缓冲一些写入操作以加快速度)。
答案2
解决此特定问题的另一种方法是使用 TPM 存储加密密钥,但防御确实依赖于用户使其有效。一个基本的、基于 RHEL7 的解决方案是 tpm-luks (https://github.com/GeisingerBTI/tpm-luks)。
它的工作方式是在启动时,启动过程的每个步骤都会测量下一个步骤,并将测量值存储到 TPM 上的 PCR 中。启动过程完成后,tpm-luks 会根据“已知良好”配置检查 PCR 的状态。如果在“已知良好”配置中,TPM 将解封 LUKS 密钥,并且 tpm-luks 将传递此数据来解锁根 LUKS 分区。
因为所有重要的事情都是通过密码哈希来衡量的,所以邪恶的女仆基本上没有办法替换您的 GRUB/内核/ramdisk 来恶意收集您的 FDE 密码。作为额外的好处,您根本不需要 FDE 密码!理论上,您可以完全删除人类可读的密码并完全依赖 tpm-luks,但如果您选择这种方式,那么存储 LUKS 标头并将其保留为备份可能是个好主意。
正如我所提到的,这需要用户付出一些努力。如果您的计算机无人看管,并且出现密码短语提示,那么在您完成一些调查之前输入它可能是一个坏主意。此时,您应该启动到 live CD 环境并查看 tpm-luks 中是否存在错误,或者分区是否/boot
确实被更改。您仍然保留/boot
未加密的分区,但如果任何重要的内容被更改,主磁盘永远不会被解密。