物理删除驱动器后 LUKS 分区仍然可以访问

物理删除驱动器后 LUKS 分区仍然可以访问

我有一个使用 LUKS 进行全盘加密的 USB 闪存驱动器。我插入驱动器并使用以下命令安装它:

cryptsetup luksOpen /dev/sdb flash
mount /dev/mapper/flash /mnt/flash

如果我物理移除闪存驱动器,我仍然可以访问 /mnt/flash 中的内容。为什么是这样?我认为这是一个安全风险,因为我希望在物理删除闪存驱动器后,我的闪存驱动器内容就变得无法访问。

我能做些什么来实现这一点?它需要是我可以对驱动器执行的操作,因为我在其他计算机上使用它,并且我不想必须更改所有这些以确保驱动器安全。

答案1

您似乎跳过了该过程中的某些步骤。你应该:

  • 插入驱动器
  • cryptsetup luksOpen /dev/sdb flash
  • mount /dev/mapper/flash /mnt/flash
  • 正常使用驱动器
  • umount /mnt/flash
  • cryptsetup close flash
  • 卸下驱动器

的倒数mountumount。尝试umount未插入的驱动器可能会挂起,具体取决于系统尝试执行的操作。该cryptsetup close步骤进一步删除驱动器的映射并从内核内存中擦除加密密钥。

如果您在不调用 的情况下物理删除设备,则无法保证所有(元)数据都正确写入设备umount。在您致电之前,您的加密密钥仍保留在内存中cryptsetup close。考虑到这一点,不应跳过这些步骤。

答案2

如果您从 USB 本身运行程序/脚本,您应该能够弄清楚它所在的 LUKS 映射/名称和设备(或者只需告诉脚本设备或映射名称,如果您知道的话)并观察设备何时删除后“消失”。然后卸载它。

我是很确定拔掉 USB 会导致设备 ( /dev/sdXn) 消失,但如果它没有消失,您就必须查看dmesg或查看系统日志,或者/sys也许在某个地方找到它。

这是一个概念验证的 bash 脚本,看起来应该可以工作,但我的 USB 上没有任何 LUKS 分区可供测试,所以我不确定是否umount需要诸如--lazy或 之类的选项--force

map=$( df --output=source $PWD |tail -n1 )

device=$( sudo cryptsetup status "$map" | grep -o "device:.*"|cut -d' ' -f 3 )

while [ -b "$device" ]
do
    sleep 30
done

echo "Device $device is missing, unmounting"
sudo umount -v "$map"

如果它是从已安装的 LUKS 容器内部运行,则$PWD应该找到它映射的 LUKS 名称,然后是设备,如果设备不再是块特殊文件,则卸载映射的设备。

PS 如果设备以 rw(可写)方式安装,则文件系统可能会因突然拔出而损坏。 FAT 似乎特别容易受到攻击,而日志文件系统应该更强大。如果它安装了 ro (只读)至少你可以避免这个问题, mount 接受-o ro和 cryptsetup 接受--readonly(两者可能都不是必需的)

相关内容