最近、手動で署名されたモジュールが必要なドライバをインストールしましたが、モジュール署名が実際に行われていることと、なぜこのように実行されるのかを混乱させました。
このプロセスに関する他の質問がありますが、より技術的な質問です。署名モジュールの機能、なぜ必要なのか、代替策は何であるかについての簡単な説明は何ですか(明らかにdkmsはモジュールに自動的に署名できます)。
答え1
署名されていないモジュールまたは誤って署名されたモジュールを使用する場合(ログメッセージ+カーネルに汚染フラグを設定する)、警告するようにカーネルを設定したり、カーネルが確認できる署名なしのすべてのカーネルモジュールを完全に拒否するように設定できます。
これは、基本的にBIOSスタイルのブートプロセスを使用する場合、またはセキュアブートが無効になっているUEFIを使用する場合にオプションの追加のセキュリティプロセスにすぎません。これにより、侵入者がシステムに悪意のあるカーネルモジュール(侵入者のツールや操作を隠すためのカーネルベースのルートキット)を追加することがより困難になります。
ただし、これはセキュアブートが有効なUEFIを使用する場合のセキュアブート要件の一部です。セキュアブートの「精神」は、信頼できないコードをカーネル空間にロードすることを禁止することです。 UEFIファームウェアは、ブートローダに有効な署名(または許可されたSHA256ハッシュ)があることを確認します。ブートローダはオペレーティングシステムのカーネルで同じ署名を確認し、カーネルはこの要件をカーネルスペースで実行するように拡張する必要があります。
もちろん、オペレーティングシステムのカーネルはこの要件を満たさないように簡単に選択できます。しかし、セキュアブートを開発するグループは、これらの拒否のために少なくともシステム管理者の明示的な措置が必要であると決定しました。デフォルトは署名要件を強制することです。
(ちなみに、これは、最新のWindowsにデフォルトでインストールされているすべてのドライバに署名を要求する理由の1つです。署名されていないドライバをインストールするには、管理者アクセスが必要な設定を明示的に変更する必要があります。)
セキュアブートシステムから起動でき、署名されていないカーネル空間コードの「即時」実行を許可するツールが呼び出されます。セキュアブートバイパスデバイスマルウェアに分類されます。
マイクロソフトは最もよく知られているセキュアブート署名者であり、署名shimx64.efi
要件を適用するシムブートローダのバージョンにのみ署名します。
*.efi
セキュアブートをサポートするUEFIファームウェアには、Microsoft PE +バイナリ形式(ファイルで使用される形式)を使用してバイナリの署名を検証する機能が組み込まれています。ただし、Linuxの世界では通常、このバイナリ形式を使用せず、代わりにELFバイナリ形式を使用します。
LinuxカーネルモジュールとGNU GRUBブートローダモジュールはどちらもELF形式に基づいています。これを行うには、ブートローダとカーネルがELFバイナリの自己署名検証アルゴリズムを提供する必要がありますが、明らかにUEFIフォーラム(UEFIとセキュアブート仕様を管理する業界コンソーシアム)は、基本要件が次のように行われると判断しました。 。有効な署名を維持してください。
もちろん、これはDKMSを使用してカーネルモジュールを自動的にビルドして署名する場合に正確に予想されるものとは異なります。つまり、有効な署名を自動的に生成するために使用できる秘密鍵を持つ証明書があるので、侵入者はそれで署名してください。邪悪なカーネルモジュール。 Secure Bootを持たないシステムよりも悪くはありませんが、それほど安全ではありません。
複数のシステムがある場合は、1つのホスト(おそらく攻撃者の最も脅威の少ないホスト)にのみモジュール署名証明書の秘密鍵を保持し、それを使用してカスタムカーネルおよび/またはモジュールを構築することでセキュリティ上の利点を得ることができます。これを必要とする他のホストにそれを必要として展開できます。これにより、他のホストはモジュール署名証明書の公開部分のみを必要とします。これは既存の署名を検証するためにのみ使用でき、新しい署名を生成するためには使用できません。