設定 - MOK
概要
MOK (Machine Owner Key) は、Linuxシステムにおけるセキュアブートの拡張機能として重要な役割を持つ。
セキュアブートは、元々、UEFIファームウェアがブートローダの署名を検証して、信頼できるソフトウェアのみが起動できるようにする仕組みであった。
しかし、この仕組みではユーザが自身のカーネルモジュールを署名して使用することが困難であった。
そこで登場したのがMOKである。
MOKは、ユーザや組織が独自の暗号鍵を使用してカーネルモジュールに署名して、それをシステムに登録できるようにする仕組みである。
これにより、Microsoft等の大手ベンダーの鍵に依存せずに、自作やサードパーティ製のカーネルモジュールを安全に使用できるようになった。
MOKの仕組みは、以下に示す手順で機能する。
- まず、ユーザは自身の公開鍵と秘密鍵のペアを生成する。
- 秘密鍵を使用してカーネルモジュールに署名して、公開鍵をシステムのMOKリストに登録する。
- システムの起動時にて、shim (特殊なブートローダ) がMOKリストを参照して、登録された公開鍵を使用してカーネルモジュールの署名を検証する。
MOKの管理には、主にmokutilというツールを使用して、新しい鍵の登録、既存の鍵の削除、現在のMOKリストの表示等を行うことができる。
ただし、セキュリティ上の理由から、MOKリストの変更は次回の起動時にMOKマネージャーのGUIで確認する必要がある。
MOKのメリットは、セキュアブートの恩恵を受けつつ、システムの柔軟性を維持できることである。
例えば、カスタムドライバやサードパーティ製のカーネルモジュールを使用する必要がある場合でも、MOKを使用することで安全に導入できる。
一方で、MOKの使用には注意点もある。
不適切な管理は、システムのセキュリティを脅かす可能性がある。
また、MOKの操作には技術的な知識が必要であり、誤った操作によってシステムが起動できなくなる可能性もある。
署名の解除
MOKの署名はカーネルモジュールに適用された暗号学的な署名であり、1度適用されると、その署名自体を「解除」することはできない。
しかし、運用上では以下に示すような対応が可能である。
- カーネルモジュールの削除
- 署名されたモジュールファイルを削除すれば、そのモジュールはもう使用されない。
- ただし、これは署名を「解除」するのではなく、署名されたファイルを除去するだけである。
- MOKリストからの鍵の削除
- MOKリストから署名に使用した公開鍵を削除することにより、その鍵で署名された全てのモジュールが無効になる。
- これは、mokutilコマンドを使用して行うことができる。
sudo mokutil --delete <DERファイル名>.der
- このコマンドを実行した後、次回の起動時にMOKマネージャーのGUIで削除を確認する必要がある。
※注意
単にカーネルモジュールを削除しても、MOKリストから署名鍵が削除されるわけではない。
これらの操作は、システムのセキュリティに影響を与える可能性があるため、十分に注意して行う必要がある。
MOKの署名自体を解除することはできないが、上記の方法を使用して署名されたモジュールの使用を防いだり、システム全体でMOK検証を無効にすることが可能である。