TPMとBitLockerの禁忌を犯す

はじめに

サイバーディフェンス研究所 アドベントカレンダー 2022 の 19日目です。

TPMの使い方の一つとしてWindowsのBitLockerが有ります

業務中にTPMを触ることがありまして、その過程でTPMを初期化する場合もあり、ふと、BitLockerで暗号化された状態の環境でTPMの初期化をすると本当に復号されなくなるのか気になり試してみました

ようするに、N番煎じですね

TPMが壊れて復元できなくなったというような風のうわさも聞いたりしたので、実際の所どのようになるのか実際に確認してみたいなと

実際に初期化して戻らなくなったら大変なのもあり、二度と戻せなくなっても困らない環境でいくつかの方法でTPMの初期化を試してみました

注意

実機で実施した場合に回復キーがない場合には、保存されたデータへアクセスできなくなってしまうので、回復キーのバックアップはしっかりと取っておきましょう

今回は回復キーのバックアップを取った上で、データが消えても困らない端末を使いました

環境

  • 端末
    • Panasonic の Let's note (CF-SV)
  • OS
    • Windows10 22H2

BitLockerの確認

端末がBitLockerでドライブ暗号化されている端末を用意しました

またデバイスマネージャからTPMが存在することも確認しました

BitLockerではディスクの暗号化を行うに当たり、実際にディスクの暗号化に利用されるFVEK(Full Volume Encryption Key)、FVEKを暗号化するために利用されるVMK(Volume Master Key)、VMKを暗号化するために利用されるSRK(Storage Root Key)の3つの鍵があり、この内 SRK がTPMへ格納されています

今回はこのSRKをTPMから飛ばしてみてどうなるのか(どうなるかはまぁ分かりきってますが)見てみる流れです

TPM.mscでTPMをクリア

BitLockerドライブ暗号化にあるTPMの管理 からも見られる TPM.msc でまずは初期化をしてみることにしました

TPMをクリア... の文字が有りますね

もしかしてTPMを初期化するというのは容易に実行し得るのかも知れない、 そう思いそのまま進んでみると

TPMキーが失われるらしいのでそのまま実行してみましたが...

再起動後にもそのままPCは起動されました

イベントビューアを見てみるとTPMがクリアとのログは残っていますが、今回実施した端末では操作後も回復キーを求められることなくディスクが復号されることを確認しました

このやり方では復号に必要な鍵は消えないようにみえますね

後述の tpm2-tools を利用して、TPMをクリア... の前後で SRKの値の差分を一応確認してみました

diff -u before.txt after.txt         
--- before.txt  2022-12-16 12:55:07.127251013 +0900
+++ after.txt   2022-12-16 12:55:16.543369173 +0900
@@ -1,5 +1,5 @@
-name: 000b1a6ab4591da4f0c951803f6299e1c929279b65887aa6c7d9d47fcc15ae2d069d
-qualified name: 000ba5a6fd86ebe79a0d51586e027c58afc80417189d4307599c950f5bda8f995539
+name: 000bcc2a3acecec68cceb9790daa266aa6ec872e94fdcc4af6242f142cb460316882
+qualified name: 000bdc5bfe54fa2d8561494365fca85770e38502c0aec593fc99a2063964ea909ec7
 name-alg:
   value: sha256
   raw: 0xb
@@ -24,4 +24,4 @@
   value: cfb
   raw: 0x43
 sym-keybits: 128
-rsa: c2f52a9b4d0a7dda19c37bf4a6353e5f2b26362d34a8a4185043f2a84a79bc43e6dfacc74682f9a7189bc1cd6881635a42672975ed0af67b1e96d613df1cb4458b47b2e8138990b437d892840a89f6b8d555cdac722f23000be1a2e9bcde74ac7b9a93cb9ee18f444df4ba4addf7d5307988de4f052f883b32a20c5abb37134f0ae7523bef65e6a3ad210e061dfe04fa33b7bece53ed70bf3b7363a4696ccd14adfa49a7be0bc7f957903abb9742f32172962ef6599eedbdb72b12fec16f6f271b90459413c996941c38cd50bd813bd48ad0fbb0c882db85dd77909fd78206633c5305de699f9e736522fbf53bb0bb50a9d694f1ba45fb57181de62db421a601
+rsa: d2173be6b59e40f9a2f610cc8ddd01d1ddfe2e28a5cdbf81b04440f81609ef9b0125138ca4b939842c442e734f6db242614970ef0fc2093bc89cc88ae9e6fbbad08b1357fc030e0a8ef70268b3c6fd26be97f0dca38ea17e02c621222b7d62825126b82ce1bc65442d99c20875437e800f8e8abd40b80599c9e02ad556aae7ad657061f601890c68fb1ba4f48bb34452bb7ae19af2a3f691dc20003add23dc054d45528bcf55fb47e8204b456cc071e674e62edbcadf9b2f695eb9b7daddbb56f1f51f6c10a768eafaec5f0bbb1e7ce63be0fffd67edd8b8eb1f5713bda1a26f14d2b5363d62c4fcb0cf577adc9f5c56c09c17b8a85b7f06860384f2d120d1a9

SRKが異なっていました

