蛮力 FileVault 加密?

信息安全 加密 密码 密码学 哈希 磁盘加密
2021-08-17 18:47:21

我最近一直在进行取证和渗透测试,希望有人能解释以下数据是什么以及如何使用它对 macbook 执行暴力(hashcat)攻击。

更具体地说,什么是“VEK Wrpd”、“KEK Wrpd”、“HMAC”和“PW Key”?如果猜对了,它们可以用来重现 FileVault 密码吗?

我使用apfs-fuse转储数据:

$ ./apfs-fuse -d 16 /dev/sda2/ /path/to/mount

Device /dev/sda2 opened. Size is 250790436864
starting LoadKeybag
 all blocks verified
 header has type 6b657973
Volume macOS1 is encrypted.
Password hint: looking for key type 3 for volume 1342XXXX-XXXX-XXXX-XXXX-XXXXXXXX4251 in m_container_bag
Trying to load key bag from recs_block
starting LoadKeybag
 all blocks verified
 header has type 72656373
Password hint: looking for key type 4 for volume 1342XXXX-XXXX-XXXX-XXXX-XXXXXXXX4251 in recs_bag
Enter Password: 
GetVolumeKey: Dumping container keybag.
Dumping Keybag (keys)

Version :    2
Keys    :    2
Bytes   :       e0

Key 0:
UUID    : 1342XXXX-XXXX-XXXX-XXXX-XXXXXXXX4251
Type    :    3 [Keybag Ref]
Length  :   10
Unknown :        0

Block   :           7c1f57
Count   :                1

Key 1:
UUID    : 1342XXXX-XXXX-XXXX-XXXX-XXXXXXXX4251
Type    :    2 [VEK]
Length  :   7c
Unknown :        0

[Blob Header]
Unk 80  : 0
HMAC    : 106BXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9921
Salt    : 5493XXXXXXXX1F47

[VEK]
Unk 80  : 0
UUID    : 1342XXXX-XXXX-XXXX-XXXX-XXXXXXXX4251
Unk 82  :        0    1 9e b1
VEK Wrpd: 06391FA9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX552582F2



GetVolumeKey: looking for key type 3 for volume 1342XXXX-XXXX-XXXX-XXXX-XXXXXXXX4251 in m_container_bag
 key found
 data size matches that of key_extent_t
Trying to load key bag from recs_block
starting LoadKeybag
 all blocks verified
 header has type 72656373
Volume key bag loaded successfully. Dumping contents.
Dumping Keybag (recs)

Version :    2
Keys    :    3
Bytes   :      220

Key 0:
UUID    : 257AXXXX-XXXX-XXXX-XXXX-XXXXXXXX7975
Type    :    3 [KEK]
Length  :   94
Unknown :        0

[Blob Header]
Unk 80  : 0
HMAC    : F047XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXF6A8
Salt    : 630CXXXXXXXX268

[KEK]
Unk 80  : 0
UUID    : 257AXXXX-XXXX-XXXX-XXXX-XXXXXXXX7975
Unk 82  :        0    2 9e b1
KEK Wrpd: BB7FXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX07F8
Iterat's: 100000
Salt    : 863CXXXXXXXXXXXXXXXXXXXXXXXX2F51


Key 1:
UUID    : CDF5XXXX-XXXX-XXXX-XXXX-XXXXXXXXE4CA
Type    :    3 [KEK]
Length  :   94
Unknown :        0

[Blob Header]
Unk 80  : 0
HMAC    : 5A2AXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAEB8
Salt    : BFBFXXXXXXXX5FD6

[KEK]
Unk 80  : 0
UUID    : CDF5XXXX-XXXX-XXXX-XXXX-XXXXXXXXE4CA
Unk 82  :        0    2 9e b1
KEK Wrpd: 43A8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX5E07
Iterat's: 117590
Salt    : 8751XXXXXXXXXXXXXXXXXXXXXXXXB0DA


