GEOM——GEOM Based Disk Encryption,基于GEOM的磁盘加密,是一种与GELI完全不同的数据保护方法,专为不同的威胁模型而涉及。
没有GELI灵活,但在某些特定场景下更适用。
任何加密方案中最薄弱的环节都是用户。
磁盘加密只保护冷磁盘。使磁盘变冷的最可靠方法是切断电源。
销毁加密的文件系统很容易,证明它被摧毁更难。
GBDE基于密码短语、元数据、主密钥和锁扇区构建其保护机制。
该系统的核心是用于加密设备的主密钥。
泄露主密钥意味着泄露加密设备。
访问和解密GBDE设备需要找到主密钥和解码主密钥的能力。GBDE允许根据威胁模型安排这两个问题。
主密钥用于解码GEOM的加密密钥。
GBDE在加密设备周围随机分布的四个扇区中存储了该密钥的四个副本,编号从1到4。
每个副本都使用单独的密钥和密码进行加密。
在命令行中,使用-n选项指定密钥编号。如未指定密钥编号,GBDE会假设正在处理当前正在使用的密钥,即密钥1。
如果每个主密钥都在随机位置,GBDE将主密钥的位置存储在锁扇区(加密设备的第一个扇区)中的一块元数据中。
元数据使用密码和/或密钥进行加密。
锁扇区包含主密钥的所有四个副本的位置。
使用一个密钥解密锁扇区,可以使用该密钥的主密钥副本访问加密设备,以及更改或销毁密钥的其他三个副本。
使用四个主密钥及其元数据的副本,可以让更多人能访问数据。
GBDE还可以使用key file来加密锁扇区和每个主密钥。
密钥文件可以是任何东西——一堆随机数据、宠物老鼠的特定照片,或者FreeBSD某个发行版ISO映像的SHA256哈希值。
每个主密钥都有自己的密码短语和密钥文件。密钥文件不是强制性的,但强烈建议。
在命令行中,-k指定用于解密GBDE设备的密钥文件。-K选项允许将新的密钥文件分配给主密钥的副本。
一些组织需要物理令牌来解密设备。可以通过将密钥文件放在可移动介质上来强制执行操作。
移动介质上的密钥文件需要妥善保管,如果要删除它,需要使用无法恢复的方法将其删除。
可以使用单独的锁文件将锁扇区与GBDE设备分开。锁文件可以存储在可移动介质上,因此需要第二个物理令牌来解密设备。
单独的锁文件并不像它初看起来那么有用。虽然密钥文件可以是任何东西,但锁文件标识了隐藏主密钥的扇区。所有四个主密钥都在加密设备的一个扇区上。
候选人数量有限。如果坏人有一个密钥和密码,他们可以在每个扇区尝试它们,看看是否有效。这个测试可能需要几个小时。
将GBDE设备隐藏在另一个分区中时,锁文件非常有用。如果锁扇区不存在,那么GBDE设备看起来更随机。
使用-l指定机密设备的锁文件,使用-L创建新的锁文件。
GBDE使用密码对锁扇区和主密钥进行加密。
虽然密码不是强制性的,但使用密码几乎总是最佳实践。每个需要密码的GBDE命令都会提示输入一个密码。
GBDE还接受在命令行上输入密码。这是一种糟糕的实践,但FreeBSD并没有强迫遵循最佳实践。
在命令行上输入密码可以让其他系统用户在命令运行时查看密码。在引导脚本中写入密码会导致密码被盗。
如果必须在命令行上而不是交互式地输入密码,请使用-p指定。
如果必须在命令行上分配新密码,请使用-P。
将密码放在命令行上仍然是一种糟糕的做法。
将密码放在shell脚本中非常有用。
使用GBDE的基本任务包括创建加密GEOM、挂载和停用它们。
在创建GBDE设备之前,应使用随机数覆盖它。
以下示例使用密码短语和密钥文件在磁盘分区/dev/da0p1上创建加密的geom:
xxxxxxxxxx
# gbde init da0p1 -K rat.jpg
init命令告诉gbde初始化设备。我们获得了一个用于GBDE的分区。
大写字母K用来指定一个新的密钥文件。
出现提示时输入新密码,gbde将创建加密设备。
使用gbde attach命令、密钥文件和密码激活新设备:
xxxxxxxxxx
# gbde attach da0p1 -k rat.jpg
输入密码短语,设备/dev/da0p1.bde将会出现。这是底层加密设备的未加密接口。
在GBDE设备上创建一个文件系统:
xxxxxxxxxx
# newfs -j /dev/da0p1.bde
# mount /dev/da0p1.bde /mnt/
加密geom上的文件系统可能会受到损坏,任何其他类型geom的文件系统都是如此。
使用软更新日志或其他文件系统弹性方法来保护数据。
当使用完加密文件系统,需要将其卸载并分离GBDE设备:
xxxxxxxxxx
# umount /mnt/
# gbde detach da0p1
在不卸载文件系统的情况下分离设备,设备将保持连接状态。可以去/dev目录中查找.bde设备。
注意,即使删除了包含密钥的物理令牌,密钥也可能仍然存在于内存中。销毁这些痕迹的唯一方法是完全关闭机器。
密钥管理包括添加新密钥、更改密钥、更改现有密钥的密码短语。
每个GBDE设备最多可以有四个密钥。初始化时设置了一个,后续还可以手动添加三个。
在添加或更改密钥之前,必须先分离(detach)设备。
必须拥有一个现有的工作密钥,才能向GBDE geom添加新密钥。
用-n指定密钥编号(1-4),用-k指示当前密钥文件,用-K指示新密钥文件。
xxxxxxxxxx
# gbde setkey da0p1 1 -n 2 2 -K mouse.jpg 3 -k rat.jpg
Enter passphrase:
Opened with key 0
Enter new passphrase:
Reenter new passphrase:
然后用新密钥附加设备:
xxxxxxxxxx
# gbde attach da0p1 -k mouse.jpg
GBDE使用密码短语和密钥文件来加密锁扇区(lock sector)。必须指定当前的密钥文件和密码短语才能分配新的密钥文件。
xxxxxxxxxx
# gbde setkey da0p1 -n 0 -k rat.jpg –K mouse.jpg
Enter passphrase:
Opened with key 0
Enter new passphrase:
Reenter new passphrase:
此处命令中使用-k选项给出了旧密钥文件(rat.jpg),使用-K选项给出了新密钥文件(mouse.jpg)。当提示时,输入了旧的密码短语。
如果仅修改密钥文件或密码短语,仍然需要同时指定他们。通过-K指定相同的文件来回收相同的密钥。
要在使用锁文件时更改密码短语和密钥,需要创建一个新的锁文件。
使用-L指定新的锁文件:
xxxxxxxxxx
# gbde setkey da0p1 -n 0 -l lock1 -k rat.jpg -L lock2
旧的锁文件没有用了,但可能会被攻击者利用。建议彻底摧毁它。
使用gbde nuke命令可以将密钥设置为invalidation(无效)。
使用gbde destroy命令可以将密钥blackening(黑化)。
黑化会用加密的无效元数据覆盖所有主密钥。
无效和黑化会留下不同的痕迹,在取证分析过程中,充满零的块在充满随机垃圾的分区中会显得更突出。无效密钥会暴露“曾经有密钥”的事实。
黑化不会留下任何零块痕迹。
如果IT主管离职,必须撤销他对加密设备的问权限,是他的密钥无效,可以使用以下操作:
x# gbde nuke da0p1 -n 4 -k rat.jpg
Opened with key 1
Nuked key 4
以上命令是密钥4的密钥文件和与其关联的密码短语失效。
如果不指定密钥编号(-n 4),则会使自己的密钥(即当前密钥)失效。
现在可以创建一个新的4号密钥,或者只用三个密钥。
要使所有的主密钥失效,可以使用-1:
xxxxxxxxxx
# gbde nuke da0p1 -n -1 -k rat.jpg
Opened with key 1
Nuked key 1
Nuked key 2
Nuked key 3
Nuked key 4
此操作会使设备无法使用。如果这是你的目标,应该使用gbde destroy命令销毁密钥。
使GBDE设备黑化会使主密钥扇区与周围的扇区无法区分。
gbde destroy命令将主密钥扇区更改为无效数据,对其进行加密,然后其写回相同的扇区。
可以将单个密钥黑化,也可以使用-n -1选项黑化所有密钥:
xxxxxxxxxx
# gbde destroy –n -1 da0p1 -k rat.jpg
Opened with key 1
注意:黑化是不可逆的,按下回车之前要慎之又慎。
xxxxxxxxxx
# gbde attach da0p1 -k mouse.jpg
gbde: Attach to da0p1 failed: Lock was nuked
如果在附加设备时看到如上提示,则表示密码短语已经不起作用了,
对于黑化的设备,则会提示类似信息:
xxxxxxxxxx
# gbde attach da0p1 -k rat.jpg
gbde: Attach to da0p1 failed: Lock was destroyed
最大的弱点是人。人类选择糟糕的密码,人类可能会被勒索、威胁或背叛。
即使密钥位置元数据被破坏了,使用密码短语依然有可能破解加密系统。
主密钥销毁不完整会带来另外的风险。必须销毁主密钥及全部四个副本。
销毁所有东西,并拔掉电源。
GBDE允许在分区内隐藏geom,即使是非FreeBSD分区。
通常的建议是将其放在交换分区中,无论是Windows或者Linux或者FreeBSD的交换分区。
由于GBDE锁扇区在取证分析中会很突出,所以需要将该锁扇区放在原始磁盘意外的某个地方。
初始化GBDE设备时,使用-L选项创建一个锁文件:
xxxxxxxxxx
# gbde init da0p1 -i -L da0p1.lock -K rat.jpg
这将在默认文本编辑器中显示一个模板。填写它以标准描述想将GBDE设备放置在何处。
必须定义扇区大小、包含GBDE设备的扇区、密钥数量,以及是否希望GBDE随机化geom。
xxxxxxxxxx
sector_size = 512
使用512的扇区总是有效的,但可能会带来不太理想的性能。
对于加密系统来说,性能不是最重要的,应坚持使用512扇区尺寸。
xxxxxxxxxx
#first_sector = 0
#last_sector = 2879
#total_sectors = 2880
first_sector的值定义了分区内加密设备的第一个扇区,此例中从0开始。
last_sector的值定义了geom填充的最后一个扇区。
total_sectors是设备占用的扇区。
当加密设备隐藏在另一个分区内时,不要将加密设备放在分区的前端。如果是交换空间,操作系统可能会在启动时在分区的开头放置一些东西,从而破坏此geom。
first_sector可以设置一个较大的随机数。
加密分区越大越容易引起怀疑。比如Windows交换分区内20GB的随机文件看起来就非常可疑。
假设想要5MB,对于512字节的扇区,total_sectors要设置为10240。使用简单的加法就得到了last_sector。以下示例为first_sector使用了一个简单的数字,在现实情况下建议使用一个随机数:
xxxxxxxxxx
first_sector = 1000001
last_sector = 1010240
total_sectors = 10240
5MB的空间足够容纳多个秘密文档或一个复杂的Word文档。
现在设置密钥的数量。至少需要一个,最多四个:
xxxxxxxxxx
number_of_keys = 4
强烈建议至少两个密钥。
最后,GDBE可以覆盖随机性的新设备:
xxxxxxxxxx
random_flush = no
只要将未注释的random_flush设置为任何值,就会触发随机化。因此即使设置为no,也会自动在新设备上注入随机性,这样以后就不必再这么做了。
gbde init命令在完成磁盘空间随机化之前不会返回。
保存并退出模板后,gbde将初始化新的加密设备。
除了主密钥和其他东西的位置外,锁文件还会记下所有的元数据。
连接设备时,使用-l指定锁文件:
xxxxxxxxxx
# gbde attach da0p1 -l da0p1.lock -k rat.jpg
使用锁文件可以设置其他密钥、挂载文件系统,以及对常规GBDE设备执行任何其他操作。
注意,机器不需要安装FreeBSD来读取分区。可以启动live CD,运行GBDE命令来提取数据。
使用gbde destroy命令可以销毁隐藏的GBDE geom。也可以用其他方式销毁它。
GBDE是一个工具,像其他工具一样,它会被错误利用。