第七章:GBDE

GEOM——GEOM Based Disk Encryption,基于GEOM的磁盘加密,是一种与GELI完全不同的数据保护方法,专为不同的威胁模型而涉及。

没有GELI灵活,但在某些特定场景下更适用。

用户保护

任何加密方案中最薄弱的环节都是用户。

磁盘加密只保护冷磁盘。使磁盘变冷的最可靠方法是切断电源。

销毁加密的文件系统很容易,证明它被摧毁更难。

GBDE 基本需要

GBDE基于密码短语、元数据、主密钥和锁扇区构建其保护机制。

该系统的核心是用于加密设备的主密钥。

泄露主密钥意味着泄露加密设备。

访问和解密GBDE设备需要找到主密钥和解码主密钥的能力。GBDE允许根据威胁模型安排这两个问题。

主密钥用于解码GEOM的加密密钥。

GBDE在加密设备周围随机分布的四个扇区中存储了该密钥的四个副本,编号从1到4。

每个副本都使用单独的密钥和密码进行加密。

在命令行中,使用-n选项指定密钥编号。如未指定密钥编号,GBDE会假设正在处理当前正在使用的密钥,即密钥1。

GBDE 锁扇区(Lock Sector)

如果每个主密钥都在随机位置,GBDE将主密钥的位置存储在锁扇区(加密设备的第一个扇区)中的一块元数据中。

元数据使用密码和/或密钥进行加密。

锁扇区包含主密钥的所有四个副本的位置。

使用一个密钥解密锁扇区,可以使用该密钥的主密钥副本访问加密设备,以及更改或销毁密钥的其他三个副本。

使用四个主密钥及其元数据的副本,可以让更多人能访问数据。

密钥文件

GBDE还可以使用key file来加密锁扇区和每个主密钥。

密钥文件可以是任何东西——一堆随机数据、宠物老鼠的特定照片,或者FreeBSD某个发行版ISO映像的SHA256哈希值。

每个主密钥都有自己的密码短语和密钥文件。密钥文件不是强制性的,但强烈建议。

在命令行中,-k指定用于解密GBDE设备的密钥文件。-K选项允许将新的密钥文件分配给主密钥的副本。

一些组织需要物理令牌来解密设备。可以通过将密钥文件放在可移动介质上来强制执行操作。

移动介质上的密钥文件需要妥善保管,如果要删除它,需要使用无法恢复的方法将其删除。

锁扇区对比锁文件

可以使用单独的锁文件将锁扇区与GBDE设备分开。锁文件可以存储在可移动介质上,因此需要第二个物理令牌来解密设备。

单独的锁文件并不像它初看起来那么有用。虽然密钥文件可以是任何东西,但锁文件标识了隐藏主密钥的扇区。所有四个主密钥都在加密设备的一个扇区上。

候选人数量有限。如果坏人有一个密钥和密码,他们可以在每个扇区尝试它们,看看是否有效。这个测试可能需要几个小时。

将GBDE设备隐藏在另一个分区中时,锁文件非常有用。如果锁扇区不存在,那么GBDE设备看起来更随机。

使用-l指定机密设备的锁文件,使用-L创建新的锁文件。

密码短语

GBDE使用密码对锁扇区和主密钥进行加密。

虽然密码不是强制性的,但使用密码几乎总是最佳实践。每个需要密码的GBDE命令都会提示输入一个密码。

GBDE还接受在命令行上输入密码。这是一种糟糕的实践,但FreeBSD并没有强迫遵循最佳实践。

在命令行上输入密码可以让其他系统用户在命令运行时查看密码。在引导脚本中写入密码会导致密码被盗。

如果必须在命令行上而不是交互式地输入密码,请使用-p指定。

如果必须在命令行上分配新密码,请使用-P。

将密码放在命令行上仍然是一种糟糕的做法。

将密码放在shell脚本中非常有用。

GBDE基本用法

使用GBDE的基本任务包括创建加密GEOM、挂载和停用它们。

初始化 GBDE 提供者

在创建GBDE设备之前,应使用随机数覆盖它。

以下示例使用密码短语和密钥文件在磁盘分区/dev/da0p1上创建加密的geom:

init命令告诉gbde初始化设备。我们获得了一个用于GBDE的分区。

大写字母K用来指定一个新的密钥文件。

出现提示时输入新密码,gbde将创建加密设备。

激活GBDE设备

使用gbde attach命令、密钥文件和密码激活新设备:

输入密码短语,设备/dev/da0p1.bde将会出现。这是底层加密设备的未加密接口。

创建文件系统

在GBDE设备上创建一个文件系统:

加密geom上的文件系统可能会受到损坏,任何其他类型geom的文件系统都是如此。

使用软更新日志或其他文件系统弹性方法来保护数据。

分离GBDE设备

当使用完加密文件系统,需要将其卸载并分离GBDE设备:

在不卸载文件系统的情况下分离设备,设备将保持连接状态。可以去/dev目录中查找.bde设备。

注意,即使删除了包含密钥的物理令牌,密钥也可能仍然存在于内存中。销毁这些痕迹的唯一方法是完全关闭机器。

GBDE 密钥管理

密钥管理包括添加新密钥、更改密钥、更改现有密钥的密码短语。

添加新密钥

每个GBDE设备最多可以有四个密钥。初始化时设置了一个,后续还可以手动添加三个。

在添加或更改密钥之前,必须先分离(detach)设备。