TPM.mscでTPMのクリアを実施した場合には、BitLockerの復号に利用する鍵を改めて設定しているようですね

UEFIからTPMをクリア

tpm.mscでは鍵がなくて複合できなくなっている状況が見られなかったので、UEFIから初期化してみることにしました

セキュリティのタブから内蔵セキュリティ(TPM)を選び、

待機中のTPM操作で所有者情報の初期化 を選び設定を保存の上で再起動を行いました

はい、想像の通りです

コレが見たかっただけです

TPMの初期化によってSRKが消えてしまいBitLockerで暗号化されたディスクが開けなくなるところを見ることが出来ました

あとはココにバックアップされている回復キーを入力して起動する流れですね

回復キーは紙に印刷して保存しておくほかにも、Microsoftアカウントに紐づけて実施してある場合や、Microsoft Intune で管理されている場合には、ロックされてしまった場合に別の端末から回復キーを取得できる場合が有ります

何れにせよバックアップの取得は大切ですね

ちょっと追加で

TPMから鍵を飛ばして青い画面が見たかっただけなので、したかったことは終わりなのですが、コレだけでは寂しいので

TPMを操作するためのクライアントとして tpm2-tools というものがあります

このツールを使って、BitLockerの鍵がどの様に格納されているかついでに眺めてみようかなと

Ubuntu22.04.1をUSBにインストールして起動して tpm2-tools をインストールし、TPMの中を少し覗いてみました

必要なパッケージは tpm2-tools tpm2-abrmd です

# apt install tpm2-tools tpm2-abrmd

TPMに保存されているオブジェクトの一覧を見てみると3つのオブジェクトが保存されていますね

# tpm2_getcap handles-persistent
- 0x81000001
- 0x81000002
- 0x81010001

tpm2_getcap

取得さたアドレスを試しにTCG(Trusted Computing Group)のドキュメントで文字列検索してみると

はい、SRKが保存される先として示されていました

TCG TPM v2.0 Provisioning Guidance 29ページ Table 2: Reserved Handles for TPM Provisioning Fundamental Elements

また、鍵はどんな内容なのかも見てみました

# tpm2_readpublic -c 0x81000001
name: 000b689f40a6090878b102717e714728a31ad21956a76876cd7c30eecd2994bbf052
qualified name: 000b0052964b82984aaf7bc62ee9aaae5792f105433eb6bb2127911d7f046cf206d0
name-alg:
  value: sha256
  raw: 0xb
attributes:
  value: fixedtpm|fixedparent|sensitivedataorigin|userwithauth|noda|restricted|decrypt
  raw: 0x30472
type:
  value: rsa
  raw: 0x1
exponent: 65537
bits: 2048
scheme:
  value: null
  raw: 0x10
scheme-halg:
  value: (null)
  raw: 0x0
sym-alg:
  value: aes
  raw: 0x6
sym-mode:
  value: cfb
  raw: 0x43
sym-keybits: 128
rsa: baee20f69b6ee1559411563c0ef36486d53eecc084a320baad0405a57961e3cb053c16106ec834ac50cec6ef3aeced31a22a0ccec9169bd782a0ec59ef0237456160e184d50a178680a8711519b6fea11a3844bb93588528f03d275dea884519137fec4cef152dff0130752f3be6458ed12b2180934c84c08554995608480568d4cacd336ada0f6fdd2160ca81bf955aa46cc0a974747e11a7e43e078b73d678aa9e489ed8234ec6bc57a1b812b2c531739437ae8063b1a741105b2bd66fab592351602c2651c312d86199e175b144cbf88a34ec322ff614e71ddd2ecd48472424f394fd60025845df9dd9c24427b549416626ce9b0380ea751850757bf3a5c9

tpm2_readpublic

どうやらRSA2048bitの鍵のようですね

ココまで見てきて、あれ、もしかして消せるのではとも思えてきました

# tpm2_evictcontrol -c 0x81000001
persistent-handle: 0x81000001
action: evicted

tpm2_evictcontrol

消せましたね...

再度一覧を出してみると,たしかにSRKがなくなっています

# tpm2_getcap handles-persistent
- 0x81000002
- 0x81010001

試しにwindowsを再起動してみたところ

また会いましたね

削除した鍵は確かにBitLockerのSRKであったようです

情報の漏えい等の問題につながる話ではありませんが、隣の席の人のPCがいきなりロックされたり、みたいなことは簡単に出来てしまいそうですね (気軽にやって良い悪戯では無いでしょうが...)

おわり

たしかに SRKはTPMに保存されていて、削除すると暗号化は解けなくなるところを見ることが出来て、回復キーのバックアップの大切さを感じました

また、USBなどから別のOSを起動してもTPMを操作できるため、そもそもの起動を防ぐためにはUEFIから起動時のパスワードを要求するように設定する必要もありそうです

普段BitLockerなどで漠然と利用しているだけのTPMを、tpm2-toolsで実際にどのようなデータが格納されているのかを眺めて見ましたが、このあたりはまだまだ深淵が広がっていそうですね

© 2016 - 2024 DARK MATTER / Built with Hugo / Theme Stack designed by Jimmy