私は最近フォレンジックとペネトレーションテストを行っており、誰かが以下のデータが何であるか、そしてMacbookに対してブルートフォース(ハッシュキャット)攻撃を実行するためにそれがどのように使用されるかを説明できることを望んでいます。
具体的には、「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
「VEK Wrpd」、「KEK Wrpd」、「HMAC」、「PW Key」とは何ですか?
これはすべて、26ページから始まる このホワイトペーパー のセクションKey Managementで説明されています。
[〜#〜] vek [〜#〜]-これはボリューム暗号化キーです。各論理ボリュームには独自のVEKが含まれ、ドライブ上の個々の512バイトセクターを暗号化するために使用されます。 FileVaultは256ビットVEKを使用します。これは、128ビットAESがブロックデバイス暗号化の標準モードである [〜#〜] xts [〜#〜] モードで使用します。
[〜#〜] kek [〜#〜]-これはキー暗号化キーです。 VEKを暗号化するランダム対称鍵が生成され、CoreStorageメタデータに格納されます。このキーの機能は、間接層を提供することです。これにより、VEKとは無関係にKEKを変更できます(そうしないと、非常にコストのかかるプロセスでドライブ全体を再暗号化する必要があります)。
[〜#〜] dek [〜#〜]* -これは派生暗号化キーであり、「PWキー」と呼ばれる可能性があります。 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は意図的にそのうちの1つが機能するまで(ブルートフォース攻撃)、誰かが関数を介して多数の候補パスワードを渡すのを防ぐには時間がかかります。