必须拥有一个现有的工作密钥,才能向GBDE geom添加新密钥。

用-n指定密钥编号(1-4),用-k指示当前密钥文件,用-K指示新密钥文件。

然后用新密钥附加设备:

修改密码短语、密钥文件和锁文件(lock file)

GBDE使用密码短语和密钥文件来加密锁扇区(lock sector)。必须指定当前的密钥文件和密码短语才能分配新的密钥文件。

此处命令中使用-k选项给出了旧密钥文件(rat.jpg),使用-K选项给出了新密钥文件(mouse.jpg)。当提示时,输入了旧的密码短语。

如果仅修改密钥文件或密码短语,仍然需要同时指定他们。通过-K指定相同的文件来回收相同的密钥。

要在使用锁文件时更改密码短语和密钥,需要创建一个新的锁文件。

使用-L指定新的锁文件:

旧的锁文件没有用了,但可能会被攻击者利用。建议彻底摧毁它。

密钥摧毁

使用gbde nuke命令可以将密钥设置为invalidation(无效)。

使用gbde destroy命令可以将密钥blackening(黑化)。

黑化会用加密的无效元数据覆盖所有主密钥。

无效和黑化会留下不同的痕迹,在取证分析过程中,充满零的块在充满随机垃圾的分区中会显得更突出。无效密钥会暴露“曾经有密钥”的事实。

黑化不会留下任何零块痕迹。

Key Invalidation

如果IT主管离职,必须撤销他对加密设备的问权限,是他的密钥无效,可以使用以下操作:

以上命令是密钥4的密钥文件和与其关联的密码短语失效。

如果不指定密钥编号(-n 4),则会使自己的密钥(即当前密钥)失效。

现在可以创建一个新的4号密钥,或者只用三个密钥。

要使所有的主密钥失效,可以使用-1:

此操作会使设备无法使用。如果这是你的目标,应该使用gbde destroy命令销毁密钥。

Key Blackening

使GBDE设备黑化会使主密钥扇区与周围的扇区无法区分。

gbde destroy命令将主密钥扇区更改为无效数据,对其进行加密,然后其写回相同的扇区。

可以将单个密钥黑化,也可以使用-n -1选项黑化所有密钥:

注意:黑化是不可逆的,按下回车之前要慎之又慎。

验证失效

如果在附加设备时看到如上提示,则表示密码短语已经不起作用了,

对于黑化的设备,则会提示类似信息:

攻击GBDE

最大的弱点是人。人类选择糟糕的密码,人类可能会被勒索、威胁或背叛。

即使密钥位置元数据被破坏了,使用密码短语依然有可能破解加密系统。

主密钥销毁不完整会带来另外的风险。必须销毁主密钥及全部四个副本。

销毁所有东西,并拔掉电源。

将GBDE隐藏到其他分区

GBDE允许在分区内隐藏geom,即使是非FreeBSD分区。

通常的建议是将其放在交换分区中,无论是Windows或者Linux或者FreeBSD的交换分区。

由于GBDE锁扇区在取证分析中会很突出,所以需要将该锁扇区放在原始磁盘意外的某个地方。

初始化GBDE设备时,使用-L选项创建一个锁文件:

这将在默认文本编辑器中显示一个模板。填写它以标准描述想将GBDE设备放置在何处。

必须定义扇区大小、包含GBDE设备的扇区、密钥数量,以及是否希望GBDE随机化geom。

使用512的扇区总是有效的,但可能会带来不太理想的性能。

对于加密系统来说,性能不是最重要的,应坚持使用512扇区尺寸。

first_sector的值定义了分区内加密设备的第一个扇区,此例中从0开始。

last_sector的值定义了geom填充的最后一个扇区。

total_sectors是设备占用的扇区。

当加密设备隐藏在另一个分区内时,不要将加密设备放在分区的前端。如果是交换空间,操作系统可能会在启动时在分区的开头放置一些东西,从而破坏此geom。

first_sector可以设置一个较大的随机数。

加密分区越大越容易引起怀疑。比如Windows交换分区内20GB的随机文件看起来就非常可疑。

假设想要5MB,对于512字节的扇区,total_sectors要设置为10240。使用简单的加法就得到了last_sector。以下示例为first_sector使用了一个简单的数字,在现实情况下建议使用一个随机数:

5MB的空间足够容纳多个秘密文档或一个复杂的Word文档。

现在设置密钥的数量。至少需要一个,最多四个:

强烈建议至少两个密钥。

最后,GDBE可以覆盖随机性的新设备:

只要将未注释的random_flush设置为任何值,就会触发随机化。因此即使设置为no,也会自动在新设备上注入随机性,这样以后就不必再这么做了。

gbde init命令在完成磁盘空间随机化之前不会返回。

保存并退出模板后,gbde将初始化新的加密设备。

使用秘密GBDE设备

除了主密钥和其他东西的位置外,锁文件还会记下所有的元数据。

连接设备时,使用-l指定锁文件:

使用锁文件可以设置其他密钥、挂载文件系统,以及对常规GBDE设备执行任何其他操作。

注意,机器不需要安装FreeBSD来读取分区。可以启动live CD,运行GBDE命令来提取数据。

破坏秘密GBDE 设备

使用gbde destroy命令可以销毁隐藏的GBDE geom。也可以用其他方式销毁它。

计算机和真实世界

GBDE是一个工具,像其他工具一样,它会被错误利用。