Key 2:
UUID    : EBC6XXXX-XXXX-XXXX-XXXX-XXXXXXXXECAC
Type    :    3 [KEK]
Length  :   94
Unknown :        0

[Blob Header]
Unk 80  : 0
HMAC    : 9F92XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX5706
Salt    : E363XXXXXXXXCC09

[KEK]
Unk 80  : 0
UUID    : EBC6XXXX-XXXX-XXXX-XXXX-XXXXXXXXECAC
Unk 82  :        0    2 9e b1
KEK Wrpd: CF35XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXEC04
Iterat's: 127270
Salt    : 3780XXXXXXXXXXXXXXXXXXXXXXXXA2E7



PW Key  : EE62XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6AB5
KEK Wrpd: BB7FXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX07F8
KEK     : A60EXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX4D78
KEK IV  : F7ECXXXXXXXX202A

PW Key  : 6363XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6191
KEK Wrpd: 43A8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX5E07
KEK     : EB9FXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXD6F9
KEK IV  : 5932XXXXXXXX4ACB

PW Key  : 6B62XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXEEFF
KEK Wrpd: CF35XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXEC04
KEK     : B579XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAD90
KEK IV  : A3E7XXXXXXXXCA4F
1个回答

什么是“VEK Wrpd”、“KEK Wrpd”、“HMAC”和“PW Key”?

这一切都在本白皮书中进行了解释,从第 26 页的“密钥管理”部分开始

  • VEK - 这是卷加密密钥。每个逻辑卷都包含自己的 VEK,用于加密驱动器上的各个 512 字节扇区。FileVault 使用 256 位 VEK,128 位 AES 在XTS模式下使用,这是块设备加密的标准模式。

  • KEK - 这是密钥加密密钥。生成一个随机对称密钥,用于加密 VEK,然后将其存储在 CoreStorage 元数据中。此密钥的功能是提供一个间接层,以便可以独立于 VEK 更改 KEK(否则需要在非常昂贵的过程中重新加密整个驱动器)。

  • DEK * - 这是派生的加密密钥,很可能是“PW 密钥”所指的内容。它直接从密码和存储的 salt 或使用PBKDF2算法的 x.509 证书的组合中派生而来。任何给定的密码和盐元组都将产生相同的 DEK。

  • HMAC - 基于散列的消息验证码是一种算法,它使用加密散列来证明任意数据的完整性。它用于检测篡改。HMAC本质上是以特定方式组合在一起的密钥和消息的散列没有密钥,攻击者无法为任何给定消息伪造有效的 HMAC。HMAC 还用作 PBKDF2 的核心功能,用于数据完整性以外的目的。

解密卷时,密码将转换为 DEK,不会以任何形式存储在设备上的任何位置。然后使用 DEK 解密 KEK,然后使用 KEK 解密用于允许您访问所有卷的 VEK。KEK 和 VEK 的加密形式保存在磁盘上。知道这些密钥中的任何一个的解密值将允许您读取卷,但不能恢复您的密码。

根据源代码,“Wrpd”最有可能代表“包装”,即密钥的加密版本因此,VEK Wrpd 是用 KEK 加密后的 VEK。同样,KEK Wrpd 是由 DEK 加密后的 KEK。这些值不是特别敏感,直接存储在磁盘上。没有 DEK Wrpd,因为它直接来自密码,希望只存储在您的大脑中。

* 令人困惑的是,DEK 在其他上下文中通常代表数据加密密钥,并具有与 VEK 相同的功能。

如果猜对了,它们可以用来重现 FileVault 密码吗?

不,尽管了解 VEK 可以让您解密它保护的加密卷。虽然 DEK 直接来自输入密码,但所使用的算法 PBKDF2 是一种单向函数。也就是说,您可以将 ASCII 密码转换为 DEK,但不能将 DEK 转换为 ASCII 密码。此外,PBKDF2 被有意设计为缓慢,以防止有人通过该函数传递大量候选密码,直到其中一个有效(暴力攻击)。