TPMからログインまで信頼チェーンがあるかどうかを確認するには、DebianまたはUbuntuをどのように設定する必要がありますか?

TPMからログインまで信頼チェーンがあるかどうかを確認するには、DebianまたはUbuntuをどのように設定する必要がありますか?

TPMは、暗号化されていないディスク暗号化キーを保存する場所に関する「鶏と卵」の問題を解決し、システムに別のハードドライブを追加したり、別のオペレーティングシステムを起動したり、ディスク/フラッシュ/BIOS/読み取りから直接実行できないようにする必要があります。キー...

私が知っている限り、TPMはデフォルトで実行されているソフトウェアをチェックしてこれを行い、ソフトウェアがプリセットされたハッシュと一致しない場合はロックされたままになり、ディスク暗号化キーの提供を拒否します。

systemdがLUKSキーをTPMに組み込むのを助けることができるという記事をたくさん読んだ。systemd-cryptenroll。しかし、これにはTPMにキーを組み込むだけが含まれ、攻撃者がそのキーを読むのを妨げることはありません。

私が詰まっているのは、BIOSファームウェアからログインまでの堅牢な信頼チェーンがあることを確認して、OSが改ざんされた場合に起動しないか、TPMが暗号化配信を拒否することを保証する方法を見つけることです。キー。

Eたとえば、端末の誰かがgrubプロンプトを押してLinuxを起動してパスワードなしでrootログインを提供できる場合、init=/bin/bash私のハードドライブを暗号化するのはあまり役に立ちません。この場合、暗号化はまったく意味がありません。

私はかなり具体的な2つの点に固執します。

  • 一般的なシステムベースのディストリビューション(DebianまたはUbuntu)が最初にTPMをロックする方法です。これはどのファイルが改ざんされないように保護しますか?
  • 変調を防ぐために、ブート順序で何を適用する必要がありますか?
    • 例: grub EFI バイナリファイル、EFI の grub.cfg、開始項目を編集するための grub パスワード、initramfs、...

答え1

私が詰まっているのは、BIOSファームウェアからログインまでの堅牢な信頼チェーンがあることを確認して、OSが改ざんされた場合に起動しないか、TPMが暗号化配信を拒否することを保証する方法を見つけることです。キー。

これはプロセスに組み込まれており、--tpm-pcrs=systemd-cryptenrollに提供するオプションです。

TPMは、システムファームウェア、ブートローダ、および場合によっては、オペレーティングシステムによって提供されるさまざまなイベントのメモリに「イベントログ」を保持します。各イベントはシステムの一部を「測定」します。たとえば、ファームウェアはgrubx64.efi実行可能ファイルがロードされたときにハッシュを記録し、GRUBはすべてのコマンドを記録し(おそらく?)実行中のカーネルイメージを記録します。 ;カーネルはinitrdのハッシュとコマンドラインのハッシュを記録します。各イベントは、TPMメモリに格納されたハッシュチェーンを「拡張」します。

これらすべての測定の対象は、それぞれSHAハッシュ値を保持するPCR(「プラットフォーム構成レジスタ」)のセットです。各イベントは、次の式を使用してPCRの1つを拡張します。

new_value = H(old_value || event_data_hash)

したがって、PCRの最終ハッシュは、そのPCRの全体のイベントチェーンを確認します。まるで単一のGitコミットハッシュがそれまでのコミットの完全な履歴をチェックするのと同じです。 (イベントログは1つですが、イベントごとに1つのPCRのみが更新されるため、各PCRは独立したハッシュチェーンとして機能します。)

PCR自体は何もしませんが、「封印」操作を使用して以下を指定できます。ポリシー特定の値を持つために特定のPCRが必要な場合があります。ポリシーが満たされない場合、TPM はデータのブロック解除を拒否します。

したがって、TPMがLUKSボリュームキーを封印(暗号化)するように要求されるたびに、ユーザーが指定した内容に基づいてポリシーがsystemd-cryptenroll含まれます。--tpm-pcrs=正確に保護されるターゲットは、選択したPCRによって異なります。

たとえば、PCR [4]には、実行中の各.efi実行可能ファイルを測定するファームウェア生成イベントが含まれています。 (独自の組み込みブートローダを持つ「EFIスタブ」で実行されている場合は、Linuxカーネルが含まれる可能性があります。)アップグレードするたびにハッシュが変更されるため、これは面倒です。したがって、BitLockerを使用すると、Windowsは通常、改ざん防止をセキュアブートに関連付けます。イベントを含むPCR[7]資格実行可能ファイルに署名するために使用されます。マイクロソフトの「公式Windowsの証明書」で署名されたすべてが通過します。

その後、最新の(5.17+)Linuxカーネルを使用してinitramfsも測定したい場合は、ポリシーにPCR [9]を含めることができます。カーネルコマンドラインの場合、systemd-bootはPCR [8]を更新します。 (GRUBがいつ使用されるのかはわかりません。)最近、システム開発者はカーネルとinitramfsを含む「統合カーネルイメージ」に焦点を当てており、パッケージ全体がバンドルされていることがわかります。単一の.efiバイナリ。

(私は持っています古いプロジェクト一般的な機能に加えて、イベントログをテキスト形式でダンプすることもできます。 )


具体的には、Linuxの場合、PCRインデックスを使用するための未定のガイドがあります。ここ

Ubuntuでは、パッケージtpm2ツールtpm2_eventlogカーネルを介してTPMイベントログを読み取るために使用できるコマンドが含まれています。

tpm2_eventlog /sys/kernel/security/tpm0/binary_bios_measurements

これにより、PCR値を生成するために使用されたものが正確に特定され、どのファイルや設定が改ざんされるのを効果的に防ぐことができます。

関連情報